From 71d77df560af421d106484e9276e89297b88e40a Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 04 六月 2025 19:09:47 +0800 Subject: [PATCH] 0312 调整结构简化为 只有 Client和Server概念 导出 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 38455 +++++++++++++++++++++++++++++------------------------------ 1 files changed, 18,751 insertions(+), 19,704 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index 3a5a7e5..0b5955d 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -1117,19710 +1117,6 @@ #------------------------------------------------------ -# A4 0C 多仙盟boss活动信息 #tagGCAllFamilyBossInfo - -class tagGCAllFamilyBossInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsEnd", c_ubyte), # 是否已结束 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - self.SubCmd = 0x0C - 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 = 0xA4 - self.SubCmd = 0x0C - self.IsEnd = 0 - return - - def GetLength(self): - return sizeof(tagGCAllFamilyBossInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 0C 多仙盟boss活动信息 //tagGCAllFamilyBossInfo: - Cmd:%s, - SubCmd:%s, - IsEnd:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.IsEnd - ) - return DumpString - - -m_NAtagGCAllFamilyBossInfo=tagGCAllFamilyBossInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossInfo.Cmd,m_NAtagGCAllFamilyBossInfo.SubCmd))] = m_NAtagGCAllFamilyBossInfo - - -#------------------------------------------------------ -# A4 11 传功邀请信息 #tagGCChuangongInviteInfo - -class tagGCChuangongInviteInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x11 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x11 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - 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.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo - - -#------------------------------------------------------ -# A4 12 传功开始 #tagGCChuangongStart - -class tagGCChuangongStart(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x12 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x12 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV - ) - return DumpString - - -m_NAtagGCChuangongStart=tagGCChuangongStart() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart - - -#------------------------------------------------------ -# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo - -class tagGCFakeFamilyInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count) - FakeIDList = list() #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x0A - 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.FakeIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x0A - self.Count = 0 - self.FakeIDList = 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.FakeIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - FakeIDList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo - - -#------------------------------------------------------ -# A4 03 家族行为信息 #tagGCFamilyActionInfo - -class tagGCFamilyAction(Structure): - Time = 0 #(DWORD Time)//时间 - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name) - Value1 = 0 #(DWORD Value1)//数值1 - Value2 = 0 #(DWORD Value2)//数值2 - Value3 = 0 #(DWORD Value3)//数值3 - Value4 = 0 #(DWORD Value4)//数值4 - Value5 = 0 #(DWORD Value5)//数值5 - Value6 = 0 #(DWORD Value6)//数值6 - UseDataLen = 0 #(WORD UseDataLen) - UseData = "" #(String UseData) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.UseDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UseData,_pos = CommFunc.ReadString(_lpData, _pos,self.UseDataLen) - return _pos - - def Clear(self): - self.Time = 0 - self.NameLen = 0 - self.Name = "" - self.Value1 = 0 - self.Value2 = 0 - self.Value3 = 0 - self.Value4 = 0 - self.Value5 = 0 - self.Value6 = 0 - self.UseDataLen = 0 - self.UseData = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.Name) - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 2 - length += len(self.UseData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.Time) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - data = CommFunc.WriteDWORD(data, self.Value3) - data = CommFunc.WriteDWORD(data, self.Value4) - data = CommFunc.WriteDWORD(data, self.Value5) - data = CommFunc.WriteDWORD(data, self.Value6) - data = CommFunc.WriteWORD(data, self.UseDataLen) - data = CommFunc.WriteString(data, self.UseDataLen, self.UseData) - return data - - def OutputString(self): - DumpString = ''' - Time:%d, - NameLen:%d, - Name:%s, - Value1:%d, - Value2:%d, - Value3:%d, - Value4:%d, - Value5:%d, - Value6:%d, - UseDataLen:%d, - UseData:%s - '''\ - %( - self.Time, - self.NameLen, - self.Name, - self.Value1, - self.Value2, - self.Value3, - self.Value4, - self.Value5, - self.Value6, - self.UseDataLen, - self.UseData - ) - return DumpString - - -class tagGCFamilyActionInfo(Structure): - Head = tagHead() - FamilyID = 0 #(DWORD FamilyID)//家族ID - ActionType = 0 #(BYTE ActionType)//类型 - Count = 0 #(WORD Count)//数量 - FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x03 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temFamilyActionList = tagGCFamilyAction() - _pos = temFamilyActionList.ReadData(_lpData, _pos) - self.FamilyActionList.append(temFamilyActionList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x03 - self.FamilyID = 0 - self.ActionType = 0 - self.Count = 0 - self.FamilyActionList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 2 - for i in range(self.Count): - length += self.FamilyActionList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.ActionType) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.FamilyActionList[i].GetLength(), self.FamilyActionList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FamilyID:%d, - ActionType:%d, - Count:%d, - FamilyActionList:%s - '''\ - %( - self.Head.OutputString(), - self.FamilyID, - self.ActionType, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCFamilyActionInfo=tagGCFamilyActionInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyActionInfo.Head.Cmd,m_NAtagGCFamilyActionInfo.Head.SubCmd))] = m_NAtagGCFamilyActionInfo - - -#------------------------------------------------------ -# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo - -class tagGCFamilyBosFBInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("HurtTotal", c_int), # 仙盟累计伤血,亿求余部分 - ("HurtTotalPoint", c_int), # 仙盟累计伤血,亿整除部分 - ("FightMemCount", c_ubyte), # 目前正在仙盟boss副本中的成员数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - self.SubCmd = 0x0E - 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 = 0xA4 - self.SubCmd = 0x0E - self.HurtTotal = 0 - self.HurtTotalPoint = 0 - self.FightMemCount = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyBosFBInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo: - Cmd:%s, - SubCmd:%s, - HurtTotal:%d, - HurtTotalPoint:%d, - FightMemCount:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.HurtTotal, - self.HurtTotalPoint, - self.FightMemCount - ) - return DumpString - - -m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo - - -#------------------------------------------------------ -# A4 02 家族boss副本开启及击杀信息 #tagGCFamilyBossFBInfo - -class tagGCFamilyBossFBInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsOpen", c_int), # 是否已开启 - ("OpenCnt", c_ubyte), # 本周已开启次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - 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 = 0xA4 - self.SubCmd = 0x02 - self.IsOpen = 0 - self.OpenCnt = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyBossFBInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 02 家族boss副本开启及击杀信息 //tagGCFamilyBossFBInfo: - Cmd:%s, - SubCmd:%s, - IsOpen:%d, - OpenCnt:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.IsOpen, - self.OpenCnt - ) - return DumpString - - -m_NAtagGCFamilyBossFBInfo=tagGCFamilyBossFBInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBossFBInfo.Cmd,m_NAtagGCFamilyBossFBInfo.SubCmd))] = m_NAtagGCFamilyBossFBInfo - - -#------------------------------------------------------ -# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo - -class tagFGrabRedPacketInfo(Structure): - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)//名字 - PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.NameLen = 0 - self.Name = "" - self.PlayeJob = 0 - self.Face = 0 - self.FacePic = 0 - self.MoneyNum = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += len(self.Name) - length += 1 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteBYTE(data, self.PlayeJob) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.MoneyNum) - return data - - def OutputString(self): - DumpString = ''' - NameLen:%d, - Name:%s, - PlayeJob:%d, - Face:%d, - FacePic:%d, - MoneyNum:%d - '''\ - %( - self.NameLen, - self.Name, - self.PlayeJob, - self.Face, - self.FacePic, - self.MoneyNum - ) - return DumpString - - -class tagGCFamilyRedPacketGrabInfo(Structure): - Head = tagHead() - RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID - Count = 0 #(BYTE Count)//数量 - GrabInfo = list() #(vector<tagFGrabRedPacketInfo> GrabInfo)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temGrabInfo = tagFGrabRedPacketInfo() - _pos = temGrabInfo.ReadData(_lpData, _pos) - self.GrabInfo.append(temGrabInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x05 - self.RedPacketID = 0 - self.Count = 0 - self.GrabInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - for i in range(self.Count): - length += self.GrabInfo[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.RedPacketID) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.GrabInfo[i].GetLength(), self.GrabInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RedPacketID:%d, - Count:%d, - GrabInfo:%s - '''\ - %( - self.Head.OutputString(), - self.RedPacketID, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCFamilyRedPacketGrabInfo=tagGCFamilyRedPacketGrabInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketGrabInfo.Head.Cmd,m_NAtagGCFamilyRedPacketGrabInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketGrabInfo - - -#------------------------------------------------------ -# A4 04 家族红包总信息 #tagGCFamilyRedPacketInfo - -class tagFRedPacketInfo(Structure): - RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID - PlayerID = 0 #(DWORD PlayerID)//玩家ID - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)//玩家名字 - Time = 0 #(DWORD Time)//时间 - PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - MoneyType = 0 #(BYTE MoneyType)//金钱类型 - MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 - GetWay = 0 #(BYTE GetWay)//获得途径 - PacketCnt = 0 #(BYTE PacketCnt)//可抢个数 - State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完 - WishLen = 0 #(BYTE WishLen) - Wish = "" #(String Wish)//祝福语 - IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen) - self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.RedPacketID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.Time = 0 - self.PlayeJob = 0 - self.Face = 0 - self.FacePic = 0 - self.MoneyType = 0 - self.MoneyNum = 0 - self.GetWay = 0 - self.PacketCnt = 0 - self.State = 0 - self.WishLen = 0 - self.Wish = "" - self.IsAnonymous = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 4 - length += 1 - length += 4 - length += 4 - length += 1 - length += 4 - length += 1 - length += 1 - length += 1 - length += 1 - length += len(self.Wish) - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.RedPacketID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteDWORD(data, self.Time) - data = CommFunc.WriteBYTE(data, self.PlayeJob) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteBYTE(data, self.MoneyType) - data = CommFunc.WriteDWORD(data, self.MoneyNum) - data = CommFunc.WriteBYTE(data, self.GetWay) - data = CommFunc.WriteBYTE(data, self.PacketCnt) - data = CommFunc.WriteBYTE(data, self.State) - data = CommFunc.WriteBYTE(data, self.WishLen) - data = CommFunc.WriteString(data, self.WishLen, self.Wish) - data = CommFunc.WriteBYTE(data, self.IsAnonymous) - return data - - def OutputString(self): - DumpString = ''' - RedPacketID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - Time:%d, - PlayeJob:%d, - Face:%d, - FacePic:%d, - MoneyType:%d, - MoneyNum:%d, - GetWay:%d, - PacketCnt:%d, - State:%d, - WishLen:%d, - Wish:%s, - IsAnonymous:%d - '''\ - %( - self.RedPacketID, - self.PlayerID, - self.NameLen, - self.Name, - self.Time, - self.PlayeJob, - self.Face, - self.FacePic, - self.MoneyType, - self.MoneyNum, - self.GetWay, - self.PacketCnt, - self.State, - self.WishLen, - self.Wish, - self.IsAnonymous - ) - return DumpString - - -class tagGCFamilyRedPacketInfo(Structure): - Head = tagHead() - IsAll = 0 #(BYTE IsAll)//是否全部红包 - Count = 0 #(BYTE Count)//红包数量 - RedPacketInfo = list() #(vector<tagFRedPacketInfo> RedPacketInfo)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temRedPacketInfo = tagFRedPacketInfo() - _pos = temRedPacketInfo.ReadData(_lpData, _pos) - self.RedPacketInfo.append(temRedPacketInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x04 - self.IsAll = 0 - self.Count = 0 - self.RedPacketInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.Count): - length += self.RedPacketInfo[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsAll) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.RedPacketInfo[i].GetLength(), self.RedPacketInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - IsAll:%d, - Count:%d, - RedPacketInfo:%s - '''\ - %( - self.Head.OutputString(), - self.IsAll, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCFamilyRedPacketInfo=tagGCFamilyRedPacketInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketInfo.Head.Cmd,m_NAtagGCFamilyRedPacketInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketInfo - - -#------------------------------------------------------ -# A4 06 家族仓库物品信息 #tagGCFamilyStoreItemInfo - -class tagGCFamilyStoreItem(Structure): - Index = 0 #(BYTE Index)// 仓库格子索引,从0开始代表第一格 - ItemID = 0 #(DWORD ItemID)// 物品ID - ItemDataLen = 0 #(WORD ItemDataLen) - ItemData = "" #(String ItemData)//size = ItemDataLen - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen) - return _pos - - def Clear(self): - self.Index = 0 - self.ItemID = 0 - self.ItemDataLen = 0 - self.ItemData = "" - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 2 - length += len(self.ItemData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.Index) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemDataLen) - data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData) - return data - - def OutputString(self): - DumpString = ''' - Index:%d, - ItemID:%d, - ItemDataLen:%d, - ItemData:%s - '''\ - %( - self.Index, - self.ItemID, - self.ItemDataLen, - self.ItemData - ) - return DumpString - - -class tagGCFamilyStoreItemInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count)//数量 - StoreItemList = list() #(vector<tagGCFamilyStoreItem> StoreItemList)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x06 - 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): - temStoreItemList = tagGCFamilyStoreItem() - _pos = temStoreItemList.ReadData(_lpData, _pos) - self.StoreItemList.append(temStoreItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x06 - self.Count = 0 - self.StoreItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.StoreItemList[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.StoreItemList[i].GetLength(), self.StoreItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - StoreItemList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCFamilyStoreItemInfo=tagGCFamilyStoreItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemInfo.Head.Cmd,m_NAtagGCFamilyStoreItemInfo.Head.SubCmd))] = m_NAtagGCFamilyStoreItemInfo - - -#------------------------------------------------------ -# A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear - -class tagGCFamilyStoreItemClear(Structure): - Head = tagHead() - ClearType = 0 #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除 - IndexCount = 0 #(BYTE IndexCount) - IndexList = list() #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x07 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ClearType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.IndexCount): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.IndexList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x07 - self.ClearType = 0 - self.IndexCount = 0 - self.IndexList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 1 * self.IndexCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ClearType) - data = CommFunc.WriteBYTE(data, self.IndexCount) - for i in range(self.IndexCount): - data = CommFunc.WriteBYTE(data, self.IndexList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ClearType:%d, - IndexCount:%d, - IndexList:%s - '''\ - %( - self.Head.OutputString(), - self.ClearType, - self.IndexCount, - "..." - ) - return DumpString - - -m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear - - -#------------------------------------------------------ -# A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo - -class tagGCFamilySWRHInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("HasJoin", c_ubyte), # 是否已参与 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - self.SubCmd = 0x09 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA4 - self.SubCmd = 0x09 - self.HasJoin = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilySWRHInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 09 家族守卫人皇信息通知 //tagGCFamilySWRHInfo: - Cmd:%s, - SubCmd:%s, - HasJoin:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.HasJoin - ) - return DumpString - - -m_NAtagGCFamilySWRHInfo=tagGCFamilySWRHInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilySWRHInfo.Cmd,m_NAtagGCFamilySWRHInfo.SubCmd))] = m_NAtagGCFamilySWRHInfo - - -#------------------------------------------------------ -# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo - -class tagGCPlayerJoinFamilyWarInfo(Structure): - Head = tagHead() - JoinFamilyID = 0 #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包 - JoinFamilyNameLen = 0 #(BYTE JoinFamilyNameLen) - JoinFamilyName = "" #(String JoinFamilyName) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x0B - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x0B - self.JoinFamilyID = 0 - self.JoinFamilyNameLen = 0 - self.JoinFamilyName = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.JoinFamilyName) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.JoinFamilyID) - data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen) - data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - JoinFamilyID:%d, - JoinFamilyNameLen:%d, - JoinFamilyName:%s - '''\ - %( - self.Head.OutputString(), - self.JoinFamilyID, - self.JoinFamilyNameLen, - self.JoinFamilyName - ) - return DumpString - - -m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo - - -#------------------------------------------------------ -# A4 08 查看家族 #tagGCPyAllFamilyView - -class tagGCPyFamilyView(Structure): - FamilyIndex = 0 #(WORD FamilyIndex) - FamilyID = 0 #(DWORD FamilyID)//家族ID - FamilyNameLen = 0 #(BYTE FamilyNameLen) - FamilyName = "" #(String FamilyName)//size = FamilyNameLen - LeaderID = 0 #(DWORD LeaderID)//族长ID - LeaderNameLen = 0 #(BYTE LeaderNameLen) - LeaderName = "" #(String LeaderName)//size = LeaderNameLen - LeaderOfficialRank = 0 #(BYTE LeaderOfficialRank)//境界 - FamilyLV = 0 #(WORD FamilyLV)//家族等级 - FamilyMemberCount = 0 #(WORD FamilyMemberCount)//家族人数 - JoinAccept = 0 #(BYTE JoinAccept)//申请状态 - WarRank = 0 #(BYTE WarRank)//联赛排名 - TotalFightPower = 0 #(DWORD TotalFightPower)//总战力,不足1个亿的部分 - TotalFightPowerEx = 0 #(DWORD TotalFightPowerEx)//总战力点,1点=1亿 - EmblemID = 0 #(BYTE EmblemID)//徽章ID - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.FamilyIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyNameLen) - self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LeaderNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,self.LeaderNameLen) - self.LeaderOfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FamilyMemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.JoinAccept,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.FamilyIndex = 0 - self.FamilyID = 0 - self.FamilyNameLen = 0 - self.FamilyName = "" - self.LeaderID = 0 - self.LeaderNameLen = 0 - self.LeaderName = "" - self.LeaderOfficialRank = 0 - self.FamilyLV = 0 - self.FamilyMemberCount = 0 - self.JoinAccept = 0 - self.WarRank = 0 - self.TotalFightPower = 0 - self.TotalFightPowerEx = 0 - self.EmblemID = 0 - return - - def GetLength(self): - length = 0 - length += 2 - length += 4 - length += 1 - length += len(self.FamilyName) - length += 4 - length += 1 - length += len(self.LeaderName) - length += 1 - length += 2 - length += 2 - length += 1 - length += 1 - length += 4 - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteWORD(data, self.FamilyIndex) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.FamilyNameLen) - data = CommFunc.WriteString(data, self.FamilyNameLen, self.FamilyName) - data = CommFunc.WriteDWORD(data, self.LeaderID) - data = CommFunc.WriteBYTE(data, self.LeaderNameLen) - data = CommFunc.WriteString(data, self.LeaderNameLen, self.LeaderName) - data = CommFunc.WriteBYTE(data, self.LeaderOfficialRank) - data = CommFunc.WriteWORD(data, self.FamilyLV) - data = CommFunc.WriteWORD(data, self.FamilyMemberCount) - data = CommFunc.WriteBYTE(data, self.JoinAccept) - data = CommFunc.WriteBYTE(data, self.WarRank) - data = CommFunc.WriteDWORD(data, self.TotalFightPower) - data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx) - data = CommFunc.WriteBYTE(data, self.EmblemID) - return data - - def OutputString(self): - DumpString = ''' - FamilyIndex:%d, - FamilyID:%d, - FamilyNameLen:%d, - FamilyName:%s, - LeaderID:%d, - LeaderNameLen:%d, - LeaderName:%s, - LeaderOfficialRank:%d, - FamilyLV:%d, - FamilyMemberCount:%d, - JoinAccept:%d, - WarRank:%d, - TotalFightPower:%d, - TotalFightPowerEx:%d, - EmblemID:%d - '''\ - %( - self.FamilyIndex, - self.FamilyID, - self.FamilyNameLen, - self.FamilyName, - self.LeaderID, - self.LeaderNameLen, - self.LeaderName, - self.LeaderOfficialRank, - self.FamilyLV, - self.FamilyMemberCount, - self.JoinAccept, - self.WarRank, - self.TotalFightPower, - self.TotalFightPowerEx, - self.EmblemID - ) - return DumpString - - -class tagGCPyAllFamilyView(Structure): - Head = tagHead() - TotalCount = 0 #(DWORD TotalCount)//一共有多少页 - CurPage = 0 #(WORD CurPage)//当前第几页, 每页个数:FAMILY_VIEW_PAGE_COUNT - PageCount = 0 #(BYTE PageCount)//这一页有多少数目 - Family = list() #(vector<tagGCPyFamilyView> Family)//size = PageCount - IsSearching = 0 #(BYTE IsSearching)//是否在模糊搜索状态下 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CurPage,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PageCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PageCount): - temFamily = tagGCPyFamilyView() - _pos = temFamily.ReadData(_lpData, _pos) - self.Family.append(temFamily) - self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x08 - self.TotalCount = 0 - self.CurPage = 0 - self.PageCount = 0 - self.Family = list() - self.IsSearching = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += 1 - for i in range(self.PageCount): - length += self.Family[i].GetLength() - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TotalCount) - data = CommFunc.WriteWORD(data, self.CurPage) - data = CommFunc.WriteBYTE(data, self.PageCount) - for i in range(self.PageCount): - data = CommFunc.WriteString(data, self.Family[i].GetLength(), self.Family[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsSearching) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TotalCount:%d, - CurPage:%d, - PageCount:%d, - Family:%s, - IsSearching:%d - '''\ - %( - self.Head.OutputString(), - self.TotalCount, - self.CurPage, - self.PageCount, - "...", - self.IsSearching - ) - return DumpString - - -m_NAtagGCPyAllFamilyView=tagGCPyAllFamilyView() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPyAllFamilyView.Head.Cmd,m_NAtagGCPyAllFamilyView.Head.SubCmd))] = m_NAtagGCPyAllFamilyView - - -#------------------------------------------------------ -# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes - -class tagGCServerCreatFamilyTimes(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Times", c_int), #建盟次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - self.SubCmd = 0x0D - 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 = 0xA4 - self.SubCmd = 0x0D - self.Times = 0 - return - - def GetLength(self): - return sizeof(tagGCServerCreatFamilyTimes) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes: - Cmd:%s, - SubCmd:%s, - Times:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.Times - ) - return DumpString - - -m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes - - -#------------------------------------------------------ -# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo - -class tagGCTagFamilyMember(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)//size = NameLen - FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级 - LV = 0 #(WORD LV) - Job = 0 #(BYTE Job)//职业 - Face = 0 #(DWORD Face)//头像 - FacePic = 0 #(DWORD FacePic)//头像外框 - OfficialRank = 0 #(BYTE OfficialRank)//境界 - FightPower = 0 #(DWORD FightPower)//成员战力,求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//成员战力,整除亿部分 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.FamilyLV = 0 - self.LV = 0 - self.Job = 0 - self.Face = 0 - self.FacePic = 0 - self.OfficialRank = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.Name) - length += 1 - length += 2 - length += 1 - length += 4 - length += 4 - length += 1 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteBYTE(data, self.FamilyLV) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteBYTE(data, self.OfficialRank) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - Name:%s, - FamilyLV:%d, - LV:%d, - Job:%d, - Face:%d, - FacePic:%d, - OfficialRank:%d, - FightPower:%d, - FightPowerEx:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.Name, - self.FamilyLV, - self.LV, - self.Job, - self.Face, - self.FacePic, - self.OfficialRank, - self.FightPower, - self.FightPowerEx - ) - return DumpString - - -class tagGCTagFamilyInfo(Structure): - Head = tagHead() - FamilyID = 0 #(DWORD FamilyID) - FamilyName = "" #(char FamilyName[33])//家族名称 - FamilyLV = 0 #(WORD FamilyLV)//家族等级 - BroadcastLen = 0 #(WORD BroadcastLen)//公告 - Broadcast = "" #(String Broadcast)//size = BroadcastLen - MemberCount = 0 #(WORD MemberCount)//人数 - Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount - FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 - EmblemID = 0 #(DWORD EmblemID)//徽章ID - ServerID = 0 #(DWORD ServerID)//仙盟区服ID - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x13 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen) - self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.MemberCount): - temMember = tagGCTagFamilyMember() - _pos = temMember.ReadData(_lpData, _pos) - self.Member.append(temMember) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x13 - self.FamilyID = 0 - self.FamilyName = "" - self.FamilyLV = 0 - self.BroadcastLen = 0 - self.Broadcast = "" - self.MemberCount = 0 - self.Member = list() - self.FightPower = 0 - self.FightPowerEx = 0 - self.EmblemID = 0 - self.ServerID = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 33 - length += 2 - length += 2 - length += len(self.Broadcast) - length += 2 - for i in range(self.MemberCount): - length += self.Member[i].GetLength() - 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.FamilyID) - data = CommFunc.WriteString(data, 33, self.FamilyName) - data = CommFunc.WriteWORD(data, self.FamilyLV) - data = CommFunc.WriteWORD(data, self.BroadcastLen) - data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast) - data = CommFunc.WriteWORD(data, self.MemberCount) - for i in range(self.MemberCount): - data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.EmblemID) - data = CommFunc.WriteDWORD(data, self.ServerID) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FamilyID:%d, - FamilyName:%s, - FamilyLV:%d, - BroadcastLen:%d, - Broadcast:%s, - MemberCount:%d, - Member:%s, - FightPower:%d, - FightPowerEx:%d, - EmblemID:%d, - ServerID:%d - '''\ - %( - self.Head.OutputString(), - self.FamilyID, - self.FamilyName, - self.FamilyLV, - self.BroadcastLen, - self.Broadcast, - self.MemberCount, - "...", - self.FightPower, - self.FightPowerEx, - self.EmblemID, - self.ServerID - ) - return DumpString - - -m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo - - -#------------------------------------------------------ -#A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo - -class tagtMemberInfo(Structure): - PlayerID = 0 #(DWORD PlayerID)//玩家ID - NameLen = 0 #(BYTE NameLen)//名字长度 - Name = "" #(String Name)//size=NameLen - PlayerLV = 0 #(WORD PlayerLV)//玩家等级 - PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 - PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分 - PlayeFightPowerEx = 0 #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿 - RequestTime = 0 #(DWORD RequestTime)//申请时间 - IsOnLine = 0 #(BYTE IsOnLine)//是否在线 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.PlayerLV = 0 - self.PlayeJob = 0 - self.PlayeFightPower = 0 - self.PlayeFightPowerEx = 0 - self.RequestTime = 0 - self.IsOnLine = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 4 - length += 4 - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.PlayerLV) - data = CommFunc.WriteBYTE(data, self.PlayeJob) - data = CommFunc.WriteDWORD(data, self.PlayeFightPower) - data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx) - data = CommFunc.WriteDWORD(data, self.RequestTime) - data = CommFunc.WriteBYTE(data, self.IsOnLine) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - Name:%s, - PlayerLV:%d, - PlayeJob:%d, - PlayeFightPower:%d, - PlayeFightPowerEx:%d, - RequestTime:%d, - IsOnLine:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.Name, - self.PlayerLV, - self.PlayeJob, - self.PlayeFightPower, - self.PlayeFightPowerEx, - self.RequestTime, - self.IsOnLine - ) - return DumpString - - -class tagGCViewFamilyRequestInfo(Structure): - Head = tagHead() - RequestMemberCount = 0 #(BYTE RequestMemberCount)//申请成员的数量 - MemberInfo = list() #(vector<tagtMemberInfo> MemberInfo)//size = RequestMemberCount - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x01 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RequestMemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RequestMemberCount): - temMemberInfo = tagtMemberInfo() - _pos = temMemberInfo.ReadData(_lpData, _pos) - self.MemberInfo.append(temMemberInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA4 - self.Head.SubCmd = 0x01 - self.RequestMemberCount = 0 - self.MemberInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.RequestMemberCount): - length += self.MemberInfo[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RequestMemberCount) - for i in range(self.RequestMemberCount): - data = CommFunc.WriteString(data, self.MemberInfo[i].GetLength(), self.MemberInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RequestMemberCount:%d, - MemberInfo:%s - '''\ - %( - self.Head.OutputString(), - self.RequestMemberCount, - "..." - ) - return DumpString - - -m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo - - -#------------------------------------------------------ -# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo - -class tagGCArenaBattlePlayerInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)//目标玩家ID - PlayerName = "" #(char PlayerName[33]) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV)//等级 - RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 - FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 - Score = 0 #(DWORD Score)//积分 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x26 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_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.ReadWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x26 - self.PlayerID = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.RealmLV = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.Score = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 33 - length += 1 - length += 2 - length += 2 - 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.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.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.Score) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - FightPower:%d, - FightPowerEx:%d, - Score:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.FightPower, - self.FightPowerEx, - self.Score - ) - return DumpString - - -m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo - - -#------------------------------------------------------ -# 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)//战力求余亿部分,机器人读等级表取等级对应战力 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 - Score = 0 #(DWORD Score)//积分 - AddScoreLen = 0 #(BYTE AddScoreLen) - AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 - IsWin = 0 #(BYTE IsWin)//是否获胜 - Time = 0 #(DWORD Time)//时间戳 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score,_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) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.FightPowerEx = 0 - self.Score = 0 - self.AddScoreLen = 0 - self.AddScore = "" - self.IsWin = 0 - self.Time = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 2 - length += 2 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.AddScore) - length += 1 - length += 4 - 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.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.Score) - 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) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - FightPower:%d, - FightPowerEx:%d, - Score:%d, - AddScoreLen:%d, - AddScore:%s, - IsWin:%d, - Time:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.FightPower, - self.FightPowerEx, - self.Score, - self.AddScoreLen, - self.AddScore, - self.IsWin, - self.Time, - self.Face, - self.FacePic - ) - 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)//战力求余亿部分,机器人读等级表取等级对应战力 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 - Score = 0 #(DWORD Score)//积分 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.FightPowerEx = 0 - self.Score = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 2 - length += 2 - length += 4 - length += 4 - length += 4 - 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.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.Score) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - FightPower:%d, - FightPowerEx:%d, - Score:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.FightPower, - self.FightPowerEx, - self.Score, - self.Face, - self.FacePic - ) - 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): - _pack_ = 1 - _fields_ = [ - ("BossID", c_int), # bossID - ("AddState", 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.BossID = 0 - self.AddState = 0 - return - - def GetLength(self): - return sizeof(tagGCBossAttention) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A9 09 通知BOSS关注记录 //tagGCBossAttentionInfo: - BossID:%d, - AddState:%d - '''\ - %( - self.BossID, - self.AddState - ) - return DumpString - - -class tagGCBossAttentionInfo(Structure): - Head = tagHead() - BossCnt = 0 #(BYTE BossCnt)//boss个数 - BossList = list() #(vector<tagGCBossAttention> BossList)//列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BossCnt): - temBossList = tagGCBossAttention() - _pos = temBossList.ReadData(_lpData, _pos) - self.BossList.append(temBossList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x09 - self.BossCnt = 0 - self.BossList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.BossCnt): - length += self.BossList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.BossCnt) - for i in range(self.BossCnt): - data = CommFunc.WriteString(data, self.BossList[i].GetLength(), self.BossList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - BossCnt:%d, - BossList:%s - '''\ - %( - self.Head.OutputString(), - self.BossCnt, - "..." - ) - return DumpString - - -m_NAtagGCBossAttentionInfo=tagGCBossAttentionInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossAttentionInfo.Head.Cmd,m_NAtagGCBossAttentionInfo.Head.SubCmd))] = m_NAtagGCBossAttentionInfo - - -#------------------------------------------------------ -# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo - -class tagGCBossShuntLineState(Structure): - BossID = 0 #(DWORD BossID)// bossID - LineCount = 0 #(BYTE LineCount) - LineIDList = list() #(vector<BYTE> LineIDList)// 线路ID列表 - StateList = list() #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.LineCount): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.LineIDList.append(value) - for i in range(self.LineCount): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.StateList.append(value) - return _pos - - def Clear(self): - self.BossID = 0 - self.LineCount = 0 - self.LineIDList = list() - self.StateList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 1 * self.LineCount - length += 1 * self.LineCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.BossID) - data = CommFunc.WriteBYTE(data, self.LineCount) - for i in range(self.LineCount): - data = CommFunc.WriteBYTE(data, self.LineIDList[i]) - for i in range(self.LineCount): - data = CommFunc.WriteBYTE(data, self.StateList[i]) - return data - - def OutputString(self): - DumpString = ''' - BossID:%d, - LineCount:%d, - LineIDList:%s, - StateList:%s - '''\ - %( - self.BossID, - self.LineCount, - "...", - "..." - ) - return DumpString - - -class tagGCBossShuntLineStateInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count) - BossLineStateInfo = list() #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - 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): - temBossLineStateInfo = tagGCBossShuntLineState() - _pos = temBossLineStateInfo.ReadData(_lpData, _pos) - self.BossLineStateInfo.append(temBossLineStateInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x01 - self.Count = 0 - self.BossLineStateInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.BossLineStateInfo[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.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - BossLineStateInfo:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo - - -#------------------------------------------------------ -# A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice - -class tagGCBourseItemPrice(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ItemID", c_int), #物品ID - ("Price", c_int), #最新成交单价 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA9 - self.SubCmd = 0xAC - 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 = 0xA9 - self.SubCmd = 0xAC - self.ItemID = 0 - self.Price = 0 - return - - def GetLength(self): - return sizeof(tagGCBourseItemPrice) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A9 AC 交易所物品最新成交价通知 //tagGCBourseItemPrice: - Cmd:%s, - SubCmd:%s, - ItemID:%d, - Price:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ItemID, - self.Price - ) - return DumpString - - -m_NAtagGCBourseItemPrice=tagGCBourseItemPrice() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseItemPrice.Cmd,m_NAtagGCBourseItemPrice.SubCmd))] = m_NAtagGCBourseItemPrice - - -#------------------------------------------------------ -# A9 AB 交易所交易记录通知 #tagGCBourseRecordInfo - -class tagGCBourseRecord(Structure): - Type = 0 #(BYTE Type)//类型 0-购买 1-卖出 - Timestamp = 0 #(DWORD Timestamp)//时间戳 - TradeTax = 0 #(DWORD TradeTax)//交易税 - TradeMoney = 0 #(DWORD TradeMoney)//收支 - ItemDataLen = 0 #(WORD ItemDataLen) - ItemData = "" #(String ItemData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Timestamp,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TradeTax,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TradeMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen) - return _pos - - def Clear(self): - self.Type = 0 - self.Timestamp = 0 - self.TradeTax = 0 - self.TradeMoney = 0 - self.ItemDataLen = 0 - self.ItemData = "" - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 4 - length += 4 - length += 2 - length += len(self.ItemData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.Type) - data = CommFunc.WriteDWORD(data, self.Timestamp) - data = CommFunc.WriteDWORD(data, self.TradeTax) - data = CommFunc.WriteDWORD(data, self.TradeMoney) - data = CommFunc.WriteWORD(data, self.ItemDataLen) - data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData) - return data - - def OutputString(self): - DumpString = ''' - Type:%d, - Timestamp:%d, - TradeTax:%d, - TradeMoney:%d, - ItemDataLen:%d, - ItemData:%s - '''\ - %( - self.Type, - self.Timestamp, - self.TradeTax, - self.TradeMoney, - self.ItemDataLen, - self.ItemData - ) - return DumpString - - -class tagGCBourseRecordInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count)//数量 - RecordList = list() #(vector<tagGCBourseRecord> RecordList)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAB - 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): - temRecordList = tagGCBourseRecord() - _pos = temRecordList.ReadData(_lpData, _pos) - self.RecordList.append(temRecordList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAB - self.Count = 0 - self.RecordList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.RecordList[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.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - RecordList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCBourseRecordInfo=tagGCBourseRecordInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseRecordInfo.Head.Cmd,m_NAtagGCBourseRecordInfo.Head.SubCmd))] = m_NAtagGCBourseRecordInfo - - -#------------------------------------------------------ -#A9 AA 删除邮件通知 #tagGCDelCompensationResult - -class tagGCDelCompensationResult(Structure): - Head = tagHead() - GUID = "" #(char GUID[40]) - Result = 0 #(BYTE Result)// 删除状态 0 不成功 1成功 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAA - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAA - self.GUID = "" - self.Result = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 40 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 40, self.GUID) - data = CommFunc.WriteBYTE(data, self.Result) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - GUID:%s, - Result:%d - '''\ - %( - self.Head.OutputString(), - self.GUID, - self.Result - ) - return DumpString - - -m_NAtagGCDelCompensationResult=tagGCDelCompensationResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelCompensationResult.Head.Cmd,m_NAtagGCDelCompensationResult.Head.SubCmd))] = m_NAtagGCDelCompensationResult - - -#------------------------------------------------------ -# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime - -class tagDogzTimeInfoObj(Structure): - _pack_ = 1 - _fields_ = [ - ("NPCID", c_int), # npcid - ("RefreshSecond", c_int), # 刷新倒计时, 秒 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.NPCID = 0 - self.RefreshSecond = 0 - return - - def GetLength(self): - return sizeof(tagDogzTimeInfoObj) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime: - NPCID:%d, - RefreshSecond:%d - '''\ - %( - self.NPCID, - self.RefreshSecond - ) - return DumpString - - -class tagGCDogzNPCRefreshTime(Structure): - Head = tagHead() - Cnt = 0 #(BYTE Cnt)//信息个数 - InfoList = list() #(vector<tagDogzTimeInfoObj> InfoList)//信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Cnt): - temInfoList = tagDogzTimeInfoObj() - _pos = temInfoList.ReadData(_lpData, _pos) - self.InfoList.append(temInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x04 - self.Cnt = 0 - self.InfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Cnt): - 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.Cnt) - for i in range(self.Cnt): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Cnt:%d, - InfoList:%s - '''\ - %( - self.Head.OutputString(), - self.Cnt, - "..." - ) - return DumpString - - -m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime - - -#------------------------------------------------------ -# A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo - -class tagGCFriendSendEnergyInfo(Structure): - Head = tagHead() - DataSize = 0 #(DWORD DataSize) - SendData = "" #(String SendData)//赠送记录 - RecvSize = 0 #(DWORD RecvSize) - RecvData = "" #(String RecvData)//可接收记录 - HasRecvCnt = 0 #(DWORD HasRecvCnt)//已接收个数 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA9 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.SendData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) - self.RecvSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RecvData,_pos = CommFunc.ReadString(_lpData, _pos,self.RecvSize) - self.HasRecvCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA9 - self.DataSize = 0 - self.SendData = "" - self.RecvSize = 0 - self.RecvData = "" - self.HasRecvCnt = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += len(self.SendData) - length += 4 - length += len(self.RecvData) - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.DataSize) - data = CommFunc.WriteString(data, self.DataSize, self.SendData) - data = CommFunc.WriteDWORD(data, self.RecvSize) - data = CommFunc.WriteString(data, self.RecvSize, self.RecvData) - data = CommFunc.WriteDWORD(data, self.HasRecvCnt) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - DataSize:%d, - SendData:%s, - RecvSize:%d, - RecvData:%s, - HasRecvCnt:%d - '''\ - %( - self.Head.OutputString(), - self.DataSize, - self.SendData, - self.RecvSize, - self.RecvData, - self.HasRecvCnt - ) - return DumpString - - -m_NAtagGCFriendSendEnergyInfo=tagGCFriendSendEnergyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendSendEnergyInfo.Head.Cmd,m_NAtagGCFriendSendEnergyInfo.Head.SubCmd))] = m_NAtagGCFriendSendEnergyInfo - - -#------------------------------------------------------ -#A9 02 世界boss相关信息 #tagGCGameWorldBossInfo - -class tagBossInfoObj(Structure): - BossID = 0 #(DWORD BossID)// bossID - IsAlive = 0 #(BYTE IsAlive)// 是否存活 - RecordLen = 0 #(WORD RecordLen)// 长度 - KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen - RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 - RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.IsAlive,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen) - self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.BossID = 0 - self.IsAlive = 0 - self.RecordLen = 0 - self.KillRecord = "" - self.RefreshSecond = 0 - self.RefreshCD = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 2 - length += len(self.KillRecord) - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.BossID) - data = CommFunc.WriteBYTE(data, self.IsAlive) - data = CommFunc.WriteWORD(data, self.RecordLen) - data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord) - data = CommFunc.WriteDWORD(data, self.RefreshSecond) - data = CommFunc.WriteDWORD(data, self.RefreshCD) - return data - - def OutputString(self): - DumpString = ''' - BossID:%d, - IsAlive:%d, - RecordLen:%d, - KillRecord:%s, - RefreshSecond:%d, - RefreshCD:%d - '''\ - %( - self.BossID, - self.IsAlive, - self.RecordLen, - self.KillRecord, - self.RefreshSecond, - self.RefreshCD - ) - return DumpString - - -class tagGCGameWorldBossInfo(Structure): - Head = tagHead() - BossCnt = 0 #(BYTE BossCnt)//boss信息个数 - BossInfoList = list() #(vector<tagBossInfoObj> BossInfoList)//boss信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x02 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BossCnt): - temBossInfoList = tagBossInfoObj() - _pos = temBossInfoList.ReadData(_lpData, _pos) - self.BossInfoList.append(temBossInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x02 - self.BossCnt = 0 - self.BossInfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.BossCnt): - length += self.BossInfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.BossCnt) - for i in range(self.BossCnt): - data = CommFunc.WriteString(data, self.BossInfoList[i].GetLength(), self.BossInfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - BossCnt:%d, - BossInfoList:%s - '''\ - %( - self.Head.OutputString(), - self.BossCnt, - "..." - ) - return DumpString - - -m_NAtagGCGameWorldBossInfo=tagGCGameWorldBossInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGameWorldBossInfo.Head.Cmd,m_NAtagGCGameWorldBossInfo.Head.SubCmd))] = m_NAtagGCGameWorldBossInfo - - -#------------------------------------------------------ -# A9 08 渡劫副本护法通知 #tagGCRealmFBHelpInfo - -class tagGCRealmFBHelpInfo(Structure): - Head = tagHead() - PlayerName = "" #(char PlayerName[33])//玩家名字 - PlayerID = 0 #(DWORD PlayerID)//玩家ID - RealmLV = 0 #(BYTE RealmLV)//玩家境界 - Job = 0 #(BYTE Job)//玩家职业 - JobRank = 0 #(BYTE JobRank)//玩家职业阶级 - AtkAdd = 0 #(BYTE AtkAdd)//获得加成 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AtkAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x08 - self.PlayerName = "" - self.PlayerID = 0 - self.RealmLV = 0 - self.Job = 0 - self.JobRank = 0 - self.AtkAdd = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 33 - length += 4 - length += 1 - length += 1 - length += 1 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 33, self.PlayerName) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.RealmLV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobRank) - data = CommFunc.WriteBYTE(data, self.AtkAdd) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerName:%s, - PlayerID:%d, - RealmLV:%d, - Job:%d, - JobRank:%d, - AtkAdd:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerName, - self.PlayerID, - self.RealmLV, - self.Job, - self.JobRank, - self.AtkAdd - ) - return DumpString - - -m_NAtagGCRealmFBHelpInfo=tagGCRealmFBHelpInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRealmFBHelpInfo.Head.Cmd,m_NAtagGCRealmFBHelpInfo.Head.SubCmd))] = m_NAtagGCRealmFBHelpInfo - - -#------------------------------------------------------ -# A9 A7 通知可抢的红包信息 #tagGCGrabRedPacketInfo - -class tagGCGrabRedPacketInfo(Structure): - Head = tagHead() - RedPacketCnt = 0 #(DWORD RedPacketCnt)//可抢红包个数 - StrLen = 0 #(WORD StrLen)//字符串长度 - OwnerName = "" #(String OwnerName)//红包主人名字 - RedPacketID = 0 #(DWORD RedPacketID)//可抢红包ID - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA7 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RedPacketCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen) - self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA7 - self.RedPacketCnt = 0 - self.StrLen = 0 - self.OwnerName = "" - self.RedPacketID = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += len(self.OwnerName) - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.RedPacketCnt) - data = CommFunc.WriteWORD(data, self.StrLen) - data = CommFunc.WriteString(data, self.StrLen, self.OwnerName) - data = CommFunc.WriteDWORD(data, self.RedPacketID) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RedPacketCnt:%d, - StrLen:%d, - OwnerName:%s, - RedPacketID:%d - '''\ - %( - self.Head.OutputString(), - self.RedPacketCnt, - self.StrLen, - self.OwnerName, - self.RedPacketID - ) - return DumpString - - -m_NAtagGCGrabRedPacketInfo=tagGCGrabRedPacketInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketInfo.Head.Cmd,m_NAtagGCGrabRedPacketInfo.Head.SubCmd))] = m_NAtagGCGrabRedPacketInfo - - -#------------------------------------------------------ -# A9 A6 通知抢红包结果 #tagGCGrabRedPacketResult - -class tagGCGrabRedPacketResult(Structure): - Head = tagHead() - StrLen = 0 #(WORD StrLen)//字符串长度 - OwnerName = "" #(String OwnerName)//红包主人名字 - TotalMoney = 0 #(DWORD TotalMoney)//红包总额 - DataSize = 0 #(DWORD DataSize) - GrabInfo = "" #(String GrabInfo)//抢红包具体结果 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA6 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen) - self.TotalMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GrabInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA6 - self.StrLen = 0 - self.OwnerName = "" - self.TotalMoney = 0 - self.DataSize = 0 - self.GrabInfo = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += len(self.OwnerName) - length += 4 - length += 4 - length += len(self.GrabInfo) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.StrLen) - data = CommFunc.WriteString(data, self.StrLen, self.OwnerName) - data = CommFunc.WriteDWORD(data, self.TotalMoney) - data = CommFunc.WriteDWORD(data, self.DataSize) - data = CommFunc.WriteString(data, self.DataSize, self.GrabInfo) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StrLen:%d, - OwnerName:%s, - TotalMoney:%d, - DataSize:%d, - GrabInfo:%s - '''\ - %( - self.Head.OutputString(), - self.StrLen, - self.OwnerName, - self.TotalMoney, - self.DataSize, - self.GrabInfo - ) - return DumpString - - -m_NAtagGCGrabRedPacketResult=tagGCGrabRedPacketResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketResult.Head.Cmd,m_NAtagGCGrabRedPacketResult.Head.SubCmd))] = m_NAtagGCGrabRedPacketResult - - -#------------------------------------------------------ -# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo - -class tagGCNotifyEquipClassEquip(Structure): - _pack_ = 1 - _fields_ = [ - ("ItemID", c_int), - ("Star", 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.Star = 0 - return - - def GetLength(self): - return sizeof(tagGCNotifyEquipClassEquip) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo: - ItemID:%d, - Star:%d - '''\ - %( - self.ItemID, - self.Star - ) - return DumpString - - -class tagGCNotifyEquipDetailInfo(Structure): - Head = tagHead() - ItemGUID = "" #(char ItemGUID[40]) - ItemID = 0 #(DWORD ItemID) - Star = 0 #(BYTE Star)//星级 - PlusLV = 0 #(WORD PlusLV)//强化等级 - EvolveLV = 0 #(BYTE EvolveLV)//进化等级 - WashLV = 0 #(BYTE WashLV)//洗练等级 - WashValueCount = 0 #(BYTE WashValueCount) - WashValueList = list() #(vector<DWORD> WashValueList)//洗练值 - StoneIDCount = 0 #(BYTE StoneIDCount) - StoneIDList = list() #(vector<DWORD> StoneIDList)//宝石 - ClassEquipCount = 0 #(BYTE ClassEquipCount) - ClassEquipList = list() #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.WashValueCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.WashValueList.append(value) - self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.StoneIDCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.StoneIDList.append(value) - self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ClassEquipCount): - temClassEquipList = tagGCNotifyEquipClassEquip() - _pos = temClassEquipList.ReadData(_lpData, _pos) - self.ClassEquipList.append(temClassEquipList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x05 - self.ItemGUID = "" - self.ItemID = 0 - self.Star = 0 - self.PlusLV = 0 - self.EvolveLV = 0 - self.WashLV = 0 - self.WashValueCount = 0 - self.WashValueList = list() - self.StoneIDCount = 0 - self.StoneIDList = list() - self.ClassEquipCount = 0 - self.ClassEquipList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 40 - length += 4 - length += 1 - length += 2 - length += 1 - length += 1 - length += 1 - length += 4 * self.WashValueCount - length += 1 - length += 4 * self.StoneIDCount - length += 1 - for i in range(self.ClassEquipCount): - length += self.ClassEquipList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteBYTE(data, self.Star) - data = CommFunc.WriteWORD(data, self.PlusLV) - data = CommFunc.WriteBYTE(data, self.EvolveLV) - data = CommFunc.WriteBYTE(data, self.WashLV) - data = CommFunc.WriteBYTE(data, self.WashValueCount) - for i in range(self.WashValueCount): - data = CommFunc.WriteDWORD(data, self.WashValueList[i]) - data = CommFunc.WriteBYTE(data, self.StoneIDCount) - for i in range(self.StoneIDCount): - data = CommFunc.WriteDWORD(data, self.StoneIDList[i]) - data = CommFunc.WriteBYTE(data, self.ClassEquipCount) - for i in range(self.ClassEquipCount): - data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ItemGUID:%s, - ItemID:%d, - Star:%d, - PlusLV:%d, - EvolveLV:%d, - WashLV:%d, - WashValueCount:%d, - WashValueList:%s, - StoneIDCount:%d, - StoneIDList:%s, - ClassEquipCount:%d, - ClassEquipList:%s - '''\ - %( - self.Head.OutputString(), - self.ItemGUID, - self.ItemID, - self.Star, - self.PlusLV, - self.EvolveLV, - self.WashLV, - self.WashValueCount, - "...", - self.StoneIDCount, - "...", - self.ClassEquipCount, - "..." - ) - return DumpString - - -m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo - - -#------------------------------------------------------ -#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount - -class tagGCOpenServerCampaignAwardCount(Structure): - Head = tagHead() - CampaignType = 0 #(BYTE CampaignType)//奖励类型 - AwardTypeCount = 0 #(BYTE AwardTypeCount)//奖品种类数量 - GotCountList = list() #(vector<DWORD> GotCountList)//奖品已领取数量列表,根据种类索引依次 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x03 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.CampaignType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AwardTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AwardTypeCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.GotCountList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x03 - self.CampaignType = 0 - self.AwardTypeCount = 0 - self.GotCountList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 * self.AwardTypeCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.CampaignType) - data = CommFunc.WriteBYTE(data, self.AwardTypeCount) - for i in range(self.AwardTypeCount): - data = CommFunc.WriteDWORD(data, self.GotCountList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - CampaignType:%d, - AwardTypeCount:%d, - GotCountList:%s - '''\ - %( - self.Head.OutputString(), - self.CampaignType, - self.AwardTypeCount, - "..." - ) - return DumpString - - -m_NAtagGCOpenServerCampaignAwardCount=tagGCOpenServerCampaignAwardCount() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCOpenServerCampaignAwardCount.Head.Cmd,m_NAtagGCOpenServerCampaignAwardCount.Head.SubCmd))] = m_NAtagGCOpenServerCampaignAwardCount - - -#------------------------------------------------------ -# A9 A2 排行榜信息#tagPYBillboardData - -class tagPYBillboardInfo(Structure): - OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名 - ID = 0 #(DWORD ID) - ID2 = 0 #(DWORD ID2) - Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 - Name2 = "" #(char Name2[65])//名字2 - Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 - Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级 - Value2 = 0 #(DWORD Value2)//排序依赖的值,比如,战斗力 - Value3 = 0 #(DWORD Value3)//附加值 - Value4 = 0 #(DWORD Value4)//附加值 - Value5 = 0 #(DWORD Value5)//附加值 - Value6 = 0 #(DWORD Value6)//附加值 - Value7 = 0 #(DWORD Value7)//附加值 - Value8 = 0 #(DWORD Value8)//附加值 - CmpValue = 0 #(DWORD CmpValue)// 比较权值 - CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 - CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 - DataLen = 0 #(WORD DataLen) - UserData = "" #(String UserData)//附加 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) - self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) - return _pos - - def Clear(self): - self.OrderIndex = 0 - self.ID = 0 - self.ID2 = 0 - self.Name1 = "" - self.Name2 = "" - self.Type2 = 0 - self.Value1 = 0 - self.Value2 = 0 - self.Value3 = 0 - self.Value4 = 0 - self.Value5 = 0 - self.Value6 = 0 - self.Value7 = 0 - self.Value8 = 0 - self.CmpValue = 0 - self.CmpValue2 = 0 - self.CmpValue3 = 0 - self.DataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 33 - length += 65 - length += 1 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.OrderIndex) - data = CommFunc.WriteDWORD(data, self.ID) - data = CommFunc.WriteDWORD(data, self.ID2) - data = CommFunc.WriteString(data, 33, self.Name1) - data = CommFunc.WriteString(data, 65, self.Name2) - data = CommFunc.WriteBYTE(data, self.Type2) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - data = CommFunc.WriteDWORD(data, self.Value3) - data = CommFunc.WriteDWORD(data, self.Value4) - data = CommFunc.WriteDWORD(data, self.Value5) - data = CommFunc.WriteDWORD(data, self.Value6) - data = CommFunc.WriteDWORD(data, self.Value7) - data = CommFunc.WriteDWORD(data, self.Value8) - data = CommFunc.WriteDWORD(data, self.CmpValue) - data = CommFunc.WriteDWORD(data, self.CmpValue2) - data = CommFunc.WriteDWORD(data, self.CmpValue3) - data = CommFunc.WriteWORD(data, self.DataLen) - data = CommFunc.WriteString(data, self.DataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - OrderIndex:%d, - ID:%d, - ID2:%d, - Name1:%s, - Name2:%s, - Type2:%d, - Value1:%d, - Value2:%d, - Value3:%d, - Value4:%d, - Value5:%d, - Value6:%d, - Value7:%d, - Value8:%d, - CmpValue:%d, - CmpValue2:%d, - CmpValue3:%d, - DataLen:%d, - UserData:%s - '''\ - %( - self.OrderIndex, - self.ID, - self.ID2, - self.Name1, - self.Name2, - self.Type2, - self.Value1, - self.Value2, - self.Value3, - self.Value4, - self.Value5, - self.Value6, - self.Value7, - self.Value8, - self.CmpValue, - self.CmpValue2, - self.CmpValue3, - self.DataLen, - self.UserData - ) - return DumpString - - -class tagPYBillboardData(Structure): - Head = tagHead() - WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 - BillboardCount = 0 #(BYTE BillboardCount) - Type = 0 #(BYTE Type)//排行榜类型 - Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA2 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BillboardCount): - temBillboard = tagPYBillboardInfo() - _pos = temBillboard.ReadData(_lpData, _pos) - self.Billboard.append(temBillboard) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA2 - self.WatchID = 0 - self.BillboardCount = 0 - self.Type = 0 - self.Billboard = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 1 - for i in range(self.BillboardCount): - length += self.Billboard[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.WatchID) - data = CommFunc.WriteBYTE(data, self.BillboardCount) - data = CommFunc.WriteBYTE(data, self.Type) - for i in range(self.BillboardCount): - data = CommFunc.WriteString(data, self.Billboard[i].GetLength(), self.Billboard[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - WatchID:%d, - BillboardCount:%d, - Type:%d, - Billboard:%s - '''\ - %( - self.Head.OutputString(), - self.WatchID, - self.BillboardCount, - self.Type, - "..." - ) - return DumpString - - -m_NAtagPYBillboardData=tagPYBillboardData() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPYBillboardData.Head.Cmd,m_NAtagPYBillboardData.Head.SubCmd))] = m_NAtagPYBillboardData - - -#------------------------------------------------------ -# A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent - -class tagGCPYSpeakerContent(Structure): - Head = tagHead() - AccIDLen = 0 #(BYTE AccIDLen) - AccID = "" #(String AccID)//size = AccIDLen - PlayerID = 0 #(DWORD PlayerID)// 子服的玩家ID,该ID有值时为本服玩家 - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)//size = NameLen - SpeakerType = 0 #(BYTE SpeakerType) - TextLen = 0 #(WORD TextLen) - Text = "" #(String Text)//size = TextLen - ExtraValue = 0 #(DWORD ExtraValue)//附加值 - Extras = "" #(char Extras[256])//附加值列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA3 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) - self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA3 - self.AccIDLen = 0 - self.AccID = "" - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.SpeakerType = 0 - self.TextLen = 0 - self.Text = "" - self.ExtraValue = 0 - self.Extras = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.AccID) - length += 4 - length += 1 - length += len(self.Name) - length += 1 - length += 2 - length += len(self.Text) - length += 4 - length += 256 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AccIDLen) - data = CommFunc.WriteString(data, self.AccIDLen, self.AccID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteBYTE(data, self.SpeakerType) - data = CommFunc.WriteWORD(data, self.TextLen) - data = CommFunc.WriteString(data, self.TextLen, self.Text) - data = CommFunc.WriteDWORD(data, self.ExtraValue) - data = CommFunc.WriteString(data, 256, self.Extras) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AccIDLen:%d, - AccID:%s, - PlayerID:%d, - NameLen:%d, - Name:%s, - SpeakerType:%d, - TextLen:%d, - Text:%s, - ExtraValue:%d, - Extras:%s - '''\ - %( - self.Head.OutputString(), - self.AccIDLen, - self.AccID, - self.PlayerID, - self.NameLen, - self.Name, - self.SpeakerType, - self.TextLen, - self.Text, - self.ExtraValue, - self.Extras - ) - return DumpString - - -m_NAtagGCPYSpeakerContent=tagGCPYSpeakerContent() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPYSpeakerContent.Head.Cmd,m_NAtagGCPYSpeakerContent.Head.SubCmd))] = m_NAtagGCPYSpeakerContent - - -#------------------------------------------------------ -#A9 A1 查询玩家补偿结果封包#tagGCQueryCompensationResult - -class tagGCCompensationItem(Structure): - ItemID = 0 #(DWORD ItemID)//物品ID - Count = 0 #(DWORD Count)//数量 - IsBind = 0 #(BYTE IsBind)//是否绑定 - UserDataLen = 0 #(DWORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Count,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemID = 0 - self.Count = 0 - self.IsBind = 0 - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += 4 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteDWORD(data, self.Count) - data = CommFunc.WriteBYTE(data, self.IsBind) - data = CommFunc.WriteDWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemID:%d, - Count:%d, - IsBind:%d, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemID, - self.Count, - self.IsBind, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCCompensationPack(Structure): - GUID = "" #(char GUID[40])//补偿标识 - CreateTime = "" #(char CreateTime[30])//邮件接收时间 - TextLen = 0 #(DWORD TextLen)//文字内容长度 - Text = "" #(String Text)//文字内容 - Count = 0 #(BYTE Count)//当前补偿物品数 - IsRead = 0 #(BYTE IsRead)//已读状态 0 未读取 1已读取 - Gold = 0 #(DWORD Gold)//仙玉 - GoldPaper = 0 #(DWORD GoldPaper)//绑定仙玉 - Silver = 0 #(DWORD Silver)//铜钱 - Items = list() #(vector<tagGCCompensationItem> Items)//补偿物品信息 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30) - self.TextLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IsRead,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos) - for i in range(self.Count): - temItems = tagGCCompensationItem() - _pos = temItems.ReadData(_lpData, _pos) - self.Items.append(temItems) - return _pos - - def Clear(self): - self.GUID = "" - self.CreateTime = "" - self.TextLen = 0 - self.Text = "" - self.Count = 0 - self.IsRead = 0 - self.Gold = 0 - self.GoldPaper = 0 - self.Silver = 0 - self.Items = list() - return - - def GetLength(self): - length = 0 - length += 40 - length += 30 - length += 4 - length += len(self.Text) - length += 1 - length += 1 - length += 4 - length += 4 - length += 4 - for i in range(self.Count): - length += self.Items[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.GUID) - data = CommFunc.WriteString(data, 30, self.CreateTime) - data = CommFunc.WriteDWORD(data, self.TextLen) - data = CommFunc.WriteString(data, self.TextLen, self.Text) - data = CommFunc.WriteBYTE(data, self.Count) - data = CommFunc.WriteBYTE(data, self.IsRead) - data = CommFunc.WriteDWORD(data, self.Gold) - data = CommFunc.WriteDWORD(data, self.GoldPaper) - data = CommFunc.WriteDWORD(data, self.Silver) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - GUID:%s, - CreateTime:%s, - TextLen:%d, - Text:%s, - Count:%d, - IsRead:%d, - Gold:%d, - GoldPaper:%d, - Silver:%d, - Items:%s - '''\ - %( - self.GUID, - self.CreateTime, - self.TextLen, - self.Text, - self.Count, - self.IsRead, - self.Gold, - self.GoldPaper, - self.Silver, - "..." - ) - return DumpString - - -class tagGCQueryCompensationResult(Structure): - Head = tagHead() - Count = 0 #(WORD Count)//可领取补偿数 - PackList = list() #(vector<tagGCCompensationPack> PackList)//补偿物品信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA1 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temPackList = tagGCCompensationPack() - _pos = temPackList.ReadData(_lpData, _pos) - self.PackList.append(temPackList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA1 - self.Count = 0 - self.PackList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.PackList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.PackList[i].GetLength(), self.PackList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - PackList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCQueryCompensationResult=tagGCQueryCompensationResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryCompensationResult.Head.Cmd,m_NAtagGCQueryCompensationResult.Head.SubCmd))] = m_NAtagGCQueryCompensationResult - - -#------------------------------------------------------ -# A9 A8 通知可添加的好友信息 #tagGCRecommendFriendsInfo - -class tagRecommendFriendsData(Structure): - ID = 0 #(DWORD ID) - Name = "" #(char Name[33]) - LV = 0 #(DWORD LV)//等级 - Job = 0 #(BYTE Job) - RealmLV = 0 #(WORD RealmLV)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ID = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 4 - length += 1 - length += 2 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ID) - data = CommFunc.WriteString(data, 33, self.Name) - data = CommFunc.WriteDWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - ID:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.ID, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCRecommendFriendsInfo(Structure): - Head = tagHead() - Cnt = 0 #(BYTE Cnt)//信息数 - FriendsList = list() #(vector<tagRecommendFriendsData> FriendsList)//成员信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA8 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Cnt): - temFriendsList = tagRecommendFriendsData() - _pos = temFriendsList.ReadData(_lpData, _pos) - self.FriendsList.append(temFriendsList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA8 - self.Cnt = 0 - self.FriendsList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Cnt): - length += self.FriendsList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Cnt) - for i in range(self.Cnt): - data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Cnt:%d, - FriendsList:%s - '''\ - %( - self.Head.OutputString(), - self.Cnt, - "..." - ) - return DumpString - - -m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo - - -#------------------------------------------------------ -# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo - -class tagGCSkyTowerPassPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - PlayerName = "" #(char PlayerName[33]) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV)//等级 - RealmLV = 0 #(WORD RealmLV)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.Face = 0 - self.FacePic = 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.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCSkyTowerPassFloor(Structure): - FloorID = 0 #(DWORD FloorID)// 层ID - PassPlayerCount = 0 #(BYTE PassPlayerCount)// 通关记录玩家数 - PassPlayerIDList = list() #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...] - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PassPlayerCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.PassPlayerIDList.append(value) - return _pos - - def Clear(self): - self.FloorID = 0 - self.PassPlayerCount = 0 - self.PassPlayerIDList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 4 * self.PassPlayerCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.FloorID) - data = CommFunc.WriteBYTE(data, self.PassPlayerCount) - for i in range(self.PassPlayerCount): - data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - FloorID:%d, - PassPlayerCount:%d, - PassPlayerIDList:%s - '''\ - %( - self.FloorID, - self.PassPlayerCount, - "..." - ) - return DumpString - - -class tagGCSkyTowerPassPlayerInfo(Structure): - Head = tagHead() - FloorCount = 0 #(WORD FloorCount) - PassFloorList = list() #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表 - PlayerCount = 0 #(WORD PlayerCount) - PassPlayerList = list() #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAD - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.FloorCount): - temPassFloorList = tagGCSkyTowerPassFloor() - _pos = temPassFloorList.ReadData(_lpData, _pos) - self.PassFloorList.append(temPassFloorList) - self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.PlayerCount): - temPassPlayerList = tagGCSkyTowerPassPlayer() - _pos = temPassPlayerList.ReadData(_lpData, _pos) - self.PassPlayerList.append(temPassPlayerList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xAD - self.FloorCount = 0 - self.PassFloorList = list() - self.PlayerCount = 0 - self.PassPlayerList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.FloorCount): - length += self.PassFloorList[i].GetLength() - length += 2 - for i in range(self.PlayerCount): - length += self.PassPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.FloorCount) - for i in range(self.FloorCount): - data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer()) - data = CommFunc.WriteWORD(data, self.PlayerCount) - for i in range(self.PlayerCount): - data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FloorCount:%d, - PassFloorList:%s, - PlayerCount:%d, - PassPlayerList:%s - '''\ - %( - self.Head.OutputString(), - self.FloorCount, - "...", - self.PlayerCount, - "..." - ) - return DumpString - - -m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo - - -#------------------------------------------------------ -# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo - -class tagGCStoreServerBuyCnt(Structure): - _pack_ = 1 - _fields_ = [ - ("GoodsID", c_int), #商品标识 - ("BuyCnt", c_int), #购买次数 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.GoodsID = 0 - self.BuyCnt = 0 - return - - def GetLength(self): - return sizeof(tagGCStoreServerBuyCnt) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo: - GoodsID:%d, - BuyCnt:%d - '''\ - %( - self.GoodsID, - self.BuyCnt - ) - return DumpString - - -class tagGCStoreServerBuyCntInfo(Structure): - Head = tagHead() - Count = 0 #(WORD Count)//数量 - InfoList = list() #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x06 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temInfoList = tagGCStoreServerBuyCnt() - _pos = temInfoList.ReadData(_lpData, _pos) - self.InfoList.append(temInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x06 - self.Count = 0 - self.InfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.InfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - InfoList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo - - -#------------------------------------------------------ -#A9 21 角色改名结果 #tagUpdatePlayerNameResult - -class tagUpdatePlayerNameResult(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Result", c_ubyte), #角色改名结果 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA9 - self.SubCmd = 0x21 - 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 = 0xA9 - self.SubCmd = 0x21 - self.Result = 0 - return - - def GetLength(self): - return sizeof(tagUpdatePlayerNameResult) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult: - Cmd:%s, - SubCmd:%s, - Result:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.Result - ) - return DumpString - - -m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult - - -#------------------------------------------------------ -# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo - -class tagGCXiangongNewPlayer(Structure): - AddTime = 0 #(DWORD AddTime)// 新晋时间戳 - ServerID = 0 #(DWORD ServerID) - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - EquipShowSwitch = 0 #(DWORD EquipShowSwitch) - EquipShowIDCount = 0 #(BYTE EquipShowIDCount) - EquipShowID = list() #(vector<DWORD> EquipShowID) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.EquipShowIDCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.EquipShowID.append(value) - return _pos - - def Clear(self): - self.AddTime = 0 - self.ServerID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.EquipShowSwitch = 0 - self.EquipShowIDCount = 0 - self.EquipShowID = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - length += 4 - length += 4 - length += 4 - length += 1 - length += 4 * self.EquipShowIDCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.AddTime) - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.EquipShowSwitch) - data = CommFunc.WriteBYTE(data, self.EquipShowIDCount) - for i in range(self.EquipShowIDCount): - data = CommFunc.WriteDWORD(data, self.EquipShowID[i]) - return data - - def OutputString(self): - DumpString = ''' - AddTime:%d, - ServerID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - EquipShowSwitch:%d, - EquipShowIDCount:%d, - EquipShowID:%s - '''\ - %( - self.AddTime, - self.ServerID, - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic, - self.EquipShowSwitch, - self.EquipShowIDCount, - "..." - ) - return DumpString - - -class tagGCXiangongNewPlayerInfo(Structure): - Head = tagHead() - XiangongID = 0 #(WORD XiangongID)// 仙宫ID - NewPlayerCount = 0 #(BYTE NewPlayerCount) - NewPlayerList = list() #(vector<tagGCXiangongNewPlayer> NewPlayerList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x27 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.NewPlayerCount): - temNewPlayerList = tagGCXiangongNewPlayer() - _pos = temNewPlayerList.ReadData(_lpData, _pos) - self.NewPlayerList.append(temNewPlayerList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x27 - self.XiangongID = 0 - self.NewPlayerCount = 0 - self.NewPlayerList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += 1 - for i in range(self.NewPlayerCount): - length += self.NewPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.XiangongID) - data = CommFunc.WriteBYTE(data, self.NewPlayerCount) - for i in range(self.NewPlayerCount): - data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - XiangongID:%d, - NewPlayerCount:%d, - NewPlayerList:%s - '''\ - %( - self.Head.OutputString(), - self.XiangongID, - self.NewPlayerCount, - "..." - ) - return DumpString - - -m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo - - -#------------------------------------------------------ -# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo - -class tagGCXiangongRecPlayer(Structure): - AddTime = 0 #(DWORD AddTime)// 新晋时间戳 - ServerID = 0 #(DWORD ServerID) - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.AddTime = 0 - self.ServerID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.AddTime) - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - AddTime:%d, - ServerID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.AddTime, - self.ServerID, - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCXiangongRecPlayerInfo(Structure): - Head = tagHead() - XiangongID = 0 #(WORD XiangongID)// 仙宫ID - RecPlayerCount = 0 #(BYTE RecPlayerCount) - RecPlayerList = list() #(vector<tagGCXiangongRecPlayer> RecPlayerList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x28 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RecPlayerCount): - temRecPlayerList = tagGCXiangongRecPlayer() - _pos = temRecPlayerList.ReadData(_lpData, _pos) - self.RecPlayerList.append(temRecPlayerList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0x28 - self.XiangongID = 0 - self.RecPlayerCount = 0 - self.RecPlayerList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += 1 - for i in range(self.RecPlayerCount): - length += self.RecPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.XiangongID) - data = CommFunc.WriteBYTE(data, self.RecPlayerCount) - for i in range(self.RecPlayerCount): - data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - XiangongID:%d, - RecPlayerCount:%d, - RecPlayerList:%s - '''\ - %( - self.Head.OutputString(), - self.XiangongID, - self.RecPlayerCount, - "..." - ) - return DumpString - - -m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo - - -#------------------------------------------------------ -# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList - -class tagGCFamilyBossHurtInfo(Structure): - NPCID = 0 #(DWORD NPCID) - CurHP = 0 #(DWORD CurHP) - CurHPEx = 0 #(DWORD CurHPEx) - MaxHP = 0 #(DWORD MaxHP) - MaxHPEx = 0 #(DWORD MaxHPEx) - FamilyID = 0 #(DWORD FamilyID)// 最大实时伤血仙盟 - NameLen = 0 #(BYTE NameLen) - FamilyName = "" #(String FamilyName) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - return _pos - - def Clear(self): - self.NPCID = 0 - self.CurHP = 0 - self.CurHPEx = 0 - self.MaxHP = 0 - self.MaxHPEx = 0 - self.FamilyID = 0 - self.NameLen = 0 - self.FamilyName = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.FamilyName) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.NPCID) - data = CommFunc.WriteDWORD(data, self.CurHP) - data = CommFunc.WriteDWORD(data, self.CurHPEx) - data = CommFunc.WriteDWORD(data, self.MaxHP) - data = CommFunc.WriteDWORD(data, self.MaxHPEx) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.FamilyName) - return data - - def OutputString(self): - DumpString = ''' - NPCID:%d, - CurHP:%d, - CurHPEx:%d, - MaxHP:%d, - MaxHPEx:%d, - FamilyID:%d, - NameLen:%d, - FamilyName:%s - '''\ - %( - self.NPCID, - self.CurHP, - self.CurHPEx, - self.MaxHP, - self.MaxHPEx, - self.FamilyID, - self.NameLen, - self.FamilyName - ) - return DumpString - - -class tagGCAllFamilyBossHurtInfoList(Structure): - Head = tagHead() - NPCCount = 0 #(BYTE NPCCount)// 个数 - NPCHurtInfo = list() #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x10 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.NPCCount): - temNPCHurtInfo = tagGCFamilyBossHurtInfo() - _pos = temNPCHurtInfo.ReadData(_lpData, _pos) - self.NPCHurtInfo.append(temNPCHurtInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x10 - self.NPCCount = 0 - self.NPCHurtInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.NPCCount): - length += self.NPCHurtInfo[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.NPCCount) - for i in range(self.NPCCount): - data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - NPCCount:%d, - NPCHurtInfo:%s - '''\ - %( - self.Head.OutputString(), - self.NPCCount, - "..." - ) - return DumpString - - -m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList - - -#------------------------------------------------------ -# AC 08 boss复活点数通知 #tagGCBossRebornPoint - -class tagGCBossRebornPoint(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Point", c_int), # 复活点数 - ("TotalPoint", c_int), # 复活总点数 - ("RebornCnt", c_ushort), # 今日已复活次数 - ("TotalRebornCnt", c_ushort), # 每日可复活总次数,0为不限制 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAC - self.SubCmd = 0x08 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xAC - self.SubCmd = 0x08 - self.Point = 0 - self.TotalPoint = 0 - self.RebornCnt = 0 - self.TotalRebornCnt = 0 - return - - def GetLength(self): - return sizeof(tagGCBossRebornPoint) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint: - Cmd:%s, - SubCmd:%s, - Point:%d, - TotalPoint:%d, - RebornCnt:%d, - TotalRebornCnt:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.Point, - self.TotalPoint, - self.RebornCnt, - self.TotalRebornCnt - ) - return DumpString - - -m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint - - -#------------------------------------------------------ -# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo - -class tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo: - ItemID:%d, - ItemCount:%d, - IsBind:%d - '''\ - %( - self.ItemID, - self.ItemCount, - self.IsBind - ) - return DumpString - - -class tagGCCrossActAllRechargeAward(Structure): - AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 - NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB - NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数 - NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数 - AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 - AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AwardItemCount): - temAwardItemList = tagGCCrossActAllRechargeItem() - _pos = temAwardItemList.ReadData(_lpData, _pos) - self.AwardItemList.append(temAwardItemList) - return _pos - - def Clear(self): - self.AwardIndex = 0 - self.NeedRMB = 0 - self.NeedPlayerCount = 0 - self.NowPlayerCount = 0 - self.AwardItemCount = 0 - self.AwardItemList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 2 - length += 2 - length += 1 - for i in range(self.AwardItemCount): - length += self.AwardItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.AwardIndex) - data = CommFunc.WriteDWORD(data, self.NeedRMB) - data = CommFunc.WriteWORD(data, self.NeedPlayerCount) - data = CommFunc.WriteWORD(data, self.NowPlayerCount) - data = CommFunc.WriteBYTE(data, self.AwardItemCount) - for i in range(self.AwardItemCount): - data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - AwardIndex:%d, - NeedRMB:%d, - NeedPlayerCount:%d, - NowPlayerCount:%d, - AwardItemCount:%d, - AwardItemList:%s - '''\ - %( - self.AwardIndex, - self.NeedRMB, - self.NeedPlayerCount, - self.NowPlayerCount, - self.AwardItemCount, - "..." - ) - return DumpString - - -class tagGCCrossActAllRechargeInfo(Structure): - Head = tagHead() - ServerInfoLen = 0 #(BYTE ServerInfoLen) - ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - AwardCount = 0 #(BYTE AwardCount) - AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x13 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AwardCount): - temAwardList = tagGCCrossActAllRechargeAward() - _pos = temAwardList.ReadData(_lpData, _pos) - self.AwardList.append(temAwardList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x13 - self.ServerInfoLen = 0 - self.ServerIDRangeInfo = "" - self.StartDate = "" - self.EndtDate = "" - self.AwardCount = 0 - self.AwardList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.ServerIDRangeInfo) - length += 10 - length += 10 - length += 1 - for i in range(self.AwardCount): - length += self.AwardList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ServerInfoLen) - data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteBYTE(data, self.AwardCount) - for i in range(self.AwardCount): - data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ServerInfoLen:%d, - ServerIDRangeInfo:%s, - StartDate:%s, - EndtDate:%s, - AwardCount:%d, - AwardList:%s - '''\ - %( - self.Head.OutputString(), - self.ServerInfoLen, - self.ServerIDRangeInfo, - self.StartDate, - self.EndtDate, - self.AwardCount, - "..." - ) - return DumpString - - -m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo - - -#------------------------------------------------------ -# AC 12 跨服运营活动结束 # tagGCCrossActEnd - -class tagGCCrossActEnd(Structure): - Head = tagHead() - ActNameLen = 0 #(BYTE ActNameLen) - ActName = "" #(String ActName) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x12 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x12 - self.ActNameLen = 0 - self.ActName = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.ActName) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ActNameLen) - data = CommFunc.WriteString(data, self.ActNameLen, self.ActName) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActNameLen:%d, - ActName:%s - '''\ - %( - self.Head.OutputString(), - self.ActNameLen, - self.ActName - ) - return DumpString - - -m_NAtagGCCrossActEnd=tagGCCrossActEnd() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd - - -#------------------------------------------------------ -# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo - -class tagGCFairyCeremonyInfo(Structure): - Head = tagHead() - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - WorldLV = 0 #(WORD WorldLV)// 世界等级 - LimitLV = 0 #(WORD LimitLV)// 限制等级 - ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x09 - self.StartDate = "" - self.EndtDate = "" - self.WorldLV = 0 - self.LimitLV = 0 - self.ResetType = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 10 - length += 10 - length += 2 - length += 2 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteWORD(data, self.WorldLV) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteBYTE(data, self.ResetType) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StartDate:%s, - EndtDate:%s, - WorldLV:%d, - LimitLV:%d, - ResetType:%d - '''\ - %( - self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.WorldLV, - self.LimitLV, - self.ResetType - ) - return DumpString - - -m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo - - -#------------------------------------------------------ -# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo - -class tagGCFamilyWarInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("WorldLV", c_ushort), # 当前进行中的联赛世界等级 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAC - self.SubCmd = 0x01 - 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 = 0xAC - self.SubCmd = 0x01 - self.WorldLV = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyWarInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo: - Cmd:%s, - SubCmd:%s, - WorldLV:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.WorldLV - ) - return DumpString - - -m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo - - -#------------------------------------------------------ -# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo - -class tagGCFeastRedPacketDay(Structure): - RedPacketCount = 0 #(BYTE RedPacketCount) - RedPacketIDList = list() #(vector<WORD> RedPacketIDList)// 当日定时发放的系统红包表ID列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.RedPacketCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RedPacketCount): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) - self.RedPacketIDList.append(value) - return _pos - - def Clear(self): - self.RedPacketCount = 0 - self.RedPacketIDList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 2 * self.RedPacketCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.RedPacketCount) - for i in range(self.RedPacketCount): - data = CommFunc.WriteWORD(data, self.RedPacketIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - RedPacketCount:%d, - RedPacketIDList:%s - '''\ - %( - self.RedPacketCount, - "..." - ) - return DumpString - - -class tagGCFeastRedPacketInfo(Structure): - Head = tagHead() - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - LimitLV = 0 #(WORD LimitLV)// 限制等级 - ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 - RedPacketDays = 0 #(BYTE RedPacketDays) - RedPacketDayList = list() #(vector<tagGCFeastRedPacketDay> RedPacketDayList)// 每日系统红包信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x11 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RedPacketDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RedPacketDays): - temRedPacketDayList = tagGCFeastRedPacketDay() - _pos = temRedPacketDayList.ReadData(_lpData, _pos) - self.RedPacketDayList.append(temRedPacketDayList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x11 - self.StartDate = "" - self.EndtDate = "" - self.LimitLV = 0 - self.ResetType = 0 - self.RedPacketDays = 0 - self.RedPacketDayList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 10 - length += 10 - length += 2 - length += 1 - length += 1 - for i in range(self.RedPacketDays): - length += self.RedPacketDayList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteBYTE(data, self.ResetType) - data = CommFunc.WriteBYTE(data, self.RedPacketDays) - for i in range(self.RedPacketDays): - data = CommFunc.WriteString(data, self.RedPacketDayList[i].GetLength(), self.RedPacketDayList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StartDate:%s, - EndtDate:%s, - LimitLV:%d, - ResetType:%d, - RedPacketDays:%d, - RedPacketDayList:%s - '''\ - %( - self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.LimitLV, - self.ResetType, - self.RedPacketDays, - "..." - ) - return DumpString - - -m_NAtagGCFeastRedPacketInfo=tagGCFeastRedPacketInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFeastRedPacketInfo.Head.Cmd,m_NAtagGCFeastRedPacketInfo.Head.SubCmd))] = m_NAtagGCFeastRedPacketInfo - - -#------------------------------------------------------ -# AC 02 通知仙魔之争信息 #tagGCXMZZInfo - -class tagGCXMZZInfo(Structure): - Head = tagHead() - Len = 0 #(WORD Len) - StageRecord = "" #(String StageRecord)// 阶段胜负记录 - Score1 = 0 #(DWORD Score1)// 仙界阵营积分 - Score2 = 0 #(DWORD Score2)// 魔界阵营积分 - TopScore = 0 #(DWORD TopScore)// 积分第1名积分 - TopName = "" #(char TopName[33])// 积分第1名名字 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x02 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.StageRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) - self.Score1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TopScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TopName,_pos = CommFunc.ReadString(_lpData, _pos,33) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x02 - self.Len = 0 - self.StageRecord = "" - self.Score1 = 0 - self.Score2 = 0 - self.TopScore = 0 - self.TopName = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += len(self.StageRecord) - length += 4 - length += 4 - length += 4 - length += 33 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Len) - data = CommFunc.WriteString(data, self.Len, self.StageRecord) - data = CommFunc.WriteDWORD(data, self.Score1) - data = CommFunc.WriteDWORD(data, self.Score2) - data = CommFunc.WriteDWORD(data, self.TopScore) - data = CommFunc.WriteString(data, 33, self.TopName) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Len:%d, - StageRecord:%s, - Score1:%d, - Score2:%d, - TopScore:%d, - TopName:%s - '''\ - %( - self.Head.OutputString(), - self.Len, - self.StageRecord, - self.Score1, - self.Score2, - self.TopScore, - self.TopName - ) - return DumpString - - -m_NAtagGCXMZZInfo=tagGCXMZZInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZInfo.Head.Cmd,m_NAtagGCXMZZInfo.Head.SubCmd))] = m_NAtagGCXMZZInfo - - -#------------------------------------------------------ -# AC 03 通知仙魔之争自己信息 #tagGCXMZZSelfInfo - -class tagGCXMZZSelfInfo(Structure): - Head = tagHead() - Faction = 0 #(BYTE Faction)// 所属阵营 - Score = 0 #(DWORD Score)// 积分 - WinCnt = 0 #(BYTE WinCnt)// 胜场数 - WinCntAwardRecord = 0 #(DWORD WinCntAwardRecord)// 胜场奖励领取记录 - Len = 0 #(WORD Len)// 押注记录 - BetRecord = "" #(String BetRecord)// 押注记录 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x03 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WinCntAwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.BetRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x03 - self.Faction = 0 - self.Score = 0 - self.WinCnt = 0 - self.WinCntAwardRecord = 0 - self.Len = 0 - self.BetRecord = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 - length += 1 - length += 4 - length += 2 - length += len(self.BetRecord) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Faction) - data = CommFunc.WriteDWORD(data, self.Score) - data = CommFunc.WriteBYTE(data, self.WinCnt) - data = CommFunc.WriteDWORD(data, self.WinCntAwardRecord) - data = CommFunc.WriteWORD(data, self.Len) - data = CommFunc.WriteString(data, self.Len, self.BetRecord) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Faction:%d, - Score:%d, - WinCnt:%d, - WinCntAwardRecord:%d, - Len:%d, - BetRecord:%s - '''\ - %( - self.Head.OutputString(), - self.Faction, - self.Score, - self.WinCnt, - self.WinCntAwardRecord, - self.Len, - self.BetRecord - ) - return DumpString - - -m_NAtagGCXMZZSelfInfo=tagGCXMZZSelfInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZSelfInfo.Head.Cmd,m_NAtagGCXMZZSelfInfo.Head.SubCmd))] = m_NAtagGCXMZZSelfInfo - - -#------------------------------------------------------ -# AC 07 骑宠Boss信息 #tagGCHorsePetBossInfo - -class tagGCHorsePetBossInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsEnd", c_int), # 是否已结束(按位代表对应线路是否结束) - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAC - 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 = 0xAC - self.SubCmd = 0x07 - self.IsEnd = 0 - return - - def GetLength(self): - return sizeof(tagGCHorsePetBossInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 07 骑宠Boss信息 //tagGCHorsePetBossInfo: - Cmd:%s, - SubCmd:%s, - IsEnd:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.IsEnd - ) - return DumpString - - -m_NAtagGCHorsePetBossInfo=tagGCHorsePetBossInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHorsePetBossInfo.Cmd,m_NAtagGCHorsePetBossInfo.SubCmd))] = m_NAtagGCHorsePetBossInfo - - -#------------------------------------------------------ -# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo - -class tagGCMultiExpRateTime(Structure): - StartTime = "" #(char StartTime[5])// 开始时间 H:M - EndtTime = "" #(char EndtTime[5])// 结束时间 H:M - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) - self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) - return _pos - - def Clear(self): - self.StartTime = "" - self.EndtTime = "" - return - - def GetLength(self): - length = 0 - length += 5 - length += 5 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 5, self.StartTime) - data = CommFunc.WriteString(data, 5, self.EndtTime) - return data - - def OutputString(self): - DumpString = ''' - StartTime:%s, - EndtTime:%s - '''\ - %( - self.StartTime, - self.EndtTime - ) - return DumpString - - -class tagGCMultiExpRateInfo(Structure): - Head = tagHead() - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - ActivityTimeCount = 0 #(BYTE ActivityTimeCount) - ActivityTime = list() #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间 - LimitLV = 0 #(WORD LimitLV)// 限制等级 - AddExpRate = 0 #(DWORD AddExpRate)// 增加的经验倍率,万分率 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x06 - 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.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ActivityTimeCount): - temActivityTime = tagGCMultiExpRateTime() - _pos = temActivityTime.ReadData(_lpData, _pos) - self.ActivityTime.append(temActivityTime) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x06 - self.StartDate = "" - self.EndtDate = "" - self.ActivityTimeCount = 0 - self.ActivityTime = list() - self.LimitLV = 0 - self.AddExpRate = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 10 - length += 10 - length += 1 - for i in range(self.ActivityTimeCount): - length += self.ActivityTime[i].GetLength() - length += 2 - length += 4 - - 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.ActivityTimeCount) - for i in range(self.ActivityTimeCount): - data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteDWORD(data, self.AddExpRate) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StartDate:%s, - EndtDate:%s, - ActivityTimeCount:%d, - ActivityTime:%s, - LimitLV:%d, - AddExpRate:%d - '''\ - %( - self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.ActivityTimeCount, - "...", - self.LimitLV, - self.AddExpRate - ) - return DumpString - - -m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo - - -#------------------------------------------------------ -# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo - -class tagGCMultiRealmPointInfo(Structure): - Head = tagHead() - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - Multiple = 0 #(BYTE Multiple)// 倍数 - LimitLV = 0 #(WORD LimitLV)// 限制等级 - LimitPoint = 0 #(DWORD LimitPoint)// 限制获得修行点 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x0A - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x0A - self.StartDate = "" - self.EndtDate = "" - self.Multiple = 0 - self.LimitLV = 0 - self.LimitPoint = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 10 - length += 10 - length += 1 - length += 2 - length += 4 - - 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.Multiple) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteDWORD(data, self.LimitPoint) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StartDate:%s, - EndtDate:%s, - Multiple:%d, - LimitLV:%d, - LimitPoint:%d - '''\ - %( - self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.Multiple, - self.LimitLV, - self.LimitPoint - ) - return DumpString - - -m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo - - -#------------------------------------------------------ -# AC 0B 新仙界盛典活动信息 #tagGCNewFairyCeremonyInfo - -class tagGCNewFairyCeremonyInfo(Structure): - Head = tagHead() - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - WorldLV = 0 #(WORD WorldLV)// 世界等级 - LimitLV = 0 #(WORD LimitLV)// 限制等级 - ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x0B - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x0B - self.StartDate = "" - self.EndtDate = "" - self.WorldLV = 0 - self.LimitLV = 0 - self.ResetType = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 10 - length += 10 - length += 2 - length += 2 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteWORD(data, self.WorldLV) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteBYTE(data, self.ResetType) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - StartDate:%s, - EndtDate:%s, - WorldLV:%d, - LimitLV:%d, - ResetType:%d - '''\ - %( - self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.WorldLV, - self.LimitLV, - self.ResetType - ) - return DumpString - - -m_NAtagGCNewFairyCeremonyInfo=tagGCNewFairyCeremonyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNewFairyCeremonyInfo.Head.Cmd,m_NAtagGCNewFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCNewFairyCeremonyInfo - - -#------------------------------------------------------ -# AC 05 红包删除 #tagGCRedPacketDel - -class tagGCRedPacketDel(Structure): - Head = tagHead() - Cnt = 0 #(DWORD Cnt)// 个数 - DelRedPacketID = list() #(vector<DWORD> DelRedPacketID)// 红包ID - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - for i in range(self.Cnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.DelRedPacketID.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x05 - self.Cnt = 0 - self.DelRedPacketID = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 * self.Cnt - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.Cnt) - for i in range(self.Cnt): - data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Cnt:%d, - DelRedPacketID:%s - '''\ - %( - self.Head.OutputString(), - self.Cnt, - "..." - ) - return DumpString - - -m_NAtagGCRedPacketDel=tagGCRedPacketDel() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel - - -#------------------------------------------------------ -# AC 04 通知仙魔之争对战信息 #tagGCXMZZFightInfo - -class tagGCXMZZFightInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)//玩家ID - PropDataSize = 0 #(DWORD PropDataSize) - PropData = "" #(String PropData)//属性记录 - ItemDataSize = 0 #(DWORD ItemDataSize) - ItemData = "" #(String ItemData)//物品记录 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize) - self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x04 - self.PlayerID = 0 - self.PropDataSize = 0 - self.PropData = "" - self.ItemDataSize = 0 - self.ItemData = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 - length += len(self.PropData) - length += 4 - length += len(self.ItemData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteDWORD(data, self.PropDataSize) - data = CommFunc.WriteString(data, self.PropDataSize, self.PropData) - data = CommFunc.WriteDWORD(data, self.ItemDataSize) - data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - PropDataSize:%d, - PropData:%s, - ItemDataSize:%d, - ItemData:%s - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.PropDataSize, - self.PropData, - self.ItemDataSize, - self.ItemData - ) - return DumpString - - -m_NAtagGCXMZZFightInfo=tagGCXMZZFightInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZFightInfo.Head.Cmd,m_NAtagGCXMZZFightInfo.Head.SubCmd))] = m_NAtagGCXMZZFightInfo - - -#------------------------------------------------------ -# 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)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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) - return _pos - - def Clear(self): - self.AssistGUID = "" - self.PlayerID = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 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 += 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.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - 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, - Face:%d, - FacePic:%d, - MapID:%d, - LineID:%d, - NPCID:%d, - ExDataLen:%d, - ExData:%s - '''\ - %( - self.AssistGUID, - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.Face, - self.FacePic, - 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): - ID = 0 #(DWORD ID)//悬赏任务ID - NameLen = 0 #(WORD NameLen)//名字长度 - Name = "" #(String Name)//size = NameLen - OverState = 0 #(DWORD OverState)//任务完成情况 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ID = 0 - self.NameLen = 0 - self.Name = "" - self.OverState = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 2 - length += len(self.Name) - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ID) - data = CommFunc.WriteWORD(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteDWORD(data, self.OverState) - return data - - def OutputString(self): - DumpString = ''' - ID:%d, - NameLen:%d, - Name:%s, - OverState:%d - '''\ - %( - self.ID, - self.NameLen, - self.Name, - self.OverState - ) - return DumpString - - -class tagFamilyArrestOverStateInfo(Structure): - Head = tagHead() - Count = 0 #(WORD Count) - ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB0 - 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.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temArrestOverStateInfo = tagFamilyArrestOverState() - _pos = temArrestOverStateInfo.ReadData(_lpData, _pos) - self.ArrestOverStateInfo.append(temArrestOverStateInfo) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x26 - self.Count = 0 - self.ArrestOverStateInfo = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.ArrestOverStateInfo[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - ArrestOverStateInfo:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -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)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.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.Face = 0 - self.FacePic = 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 += 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.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - 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, - Face:%d, - FacePic:%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.Face, - self.FacePic, - 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 34 福地结算奖励信息 #tagGCMineAreaAwardInfo - -class tagGCMineAreaAwardInfo(Structure): - Head = tagHead() - AwardType = 0 #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知 - AwardLen = 0 #(BYTE AwardLen) - AwardInfo = "" #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...] - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x34 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x34 - self.AwardType = 0 - self.AwardLen = 0 - self.AwardInfo = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += len(self.AwardInfo) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AwardType) - data = CommFunc.WriteBYTE(data, self.AwardLen) - data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AwardType:%d, - AwardLen:%d, - AwardInfo:%s - '''\ - %( - self.Head.OutputString(), - self.AwardType, - self.AwardLen, - self.AwardInfo - ) - return DumpString - - -m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo - - -#------------------------------------------------------ -# B0 33 福地详细信息 #tagGCMineAreaInfo - -class tagGCMineItem(Structure): - Index = 0 #(BYTE Index)// 矿物所在福地位置索引,0~n - MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物 - MineType = 0 #(BYTE MineType)// 矿物类型:0-常规;1-超级 - UpdTime = 0 #(DWORD UpdTime)// 最后一次更新时间戳 - PosLen = 0 #(BYTE PosLen) - Position = "" #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒 - SpeedLen = 0 #(BYTE SpeedLen) - MoveSpeed = "" #(String MoveSpeed)// 移动速度,x格/秒,支持小数 - EndTime = 0 #(DWORD EndTime)// 拉取结束时间戳 - WorkerCount = 0 #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回 - RobPlayerID = 0 #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺 - RobWorkerCount = 0 #(BYTE RobWorkerCount)// 抢夺工人个数 - RobPlayerName = "" #(char RobPlayerName[33]) - RobJob = 0 #(BYTE RobJob) - RobFace = 0 #(DWORD RobFace) - RobFacePic = 0 #(DWORD RobFacePic) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen) - self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen) - self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Index = 0 - self.MineID = 0 - self.MineType = 0 - self.UpdTime = 0 - self.PosLen = 0 - self.Position = "" - self.SpeedLen = 0 - self.MoveSpeed = "" - self.EndTime = 0 - self.WorkerCount = 0 - self.RobPlayerID = 0 - self.RobWorkerCount = 0 - self.RobPlayerName = "" - self.RobJob = 0 - self.RobFace = 0 - self.RobFacePic = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += 2 - length += 1 - length += 4 - length += 1 - length += len(self.Position) - length += 1 - length += len(self.MoveSpeed) - length += 4 - length += 1 - length += 4 - length += 1 - length += 33 - length += 1 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.Index) - data = CommFunc.WriteWORD(data, self.MineID) - data = CommFunc.WriteBYTE(data, self.MineType) - data = CommFunc.WriteDWORD(data, self.UpdTime) - data = CommFunc.WriteBYTE(data, self.PosLen) - data = CommFunc.WriteString(data, self.PosLen, self.Position) - data = CommFunc.WriteBYTE(data, self.SpeedLen) - data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed) - data = CommFunc.WriteDWORD(data, self.EndTime) - data = CommFunc.WriteBYTE(data, self.WorkerCount) - data = CommFunc.WriteDWORD(data, self.RobPlayerID) - data = CommFunc.WriteBYTE(data, self.RobWorkerCount) - data = CommFunc.WriteString(data, 33, self.RobPlayerName) - data = CommFunc.WriteBYTE(data, self.RobJob) - data = CommFunc.WriteDWORD(data, self.RobFace) - data = CommFunc.WriteDWORD(data, self.RobFacePic) - return data - - def OutputString(self): - DumpString = ''' - Index:%d, - MineID:%d, - MineType:%d, - UpdTime:%d, - PosLen:%d, - Position:%s, - SpeedLen:%d, - MoveSpeed:%s, - EndTime:%d, - WorkerCount:%d, - RobPlayerID:%d, - RobWorkerCount:%d, - RobPlayerName:%s, - RobJob:%d, - RobFace:%d, - RobFacePic:%d - '''\ - %( - self.Index, - self.MineID, - self.MineType, - self.UpdTime, - self.PosLen, - self.Position, - self.SpeedLen, - self.MoveSpeed, - self.EndTime, - self.WorkerCount, - self.RobPlayerID, - self.RobWorkerCount, - self.RobPlayerName, - self.RobJob, - self.RobFace, - self.RobFacePic - ) - return DumpString - - -class tagGCMineArea(Structure): - PlayerID = 0 #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人 - PlayerName = "" #(char PlayerName[33])// 可能为空,如自己或假人 - Job = 0 #(BYTE Job) - Face = 0 #(DWORD Face) - FacePic = 0 #(DWORD FacePic) - RobValue = 0 #(DWORD RobValue)// 抢劫敌对值 - MineCount = 0 #(BYTE MineCount) - MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 - 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MineCount): - temMineItemList = tagGCMineItem() - _pos = temMineItemList.ReadData(_lpData, _pos) - self.MineItemList.append(temMineItemList) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.PlayerName = "" - self.Job = 0 - self.Face = 0 - self.FacePic = 0 - self.RobValue = 0 - self.MineCount = 0 - self.MineItemList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 4 - length += 4 - length += 4 - length += 1 - for i in range(self.MineCount): - length += self.MineItemList[i].GetLength() - - 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.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.RobValue) - data = CommFunc.WriteBYTE(data, self.MineCount) - for i in range(self.MineCount): - data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - Face:%d, - FacePic:%d, - RobValue:%d, - MineCount:%d, - MineItemList:%s - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.Face, - self.FacePic, - self.RobValue, - self.MineCount, - "..." - ) - return DumpString - - -class tagGCMineAreaInfo(Structure): - Head = tagHead() - QueryType = 0 #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表 - QueryValue = 0 #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 - AreaCount = 0 #(BYTE AreaCount) - AreaList = list() #(vector<tagGCMineArea> AreaList)// 福地列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x33 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AreaCount): - temAreaList = tagGCMineArea() - _pos = temAreaList.ReadData(_lpData, _pos) - self.AreaList.append(temAreaList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x33 - self.QueryType = 0 - self.QueryValue = 0 - self.AreaCount = 0 - self.AreaList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 - length += 1 - for i in range(self.AreaCount): - length += self.AreaList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.QueryType) - data = CommFunc.WriteDWORD(data, self.QueryValue) - data = CommFunc.WriteBYTE(data, self.AreaCount) - for i in range(self.AreaCount): - data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - QueryType:%d, - QueryValue:%d, - AreaCount:%d, - AreaList:%s - '''\ - %( - self.Head.OutputString(), - self.QueryType, - self.QueryValue, - self.AreaCount, - "..." - ) - return DumpString - - -m_NAtagGCMineAreaInfo=tagGCMineAreaInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo - - -#------------------------------------------------------ -# B0 35 福地记录信息 #tagGCMineAreaRecordInfo - -class tagGCMineAreaRecord(Structure): - RecordType = 0 #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢 - TagPlayerID = 0 #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的 - RecordTime = 0 #(DWORD RecordTime)// 记录时间戳 - MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID - TagPlayerName = "" #(char TagPlayerName[33]) - TagJob = 0 #(BYTE TagJob) - TagFace = 0 #(DWORD TagFace) - TagFacePic = 0 #(DWORD TagFacePic) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.RecordType = 0 - self.TagPlayerID = 0 - self.RecordTime = 0 - self.MineID = 0 - self.TagPlayerName = "" - self.TagJob = 0 - self.TagFace = 0 - self.TagFacePic = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 4 - length += 2 - length += 33 - length += 1 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.RecordType) - data = CommFunc.WriteDWORD(data, self.TagPlayerID) - data = CommFunc.WriteDWORD(data, self.RecordTime) - data = CommFunc.WriteWORD(data, self.MineID) - data = CommFunc.WriteString(data, 33, self.TagPlayerName) - data = CommFunc.WriteBYTE(data, self.TagJob) - data = CommFunc.WriteDWORD(data, self.TagFace) - data = CommFunc.WriteDWORD(data, self.TagFacePic) - return data - - def OutputString(self): - DumpString = ''' - RecordType:%d, - TagPlayerID:%d, - RecordTime:%d, - MineID:%d, - TagPlayerName:%s, - TagJob:%d, - TagFace:%d, - TagFacePic:%d - '''\ - %( - self.RecordType, - self.TagPlayerID, - self.RecordTime, - self.MineID, - self.TagPlayerName, - self.TagJob, - self.TagFace, - self.TagFacePic - ) - return DumpString - - -class tagGCMineAreaRecordInfo(Structure): - Head = tagHead() - RecordCount = 0 #(BYTE RecordCount) - AreaRecordList = list() #(vector<tagGCMineAreaRecord> AreaRecordList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x35 - 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): - temAreaRecordList = tagGCMineAreaRecord() - _pos = temAreaRecordList.ReadData(_lpData, _pos) - self.AreaRecordList.append(temAreaRecordList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x35 - self.RecordCount = 0 - self.AreaRecordList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.RecordCount): - length += self.AreaRecordList[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.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RecordCount:%d, - AreaRecordList:%s - '''\ - %( - self.Head.OutputString(), - self.RecordCount, - "..." - ) - return DumpString - - -m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo - - -#------------------------------------------------------ -# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet - -class tagGCMineItemPullPreviewRet(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 - ("ItemIndex", c_ubyte), # 物品所在位置索引0~n - ("WorkerCount", c_ubyte), # 上工人人数 - ("NeedSeconds", c_int), # 预计需要时间,秒 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB0 - self.SubCmd = 0x32 - 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 = 0x32 - self.PlayerID = 0 - self.ItemIndex = 0 - self.WorkerCount = 0 - self.NeedSeconds = 0 - return - - def GetLength(self): - return sizeof(tagGCMineItemPullPreviewRet) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - ItemIndex:%d, - WorkerCount:%d, - NeedSeconds:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.ItemIndex, - self.WorkerCount, - self.NeedSeconds - ) - return DumpString - - -m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet - - -#------------------------------------------------------ -# 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)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 2 - length += 1 - 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.WriteBYTE(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.Face, - self.FacePic - ) - 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 - - -#------------------------------------------------------ -# B0 20 膜拜信息列表 #tagGCWorshipInfoList - -class tagGCWorshipInfo(Structure): - PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID - WorshipType = 0 #(BYTE WorshipType)// 膜拜类型 - WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 - InfoLen = 0 #(WORD InfoLen) - PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...} - 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.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.WorshipType = 0 - self.WorshipValue = 0 - self.InfoLen = 0 - self.PlayerInfo = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 4 - length += 2 - length += len(self.PlayerInfo) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.WorshipType) - data = CommFunc.WriteDWORD(data, self.WorshipValue) - data = CommFunc.WriteWORD(data, self.InfoLen) - data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - WorshipType:%d, - WorshipValue:%d, - InfoLen:%d, - PlayerInfo:%s - '''\ - %( - self.PlayerID, - self.WorshipType, - self.WorshipValue, - self.InfoLen, - self.PlayerInfo - ) - return DumpString - - -class tagGCWorshipInfoList(Structure): - Head = tagHead() - WorshipCount = 0 #(BYTE WorshipCount) - WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x20 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.WorshipCount): - temWorshipInfoList = tagGCWorshipInfo() - _pos = temWorshipInfoList.ReadData(_lpData, _pos) - self.WorshipInfoList.append(temWorshipInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB0 - self.Head.SubCmd = 0x20 - self.WorshipCount = 0 - self.WorshipInfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.WorshipCount): - length += self.WorshipInfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.WorshipCount) - for i in range(self.WorshipCount): - data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - WorshipCount:%d, - WorshipInfoList:%s - '''\ - %( - self.Head.OutputString(), - self.WorshipCount, - "..." - ) - return DumpString - - -m_NAtagGCWorshipInfoList=tagGCWorshipInfoList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList - - -#------------------------------------------------------ -# B0 21 膜拜结果 #tagGCWorshipResult - -class tagGCWorshipResult(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), # 目标玩家ID - ("WorshipType", c_ubyte), # 膜拜类型 - ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 - ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标; - ("MoneyType", c_ubyte), # 货币类型 - ("MoneyValue", c_int), # 货币奖励 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB0 - self.SubCmd = 0x21 - 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 = 0x21 - self.PlayerID = 0 - self.WorshipType = 0 - self.WorshipValue = 0 - self.Result = 0 - self.MoneyType = 0 - self.MoneyValue = 0 - return - - def GetLength(self): - return sizeof(tagGCWorshipResult) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - WorshipType:%d, - WorshipValue:%d, - Result:%d, - MoneyType:%d, - MoneyValue:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.WorshipType, - self.WorshipValue, - self.Result, - self.MoneyType, - self.MoneyValue - ) - return DumpString - - -m_NAtagGCWorshipResult=tagGCWorshipResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult - - -#------------------------------------------------------ -#B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin - -class tagGCFriendAskIfJoin(Structure): - Head = tagHead() - AskID = 0 #(DWORD AskID)//请求好友的人 - Name = "" #(char Name[33]) - LV = 0 #(WORD LV) - RealmLV = 0 #(WORD RealmLV)//境界等级 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x03 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AskID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x03 - self.AskID = 0 - self.Name = "" - self.LV = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 33 - length += 2 - length += 2 - 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.AskID) - data = CommFunc.WriteString(data, 33, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AskID:%d, - Name:%s, - LV:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.Head.OutputString(), - self.AskID, - self.Name, - self.LV, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -m_NAtagGCFriendAskIfJoin=tagGCFriendAskIfJoin() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendAskIfJoin.Head.Cmd,m_NAtagGCFriendAskIfJoin.Head.SubCmd))] = m_NAtagGCFriendAskIfJoin - - -#------------------------------------------------------ -# B3 24 喜糖列表 #tagGCCandyList - -class tagGCCandyInfo(Structure): - PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 - NameALen = 0 #(BYTE NameALen) - PlayerNameA = "" #(String PlayerNameA) - PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 - NameBLen = 0 #(BYTE NameBLen) - PlayerNameB = "" #(String PlayerNameB) - BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID - MarryTime = 0 #(DWORD MarryTime)// 成亲时间戳,秒 - EndTime = 0 #(DWORD EndTime)// 结束时间戳,秒 - Prosperity = 0 #(DWORD Prosperity)// 当前繁荣度 - FireworksTotalBuyCount = 0 #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数 - FireworksPlayerBuyCount = 0 #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数 - PlayerFreeEatCandyCount = 0 #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) - self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) - self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerIDA = 0 - self.NameALen = 0 - self.PlayerNameA = "" - self.PlayerIDB = 0 - self.NameBLen = 0 - self.PlayerNameB = "" - self.BridePriceID = 0 - self.MarryTime = 0 - self.EndTime = 0 - self.Prosperity = 0 - self.FireworksTotalBuyCount = 0 - self.FireworksPlayerBuyCount = 0 - self.PlayerFreeEatCandyCount = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerNameA) - length += 4 - length += 1 - length += len(self.PlayerNameB) - length += 1 - length += 4 - length += 4 - length += 4 - length += 1 - length += 1 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerIDA) - data = CommFunc.WriteBYTE(data, self.NameALen) - data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) - data = CommFunc.WriteDWORD(data, self.PlayerIDB) - data = CommFunc.WriteBYTE(data, self.NameBLen) - data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) - data = CommFunc.WriteBYTE(data, self.BridePriceID) - data = CommFunc.WriteDWORD(data, self.MarryTime) - data = CommFunc.WriteDWORD(data, self.EndTime) - data = CommFunc.WriteDWORD(data, self.Prosperity) - data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount) - data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount) - data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount) - return data - - def OutputString(self): - DumpString = ''' - PlayerIDA:%d, - NameALen:%d, - PlayerNameA:%s, - PlayerIDB:%d, - NameBLen:%d, - PlayerNameB:%s, - BridePriceID:%d, - MarryTime:%d, - EndTime:%d, - Prosperity:%d, - FireworksTotalBuyCount:%d, - FireworksPlayerBuyCount:%d, - PlayerFreeEatCandyCount:%d - '''\ - %( - self.PlayerIDA, - self.NameALen, - self.PlayerNameA, - self.PlayerIDB, - self.NameBLen, - self.PlayerNameB, - self.BridePriceID, - self.MarryTime, - self.EndTime, - self.Prosperity, - self.FireworksTotalBuyCount, - self.FireworksPlayerBuyCount, - self.PlayerFreeEatCandyCount - ) - return DumpString - - -class tagGCCandyList(Structure): - Head = tagHead() - CandyCount = 0 #(WORD CandyCount) - CandyInfoList = list() #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x24 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.CandyCount): - temCandyInfoList = tagGCCandyInfo() - _pos = temCandyInfoList.ReadData(_lpData, _pos) - self.CandyInfoList.append(temCandyInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x24 - self.CandyCount = 0 - self.CandyInfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.CandyCount): - length += self.CandyInfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.CandyCount) - for i in range(self.CandyCount): - data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - CandyCount:%d, - CandyInfoList:%s - '''\ - %( - self.Head.OutputString(), - self.CandyCount, - "..." - ) - return DumpString - - -m_NAtagGCCandyList=tagGCCandyList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList - - -#------------------------------------------------------ -# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList - -class tagGCCharmOfferBillboardData(Structure): - OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名 - PlayerID = 0 #(DWORD PlayerID)// 玩家ID - 贡献者 - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - CharmValue = 0 #(DWORD CharmValue)//贡献魅力值 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.OrderIndex = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.CharmValue = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.OrderIndex) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteDWORD(data, self.CharmValue) - return data - - def OutputString(self): - DumpString = ''' - OrderIndex:%d, - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - CharmValue:%d - '''\ - %( - self.OrderIndex, - self.PlayerID, - self.NameLen, - self.PlayerName, - self.CharmValue - ) - return DumpString - - -class tagGCCharmOfferBillboardDataList(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 魅力玩家ID - QueryType = 0 #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜 - DataCount = 0 #(BYTE DataCount) - OfferBillboardDataList = list() #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x19 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.DataCount): - temOfferBillboardDataList = tagGCCharmOfferBillboardData() - _pos = temOfferBillboardDataList.ReadData(_lpData, _pos) - self.OfferBillboardDataList.append(temOfferBillboardDataList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x19 - self.PlayerID = 0 - self.QueryType = 0 - self.DataCount = 0 - self.OfferBillboardDataList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 1 - for i in range(self.DataCount): - length += self.OfferBillboardDataList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.QueryType) - data = CommFunc.WriteBYTE(data, self.DataCount) - for i in range(self.DataCount): - data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - QueryType:%d, - DataCount:%d, - OfferBillboardDataList:%s - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.QueryType, - self.DataCount, - "..." - ) - return DumpString - - -m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList - - -#------------------------------------------------------ -# B3 26 伴侣信息 #tagGCCoupleInfo - -class tagGCCoupleInfo(Structure): - Head = tagHead() - CoupleID = 0 #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取 - NameLen = 0 #(BYTE NameLen) - CoupleName = "" #(String CoupleName) - NewMarryTime = 0 #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算 - MarryTime = 0 #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算 - BridePriceState = 0 #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次 - BreakRequestID = 0 #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求 - BreakRequestTime = 0 #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期 - PlayerBreakRequestTime = 0 #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x26 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x26 - self.CoupleID = 0 - self.NameLen = 0 - self.CoupleName = "" - self.NewMarryTime = 0 - self.MarryTime = 0 - self.BridePriceState = 0 - self.BreakRequestID = 0 - self.BreakRequestTime = 0 - self.PlayerBreakRequestTime = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.CoupleName) - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.CoupleID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.CoupleName) - data = CommFunc.WriteDWORD(data, self.NewMarryTime) - data = CommFunc.WriteDWORD(data, self.MarryTime) - data = CommFunc.WriteDWORD(data, self.BridePriceState) - data = CommFunc.WriteDWORD(data, self.BreakRequestID) - data = CommFunc.WriteDWORD(data, self.BreakRequestTime) - data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - CoupleID:%d, - NameLen:%d, - CoupleName:%s, - NewMarryTime:%d, - MarryTime:%d, - BridePriceState:%d, - BreakRequestID:%d, - BreakRequestTime:%d, - PlayerBreakRequestTime:%d - '''\ - %( - self.Head.OutputString(), - self.CoupleID, - self.NameLen, - self.CoupleName, - self.NewMarryTime, - self.MarryTime, - self.BridePriceState, - self.BreakRequestID, - self.BreakRequestTime, - self.PlayerBreakRequestTime - ) - return DumpString - - -m_NAtagGCCoupleInfo=tagGCCoupleInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo - - -#------------------------------------------------------ -# B3 22 收到提亲信息 #tagGCMarryReqInfo - -class tagGCMarryReqInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可 - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x22 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x22 - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.BridePriceID = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.PlayerName) - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.BridePriceID) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - BridePriceID:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.NameLen, - self.PlayerName, - self.BridePriceID - ) - return DumpString - - -m_NAtagGCMarryReqInfo=tagGCMarryReqInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo - - -#------------------------------------------------------ -# B3 21 提亲发送成功 #tagGCMarryReqOK - -class tagGCMarryReqOK(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - self.SubCmd = 0x21 - 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 = 0xB3 - self.SubCmd = 0x21 - return - - def GetLength(self): - return sizeof(tagGCMarryReqOK) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK: - Cmd:%s, - SubCmd:%s - '''\ - %( - self.Cmd, - self.SubCmd - ) - return DumpString - - -m_NAtagGCMarryReqOK=tagGCMarryReqOK() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK - - -#------------------------------------------------------ -# B3 23 提亲回应结果 #tagGCMarryResponseRet - -class tagGCMarryResponseRet(Structure): - Head = tagHead() - PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 - NameALen = 0 #(BYTE NameALen) - PlayerNameA = "" #(String PlayerNameA) - PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 - NameBLen = 0 #(BYTE NameBLen) - PlayerNameB = "" #(String PlayerNameB) - IsOK = 0 #(BYTE IsOK)// 是否同意,0-否,1-是; 如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x23 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) - self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) - self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x23 - self.PlayerIDA = 0 - self.NameALen = 0 - self.PlayerNameA = "" - self.PlayerIDB = 0 - self.NameBLen = 0 - self.PlayerNameB = "" - self.IsOK = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.PlayerNameA) - length += 4 - length += 1 - length += len(self.PlayerNameB) - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerIDA) - data = CommFunc.WriteBYTE(data, self.NameALen) - data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) - data = CommFunc.WriteDWORD(data, self.PlayerIDB) - data = CommFunc.WriteBYTE(data, self.NameBLen) - data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) - data = CommFunc.WriteBYTE(data, self.IsOK) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerIDA:%d, - NameALen:%d, - PlayerNameA:%s, - PlayerIDB:%d, - NameBLen:%d, - PlayerNameB:%s, - IsOK:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerIDA, - self.NameALen, - self.PlayerNameA, - self.PlayerIDB, - self.NameBLen, - self.PlayerNameB, - self.IsOK - ) - return DumpString - - -m_NAtagGCMarryResponseRet=tagGCMarryResponseRet() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet - - -#------------------------------------------------------ -# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo - -class tagGCPlayerCharmValueInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("CharmValueTotal", c_int), #当前魅力值 - 总 - ("CharmValueWeek", c_int), #当前魅力值 - 周 - ("CharmValueDay", c_int), #当前魅力值 - 日 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - self.SubCmd = 0x25 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB3 - self.SubCmd = 0x25 - self.CharmValueTotal = 0 - self.CharmValueWeek = 0 - self.CharmValueDay = 0 - return - - def GetLength(self): - return sizeof(tagGCPlayerCharmValueInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo: - Cmd:%s, - SubCmd:%s, - CharmValueTotal:%d, - CharmValueWeek:%d, - CharmValueDay:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.CharmValueTotal, - self.CharmValueWeek, - self.CharmValueDay - ) - return DumpString - - -m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo - - -#------------------------------------------------------ -# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState - -class tagGCRelatedPlayerOnlineState(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), # 相关玩家ID - ("OfflineValue", c_int), # 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; - ("IsCross", c_ubyte), # 是否跨服同步的,如果是跨服则离线时间计算时要取跨服服务器时间 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - self.SubCmd = 0x15 - 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 = 0xB3 - self.SubCmd = 0x15 - self.PlayerID = 0 - self.OfflineValue = 0 - self.IsCross = 0 - return - - def GetLength(self): - return sizeof(tagGCRelatedPlayerOnlineState) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B3 15 相关玩家在线状态变更同步 //tagGCRelatedPlayerOnlineState: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - OfflineValue:%d, - IsCross:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.OfflineValue, - self.IsCross - ) - return DumpString - - -m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState - - -#------------------------------------------------------ -# B3 20 送礼物成功通知 #tagGCSendGiftsOKList - -class tagGCSendGiftsOK(Structure): - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 赠送方玩家名 - PlayerID = 0 #(DWORD PlayerID)// 赠送方玩家ID - GiftNum = 0 #(WORD GiftNum)// 赠送礼物编号 - GiftCount = 0 #(DWORD GiftCount)// 赠送礼物数量 - SendTime = 0 #(DWORD SendTime)// 赠送时间戳 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.NameLen = 0 - self.Name = "" - self.PlayerID = 0 - self.GiftNum = 0 - self.GiftCount = 0 - self.SendTime = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += len(self.Name) - length += 4 - length += 2 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteWORD(data, self.GiftNum) - data = CommFunc.WriteDWORD(data, self.GiftCount) - data = CommFunc.WriteDWORD(data, self.SendTime) - return data - - def OutputString(self): - DumpString = ''' - NameLen:%d, - Name:%s, - PlayerID:%d, - GiftNum:%d, - GiftCount:%d, - SendTime:%d - '''\ - %( - self.NameLen, - self.Name, - self.PlayerID, - self.GiftNum, - self.GiftCount, - self.SendTime - ) - return DumpString - - -class tagGCSendGiftsOKList(Structure): - Head = tagHead() - Count = 0 #(WORD Count) - SendGiftsOKList = list() #(vector<tagGCSendGiftsOK> SendGiftsOKList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x20 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temSendGiftsOKList = tagGCSendGiftsOK() - _pos = temSendGiftsOKList.ReadData(_lpData, _pos) - self.SendGiftsOKList.append(temSendGiftsOKList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x20 - self.Count = 0 - self.SendGiftsOKList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.SendGiftsOKList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - SendGiftsOKList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList - - -#------------------------------------------------------ -# B3 14 社交人群伴侣信息 #tagGCSocialCouples - -class tagGCSocialCouple(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), - ("CoupleID", c_int), #伴侣ID - ] - - 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.PlayerID = 0 - self.CoupleID = 0 - return - - def GetLength(self): - return sizeof(tagGCSocialCouple) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples: - PlayerID:%d, - CoupleID:%d - '''\ - %( - self.PlayerID, - self.CoupleID - ) - return DumpString - - -class tagGCSocialCouples(Structure): - Head = tagHead() - Count = 0 #(WORD Count) - Player = list() #(vector<tagGCSocialCouple> Player)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x14 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temPlayer = tagGCSocialCouple() - _pos = temPlayer.ReadData(_lpData, _pos) - self.Player.append(temPlayer) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x14 - self.Count = 0 - self.Player = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.Player[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - Player:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCSocialCouples=tagGCSocialCouples() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples - - -#------------------------------------------------------ -#B3 01 添加社交对象 #tagGCAddSocialPlayer - -class tagGCAddSocialPlayer(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 - ("PlayerID", c_int), - ("SortValue", c_int), #最近联系人和仇人按时间排序 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - self.SubCmd = 0x01 - 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 = 0xB3 - self.SubCmd = 0x01 - self.GroupType = 0 - self.PlayerID = 0 - self.SortValue = 0 - return - - def GetLength(self): - return sizeof(tagGCAddSocialPlayer) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B3 01 添加社交对象 //tagGCAddSocialPlayer: - Cmd:%s, - SubCmd:%s, - GroupType:%d, - PlayerID:%d, - SortValue:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.GroupType, - self.PlayerID, - self.SortValue - ) - return DumpString - - -m_NAtagGCAddSocialPlayer=tagGCAddSocialPlayer() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddSocialPlayer.Cmd,m_NAtagGCAddSocialPlayer.SubCmd))] = m_NAtagGCAddSocialPlayer - - -#------------------------------------------------------ -#B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo - -class tagGCAnswerPlayerShortInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID) - PlayerName = "" #(char PlayerName[33]) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV)//等级 - RealmLV = 0 #(WORD RealmLV)//境界 - OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线 - IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 - ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_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.ReadWORD(_lpData, _pos) - self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x09 - self.PlayerID = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.RealmLV = 0 - self.OnlineType = 0 - self.IsInTeam = 0 - self.ServerGroupID = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 33 - length += 1 - length += 2 - length += 2 - length += 1 - length += 1 - 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.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.WriteBYTE(data, self.OnlineType) - data = CommFunc.WriteBYTE(data, self.IsInTeam) - data = CommFunc.WriteDWORD(data, self.ServerGroupID) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - OnlineType:%d, - IsInTeam:%d, - ServerGroupID:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.OnlineType, - self.IsInTeam, - self.ServerGroupID, - self.Face, - self.FacePic - ) - return DumpString - - -m_NAtagGCAnswerPlayerShortInfo=tagGCAnswerPlayerShortInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAnswerPlayerShortInfo.Head.Cmd,m_NAtagGCAnswerPlayerShortInfo.Head.SubCmd))] = m_NAtagGCAnswerPlayerShortInfo - - -#------------------------------------------------------ -#B3 02 删除社交对象 #tagGCDelSocialPlayer - -class tagGCDelSocialPlayer(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 - ("PlayerID", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - 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 = 0xB3 - self.SubCmd = 0x02 - self.GroupType = 0 - self.PlayerID = 0 - return - - def GetLength(self): - return sizeof(tagGCDelSocialPlayer) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B3 02 删除社交对象 //tagGCDelSocialPlayer: - Cmd:%s, - SubCmd:%s, - GroupType:%d, - PlayerID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.GroupType, - self.PlayerID - ) - return DumpString - - -m_NAtagGCDelSocialPlayer=tagGCDelSocialPlayer() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelSocialPlayer.Cmd,m_NAtagGCDelSocialPlayer.SubCmd))] = m_NAtagGCDelSocialPlayer - - -#------------------------------------------------------ -#B3 04 社交人群基本信息 #tagGCSocialPlayers - -class tagGCSocialPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - PlayerName = "" #(char PlayerName[33]) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV)//等级 - RealmLV = 0 #(WORD RealmLV)//境界 - OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - 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.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_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.OnlineType = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 2 - length += 2 - length += 1 - 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.WriteBYTE(data, self.OnlineType) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - OnlineType:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.OnlineType, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCSocialPlayers(Structure): - Head = tagHead() - Count = 0 #(WORD Count) - Player = list() #(vector<tagGCSocialPlayer> Player)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temPlayer = tagGCSocialPlayer() - _pos = temPlayer.ReadData(_lpData, _pos) - self.Player.append(temPlayer) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x04 - self.Count = 0 - self.Player = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - for i in range(self.Count): - length += self.Player[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - Player:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCSocialPlayers=tagGCSocialPlayers() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialPlayers.Head.Cmd,m_NAtagGCSocialPlayers.Head.SubCmd))] = m_NAtagGCSocialPlayers - - -#------------------------------------------------------ -#B3 08 通知玩家分组信息 #tagGCGroupPlayers - -class tagGCGroupPlayer(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), - ("SortValue", c_int), # 亲密组时为亲密度 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.PlayerID = 0 - self.SortValue = 0 - return - - def GetLength(self): - return sizeof(tagGCGroupPlayer) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B3 08 通知玩家分组信息 //tagGCGroupPlayers: - PlayerID:%d, - SortValue:%d - '''\ - %( - self.PlayerID, - self.SortValue - ) - return DumpString - - -class tagGCGroupPlayers(Structure): - Head = tagHead() - GroupType = 0 #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组 - Count = 0 #(WORD Count) - Players = list() #(vector<tagGCGroupPlayer> Players)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temPlayers = tagGCGroupPlayer() - _pos = temPlayers.ReadData(_lpData, _pos) - self.Players.append(temPlayers) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x08 - self.GroupType = 0 - self.Count = 0 - self.Players = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 2 - for i in range(self.Count): - length += self.Players[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.GroupType) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.Players[i].GetLength(), self.Players[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - GroupType:%d, - Count:%d, - Players:%s - '''\ - %( - self.Head.OutputString(), - self.GroupType, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCGroupPlayers=tagGCGroupPlayers() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGroupPlayers.Head.Cmd,m_NAtagGCGroupPlayers.Head.SubCmd))] = m_NAtagGCGroupPlayers - - -#------------------------------------------------------ -#B3 05 社交圈内广播玩家名称 #tagGCSocialName - -class tagGCSocialName(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID) - Name = "" #(char Name[33]) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB3 - self.Head.SubCmd = 0x05 - self.PlayerID = 0 - self.Name = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 33 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteString(data, 33, self.Name) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - Name:%s - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.Name - ) - return DumpString - - -m_NAtagGCSocialName=tagGCSocialName() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialName.Head.Cmd,m_NAtagGCSocialName.Head.SubCmd))] = m_NAtagGCSocialName - - -#------------------------------------------------------ -#B3 06 社交玩家在线情况 #tagGCSocialOnline - -class tagGCSocialOnline(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), - ("OnlineType", c_ubyte), #0不在线 1在线 2脱机在线 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - 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 = 0xB3 - self.SubCmd = 0x06 - self.PlayerID = 0 - self.OnlineType = 0 - return - - def GetLength(self): - return sizeof(tagGCSocialOnline) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B3 06 社交玩家在线情况 //tagGCSocialOnline: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - OnlineType:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.OnlineType - ) - return DumpString - - -m_NAtagGCSocialOnline=tagGCSocialOnline() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialOnline.Cmd,m_NAtagGCSocialOnline.SubCmd))] = m_NAtagGCSocialOnline - - -#------------------------------------------------------ -#B3 07 社交玩家属性广播 #tagGCSocialRefreshType - -class tagGCSocialRefreshType(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), - ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ - ("Value", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB3 - 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 = 0xB3 - self.SubCmd = 0x07 - self.PlayerID = 0 - self.RefreshType = 0 - self.Value = 0 - return - - def GetLength(self): - return sizeof(tagGCSocialRefreshType) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B3 07 社交玩家属性广播 //tagGCSocialRefreshType: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - RefreshType:%d, - Value:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.RefreshType, - self.Value - ) - return DumpString - - -m_NAtagGCSocialRefreshType=tagGCSocialRefreshType() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType - - -#------------------------------------------------------ -# B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo - -class tagGCAddAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - ItemID = 0 #(DWORD ItemID) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.ItemID = 0 - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.ItemID) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - ItemID:%d - '''\ - %( - self.ItemGUID, - self.ItemID - ) - return DumpString - - -class tagGCAddAuctionItemInfo(Structure): - Head = tagHead() - AddCount = 0 #(BYTE AddCount) - AddAuctionItemList = list() #(vector<tagGCAddAuctionItem> AddAuctionItemList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AddCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AddCount): - temAddAuctionItemList = tagGCAddAuctionItem() - _pos = temAddAuctionItemList.ReadData(_lpData, _pos) - self.AddAuctionItemList.append(temAddAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x04 - self.AddCount = 0 - self.AddAuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.AddCount): - length += self.AddAuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AddCount) - for i in range(self.AddCount): - data = CommFunc.WriteString(data, self.AddAuctionItemList[i].GetLength(), self.AddAuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AddCount:%d, - AddAuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.AddCount, - "..." - ) - return DumpString - - -m_NAtagGCAddAuctionItemInfo=tagGCAddAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddAuctionItemInfo.Head.Cmd,m_NAtagGCAddAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAddAuctionItemInfo - - -#------------------------------------------------------ -# B5 07 拍卖行关注的物品ID #tagGCAttentionAuctionItemID - -class tagGCAttentionAuctionItemID(Structure): - Head = tagHead() - AttentionCount = 0 #(BYTE AttentionCount) - AttentionItemIDList = list() #(vector<DWORD> AttentionItemIDList)// 关注的物品ID列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x07 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AttentionCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AttentionCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.AttentionItemIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x07 - self.AttentionCount = 0 - self.AttentionItemIDList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 * self.AttentionCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AttentionCount) - for i in range(self.AttentionCount): - data = CommFunc.WriteDWORD(data, self.AttentionItemIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AttentionCount:%d, - AttentionItemIDList:%s - '''\ - %( - self.Head.OutputString(), - self.AttentionCount, - "..." - ) - return DumpString - - -m_NAtagGCAttentionAuctionItemID=tagGCAttentionAuctionItemID() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemID.Head.Cmd,m_NAtagGCAttentionAuctionItemID.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemID - - -#------------------------------------------------------ -# B5 06 拍卖行关注中的拍品信息 #tagGCAttentionAuctionItemInfo - -class tagGCAttentionAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.AddTime = "" - self.BidderPrice = 0 - self.BiddingTime = "" - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 4 - length += 2 - length += 19 - length += 4 - length += 19 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - ItemID:%d, - ItemCount:%d, - AddTime:%s, - BidderPrice:%d, - BiddingTime:%s, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.ItemID, - self.ItemCount, - self.AddTime, - self.BidderPrice, - self.BiddingTime, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCAttentionAuctionItemInfo(Structure): - Head = tagHead() - AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 - AuctionItemList = list() #(vector<tagGCAttentionAuctionItem> AuctionItemList)//拍品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x06 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AuctionItemCount): - temAuctionItemList = tagGCAttentionAuctionItem() - _pos = temAuctionItemList.ReadData(_lpData, _pos) - self.AuctionItemList.append(temAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x06 - self.AuctionItemCount = 0 - self.AuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.AuctionItemCount): - length += self.AuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AuctionItemCount) - for i in range(self.AuctionItemCount): - data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AuctionItemCount:%d, - AuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.AuctionItemCount, - "..." - ) - return DumpString - - -m_NAtagGCAttentionAuctionItemInfo=tagGCAttentionAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemInfo.Head.Cmd,m_NAtagGCAttentionAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemInfo - - -#------------------------------------------------------ -# B5 01 拍卖行拍卖中的物品信息 #tagGCAuctionItemInfo - -class tagGCAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.AddTime = "" - self.BidderPrice = 0 - self.BiddingTime = "" - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 4 - length += 2 - length += 19 - length += 4 - length += 19 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - ItemID:%d, - ItemCount:%d, - AddTime:%s, - BidderPrice:%d, - BiddingTime:%s, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.ItemID, - self.ItemCount, - self.AddTime, - self.BidderPrice, - self.BiddingTime, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCAuctionItemInfo(Structure): - Head = tagHead() - Job = 0 #(BYTE Job)//过滤职业,0为不限制 - ItemTypeCount = 0 #(BYTE ItemTypeCount) - ItemTypeList = list() #(vector<DWORD> ItemTypeList)//指定的物品类型 - ClassLV = 0 #(BYTE ClassLV)//过滤阶数,0为不限制 - SpecItemIDCount = 0 #(BYTE SpecItemIDCount)//指定物品ID个数 - SpecItemIDList = list() #(vector<DWORD> SpecItemIDList)//指定物品ID - FromItemGUID = "" #(char FromItemGUID[40])//从哪个物品开始查询 - QueryDir = 0 #(BYTE QueryDir)//查询方向,1-往后查,2-往前查,3-定位查询 - QueryCount = 0 #(BYTE QueryCount)//查询个数,0为全部 - QueryRemainlCount = 0 #(WORD QueryRemainlCount)//查询条件对应查询方向剩余个数 - AuctionItemCount = 0 #(BYTE AuctionItemCount)//返回拍品数量 - AuctionItemList = list() #(vector<tagGCAuctionItem> AuctionItemList)//返回拍品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x01 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ItemTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ItemTypeCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.ItemTypeList.append(value) - self.ClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SpecItemIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SpecItemIDCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.SpecItemIDList.append(value) - self.FromItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.QueryDir,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.QueryCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.QueryRemainlCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AuctionItemCount): - temAuctionItemList = tagGCAuctionItem() - _pos = temAuctionItemList.ReadData(_lpData, _pos) - self.AuctionItemList.append(temAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x01 - self.Job = 0 - self.ItemTypeCount = 0 - self.ItemTypeList = list() - self.ClassLV = 0 - self.SpecItemIDCount = 0 - self.SpecItemIDList = list() - self.FromItemGUID = "" - self.QueryDir = 0 - self.QueryCount = 0 - self.QueryRemainlCount = 0 - self.AuctionItemCount = 0 - self.AuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 * self.ItemTypeCount - length += 1 - length += 1 - length += 4 * self.SpecItemIDCount - length += 40 - length += 1 - length += 1 - length += 2 - length += 1 - for i in range(self.AuctionItemCount): - length += self.AuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.ItemTypeCount) - for i in range(self.ItemTypeCount): - data = CommFunc.WriteDWORD(data, self.ItemTypeList[i]) - data = CommFunc.WriteBYTE(data, self.ClassLV) - data = CommFunc.WriteBYTE(data, self.SpecItemIDCount) - for i in range(self.SpecItemIDCount): - data = CommFunc.WriteDWORD(data, self.SpecItemIDList[i]) - data = CommFunc.WriteString(data, 40, self.FromItemGUID) - data = CommFunc.WriteBYTE(data, self.QueryDir) - data = CommFunc.WriteBYTE(data, self.QueryCount) - data = CommFunc.WriteWORD(data, self.QueryRemainlCount) - data = CommFunc.WriteBYTE(data, self.AuctionItemCount) - for i in range(self.AuctionItemCount): - data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Job:%d, - ItemTypeCount:%d, - ItemTypeList:%s, - ClassLV:%d, - SpecItemIDCount:%d, - SpecItemIDList:%s, - FromItemGUID:%s, - QueryDir:%d, - QueryCount:%d, - QueryRemainlCount:%d, - AuctionItemCount:%d, - AuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.Job, - self.ItemTypeCount, - "...", - self.ClassLV, - self.SpecItemIDCount, - "...", - self.FromItemGUID, - self.QueryDir, - self.QueryCount, - self.QueryRemainlCount, - self.AuctionItemCount, - "..." - ) - return DumpString - - -m_NAtagGCAuctionItemInfo=tagGCAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAuctionItemInfo.Head.Cmd,m_NAtagGCAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAuctionItemInfo - - -#------------------------------------------------------ -# B5 10 拍卖行玩家竞价中的物品信息 #tagGCBiddingItemInfo - -class tagGCBiddingItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderID = 0 #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID - BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.AddTime = "" - self.BidderID = 0 - self.BidderPrice = 0 - self.BiddingTime = "" - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 4 - length += 2 - length += 19 - length += 4 - length += 4 - length += 19 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderID) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - ItemID:%d, - ItemCount:%d, - AddTime:%s, - BidderID:%d, - BidderPrice:%d, - BiddingTime:%s, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.ItemID, - self.ItemCount, - self.AddTime, - self.BidderID, - self.BidderPrice, - self.BiddingTime, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCBiddingItemInfo(Structure): - Head = tagHead() - AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 - AuctionItemList = list() #(vector<tagGCBiddingItem> AuctionItemList)//拍品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x10 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AuctionItemCount): - temAuctionItemList = tagGCBiddingItem() - _pos = temAuctionItemList.ReadData(_lpData, _pos) - self.AuctionItemList.append(temAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x10 - self.AuctionItemCount = 0 - self.AuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.AuctionItemCount): - length += self.AuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AuctionItemCount) - for i in range(self.AuctionItemCount): - data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AuctionItemCount:%d, - AuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.AuctionItemCount, - "..." - ) - return DumpString - - -m_NAtagGCBiddingItemInfo=tagGCBiddingItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBiddingItemInfo.Head.Cmd,m_NAtagGCBiddingItemInfo.Head.SubCmd))] = m_NAtagGCBiddingItemInfo - - -#------------------------------------------------------ -# B5 09 拍卖行清除拍品 #tagGCClearAuctionItemInfo - -class tagGCClearAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - return _pos - - def Clear(self): - self.ItemGUID = "" - return - - def GetLength(self): - length = 0 - length += 40 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s - '''\ - %( - self.ItemGUID - ) - return DumpString - - -class tagGCClearAuctionItemInfo(Structure): - Head = tagHead() - ClearCount = 0 #(BYTE ClearCount) - ClearAuctionItemList = list() #(vector<tagGCClearAuctionItem> ClearAuctionItemList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ClearCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ClearCount): - temClearAuctionItemList = tagGCClearAuctionItem() - _pos = temClearAuctionItemList.ReadData(_lpData, _pos) - self.ClearAuctionItemList.append(temClearAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x09 - self.ClearCount = 0 - self.ClearAuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.ClearCount): - length += self.ClearAuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ClearCount) - for i in range(self.ClearCount): - data = CommFunc.WriteString(data, self.ClearAuctionItemList[i].GetLength(), self.ClearAuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ClearCount:%d, - ClearAuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.ClearCount, - "..." - ) - return DumpString - - -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 - - -#------------------------------------------------------ -# B5 05 拍卖行仙盟拍卖中的物品信息 #tagGCFamilyAuctionItemInfo - -class tagGCFamilyAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - FamilyPlayerIDLen = 0 #(WORD FamilyPlayerIDLen) - FamilyPlayerIDInfo = "" #(String FamilyPlayerIDInfo)//可获得收益的仙盟玩家ID信息 - AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - self.FamilyPlayerIDLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FamilyPlayerIDInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyPlayerIDLen) - self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.AddTime = "" - self.BidderPrice = 0 - self.BiddingTime = "" - self.UserDataLen = 0 - self.UserData = "" - self.FamilyPlayerIDLen = 0 - self.FamilyPlayerIDInfo = "" - self.AuctionType = 0 - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 4 - length += 2 - length += 19 - length += 4 - length += 19 - length += 2 - length += len(self.UserData) - length += 2 - length += len(self.FamilyPlayerIDInfo) - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - data = CommFunc.WriteWORD(data, self.FamilyPlayerIDLen) - data = CommFunc.WriteString(data, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo) - data = CommFunc.WriteBYTE(data, self.AuctionType) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - ItemID:%d, - ItemCount:%d, - AddTime:%s, - BidderPrice:%d, - BiddingTime:%s, - UserDataLen:%d, - UserData:%s, - FamilyPlayerIDLen:%d, - FamilyPlayerIDInfo:%s, - AuctionType:%d - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.ItemID, - self.ItemCount, - self.AddTime, - self.BidderPrice, - self.BiddingTime, - self.UserDataLen, - self.UserData, - self.FamilyPlayerIDLen, - self.FamilyPlayerIDInfo, - self.AuctionType - ) - return DumpString - - -class tagGCFamilyAuctionItemInfo(Structure): - Head = tagHead() - AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 - AuctionItemList = list() #(vector<tagGCFamilyAuctionItem> AuctionItemList)//拍品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AuctionItemCount): - temAuctionItemList = tagGCFamilyAuctionItem() - _pos = temAuctionItemList.ReadData(_lpData, _pos) - self.AuctionItemList.append(temAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x05 - self.AuctionItemCount = 0 - self.AuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.AuctionItemCount): - length += self.AuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AuctionItemCount) - for i in range(self.AuctionItemCount): - data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AuctionItemCount:%d, - AuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.AuctionItemCount, - "..." - ) - return DumpString - - -m_NAtagGCFamilyAuctionItemInfo=tagGCFamilyAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyAuctionItemInfo.Head.Cmd,m_NAtagGCFamilyAuctionItemInfo.Head.SubCmd))] = m_NAtagGCFamilyAuctionItemInfo - - -#------------------------------------------------------ -# B5 02 拍卖行玩家拍卖中的物品信息 #tagGCPlayerAuctionItemInfo - -class tagGCPlayerAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.AddTime = "" - self.BidderPrice = 0 - self.BiddingTime = "" - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 4 - length += 2 - length += 19 - length += 4 - length += 19 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - ItemID:%d, - ItemCount:%d, - AddTime:%s, - BidderPrice:%d, - BiddingTime:%s, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.ItemID, - self.ItemCount, - self.AddTime, - self.BidderPrice, - self.BiddingTime, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCPlayerAuctionItemInfo(Structure): - Head = tagHead() - AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 - AuctionItemList = list() #(vector<tagGCPlayerAuctionItem> AuctionItemList)//拍品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x02 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AuctionItemCount): - temAuctionItemList = tagGCPlayerAuctionItem() - _pos = temAuctionItemList.ReadData(_lpData, _pos) - self.AuctionItemList.append(temAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x02 - self.AuctionItemCount = 0 - self.AuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.AuctionItemCount): - length += self.AuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AuctionItemCount) - for i in range(self.AuctionItemCount): - data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - AuctionItemCount:%d, - AuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.AuctionItemCount, - "..." - ) - return DumpString - - -m_NAtagGCPlayerAuctionItemInfo=tagGCPlayerAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionItemInfo.Head.Cmd,m_NAtagGCPlayerAuctionItemInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionItemInfo - - -#------------------------------------------------------ -# B5 03 拍卖行玩家拍卖记录 #tagGCPlayerAuctionRecordInfo - -class tagGCPlayerAuctionRecord(Structure): - ItemGUID = "" #(char ItemGUID[40]) - FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 - RecordType = 0 #(BYTE RecordType)//记录类型 0-我的拍品记录 1-仙盟拍品记录 2-我的竞拍记录 - RecordResult = 0 #(BYTE RecordResult)//记录结果 0-流拍 1-拍卖成交 2-回收 3-竞价成功 4-竞价失败 - RecordTime = "" #(char RecordTime[19])//记录时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(DWORD BidderPrice)//成交价格 - BidderName = "" #(char BidderName[33])//成交玩家名 - ItemID = 0 #(DWORD ItemID) - ItemCount = 0 #(WORD ItemCount) - UserDataLen = 0 #(WORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RecordResult,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RecordTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BidderName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.FamilyID = 0 - self.RecordType = 0 - self.RecordResult = 0 - self.RecordTime = "" - self.BidderPrice = 0 - self.BidderName = "" - self.ItemID = 0 - self.ItemCount = 0 - self.UserDataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 4 - length += 1 - length += 1 - length += 19 - length += 4 - length += 33 - length += 4 - length += 2 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.RecordType) - data = CommFunc.WriteBYTE(data, self.RecordResult) - data = CommFunc.WriteString(data, 19, self.RecordTime) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 33, self.BidderName) - data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteWORD(data, self.ItemCount) - data = CommFunc.WriteWORD(data, self.UserDataLen) - data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - FamilyID:%d, - RecordType:%d, - RecordResult:%d, - RecordTime:%s, - BidderPrice:%d, - BidderName:%s, - ItemID:%d, - ItemCount:%d, - UserDataLen:%d, - UserData:%s - '''\ - %( - self.ItemGUID, - self.FamilyID, - self.RecordType, - self.RecordResult, - self.RecordTime, - self.BidderPrice, - self.BidderName, - self.ItemID, - self.ItemCount, - self.UserDataLen, - self.UserData - ) - return DumpString - - -class tagGCPlayerAuctionRecordInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count) - AuctionRecordList = list() #(vector<tagGCPlayerAuctionRecord> AuctionRecordList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x03 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temAuctionRecordList = tagGCPlayerAuctionRecord() - _pos = temAuctionRecordList.ReadData(_lpData, _pos) - self.AuctionRecordList.append(temAuctionRecordList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x03 - self.Count = 0 - self.AuctionRecordList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.AuctionRecordList[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.AuctionRecordList[i].GetLength(), self.AuctionRecordList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - AuctionRecordList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCPlayerAuctionRecordInfo=tagGCPlayerAuctionRecordInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionRecordInfo.Head.Cmd,m_NAtagGCPlayerAuctionRecordInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionRecordInfo - - -#------------------------------------------------------ -# B5 08 拍卖行刷新拍品 #tagGCRefreshAuctionItemInfo - -class tagGCRefreshAuctionItem(Structure): - ItemGUID = "" #(char ItemGUID[40]) - AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品 - AddTime = "" #(char AddTime[19])//上架时间 - BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID - BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格 - BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - return _pos - - def Clear(self): - self.ItemGUID = "" - self.AuctionType = 0 - self.AddTime = "" - self.BidderID = 0 - self.BidderPrice = 0 - self.BiddingTime = "" - return - - def GetLength(self): - length = 0 - length += 40 - length += 1 - length += 19 - length += 4 - length += 4 - length += 19 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteBYTE(data, self.AuctionType) - data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteDWORD(data, self.BidderID) - data = CommFunc.WriteDWORD(data, self.BidderPrice) - data = CommFunc.WriteString(data, 19, self.BiddingTime) - return data - - def OutputString(self): - DumpString = ''' - ItemGUID:%s, - AuctionType:%d, - AddTime:%s, - BidderID:%d, - BidderPrice:%d, - BiddingTime:%s - '''\ - %( - self.ItemGUID, - self.AuctionType, - self.AddTime, - self.BidderID, - self.BidderPrice, - self.BiddingTime - ) - return DumpString - - -class tagGCRefreshAuctionItemInfo(Structure): - Head = tagHead() - RefreshCount = 0 #(BYTE RefreshCount) - RefreshAuctionItemList = list() #(vector<tagGCRefreshAuctionItem> RefreshAuctionItemList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RefreshCount): - temRefreshAuctionItemList = tagGCRefreshAuctionItem() - _pos = temRefreshAuctionItemList.ReadData(_lpData, _pos) - self.RefreshAuctionItemList.append(temRefreshAuctionItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB5 - self.Head.SubCmd = 0x08 - self.RefreshCount = 0 - self.RefreshAuctionItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.RefreshCount): - length += self.RefreshAuctionItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RefreshCount) - for i in range(self.RefreshCount): - data = CommFunc.WriteString(data, self.RefreshAuctionItemList[i].GetLength(), self.RefreshAuctionItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RefreshCount:%d, - RefreshAuctionItemList:%s - '''\ - %( - self.Head.OutputString(), - self.RefreshCount, - "..." - ) - return DumpString - - -m_NAtagGCRefreshAuctionItemInfo=tagGCRefreshAuctionItemInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRefreshAuctionItemInfo.Head.Cmd,m_NAtagGCRefreshAuctionItemInfo.Head.SubCmd))] = m_NAtagGCRefreshAuctionItemInfo - - -#------------------------------------------------------ -# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason - -class tagGCEnterTeamFBFailReason(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 请求进入的地图ID - ("AskType", c_ubyte), # 请求类型: 0-匹配请求;1-进入请求 - ("Reason", c_ubyte), # 失败原因:2-次数不足;3-进入CD中;6-门票不足 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x13 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB9 - self.SubCmd = 0x13 - self.MapID = 0 - self.AskType = 0 - self.Reason = 0 - return - - def GetLength(self): - return sizeof(tagGCEnterTeamFBFailReason) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason: - Cmd:%s, - SubCmd:%s, - MapID:%d, - AskType:%d, - Reason:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID, - self.AskType, - self.Reason - ) - return DumpString - - -m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason - - -#------------------------------------------------------ -# B9 23 功能队伍解散 #tagGCFuncTeamDissolve - -class tagGCFuncTeamDissolve(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("TeamID", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x23 - 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 = 0xB9 - self.SubCmd = 0x23 - self.TeamID = 0 - return - - def GetLength(self): - return sizeof(tagGCFuncTeamDissolve) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 23 功能队伍解散 //tagGCFuncTeamDissolve: - Cmd:%s, - SubCmd:%s, - TeamID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.TeamID - ) - return DumpString - - -m_NAtagGCFuncTeamDissolve=tagGCFuncTeamDissolve() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamDissolve.Cmd,m_NAtagGCFuncTeamDissolve.SubCmd))] = m_NAtagGCFuncTeamDissolve - - -#------------------------------------------------------ -# B9 22 功能队伍列表 #tagGCFuncTeamList - -class tagGCFuncTeamMem(Structure): - ServerID = 0 #(DWORD ServerID) - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower)// 战力,求余亿 - FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 - Value1 = 0 #(DWORD Value1)//值1 - Value2 = 0 #(DWORD Value2)//值2 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ServerID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.Value1 = 0 - self.Value2 = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - return data - - def OutputString(self): - DumpString = ''' - ServerID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - FightPowerEx:%d, - Value1:%d, - Value2:%d - '''\ - %( - self.ServerID, - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic, - self.FightPower, - self.FightPowerEx, - self.Value1, - self.Value2 - ) - return DumpString - - -class tagGCFuncTeam(Structure): - TeamID = 0 #(DWORD TeamID) - CreateTime = 0 #(DWORD CreateTime)//创建队伍时间戳 - FuncMapEx = 0 #(DWORD FuncMapEx)//功能地图扩展,如不同的层级 - NameLen = 0 #(BYTE NameLen) - TeamName = "" #(String TeamName)//队伍名称 - CaptainID = 0 #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID - MinLV = 0 #(WORD MinLV)//最低等级限制 - MinFightPower = 0 #(DWORD MinFightPower)//最低战力限制,求余亿 - MinFightPowerEx = 0 #(DWORD MinFightPowerEx)//最低战力限制,整除亿 - ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 - NeedCheck = 0 #(BYTE NeedCheck)//是否需要审核 - Value1 = 0 #(DWORD Value1)//值1 - Value2 = 0 #(DWORD Value2)//值2 - MemberCount = 0 #(BYTE MemberCount) - MemberList = list() #(vector<tagGCFuncTeamMem> MemberList)// 成员列表 - ApplyCount = 0 #(WORD ApplyCount) - ApplyIDList = list() #(vector<DWORD> ApplyIDList)// 申请玩家ID列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemberCount): - temMemberList = tagGCFuncTeamMem() - _pos = temMemberList.ReadData(_lpData, _pos) - self.MemberList.append(temMemberList) - self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.ApplyCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.ApplyIDList.append(value) - return _pos - - def Clear(self): - self.TeamID = 0 - self.CreateTime = 0 - self.FuncMapEx = 0 - self.NameLen = 0 - self.TeamName = "" - self.CaptainID = 0 - self.MinLV = 0 - self.MinFightPower = 0 - self.MinFightPowerEx = 0 - self.ServerOnly = 0 - self.NeedCheck = 0 - self.Value1 = 0 - self.Value2 = 0 - self.MemberCount = 0 - self.MemberList = list() - self.ApplyCount = 0 - self.ApplyIDList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.TeamName) - length += 4 - length += 2 - length += 4 - length += 4 - length += 1 - length += 1 - length += 4 - length += 4 - length += 1 - for i in range(self.MemberCount): - length += self.MemberList[i].GetLength() - length += 2 - length += 4 * self.ApplyCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.TeamID) - data = CommFunc.WriteDWORD(data, self.CreateTime) - data = CommFunc.WriteDWORD(data, self.FuncMapEx) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.TeamName) - data = CommFunc.WriteDWORD(data, self.CaptainID) - data = CommFunc.WriteWORD(data, self.MinLV) - data = CommFunc.WriteDWORD(data, self.MinFightPower) - data = CommFunc.WriteDWORD(data, self.MinFightPowerEx) - data = CommFunc.WriteBYTE(data, self.ServerOnly) - data = CommFunc.WriteBYTE(data, self.NeedCheck) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - data = CommFunc.WriteBYTE(data, self.MemberCount) - for i in range(self.MemberCount): - data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) - data = CommFunc.WriteWORD(data, self.ApplyCount) - for i in range(self.ApplyCount): - data = CommFunc.WriteDWORD(data, self.ApplyIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - TeamID:%d, - CreateTime:%d, - FuncMapEx:%d, - NameLen:%d, - TeamName:%s, - CaptainID:%d, - MinLV:%d, - MinFightPower:%d, - MinFightPowerEx:%d, - ServerOnly:%d, - NeedCheck:%d, - Value1:%d, - Value2:%d, - MemberCount:%d, - MemberList:%s, - ApplyCount:%d, - ApplyIDList:%s - '''\ - %( - self.TeamID, - self.CreateTime, - self.FuncMapEx, - self.NameLen, - self.TeamName, - self.CaptainID, - self.MinLV, - self.MinFightPower, - self.MinFightPowerEx, - self.ServerOnly, - self.NeedCheck, - self.Value1, - self.Value2, - self.MemberCount, - "...", - self.ApplyCount, - "..." - ) - return DumpString - - -class tagGCFuncTeamList(Structure): - Head = tagHead() - FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID - FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级,0代表所有 - StartIndex = 0 #(DWORD StartIndex)// 查看的起始索引, 默认0 - QueryCnt = 0 #(BYTE QueryCnt)// 查看条数,默认20,最大不超过100 - HaveSpace = 0 #(BYTE HaveSpace)// 是否只查看有空位置的队伍 - IDLimitType = 0 #(BYTE IDLimitType)// ID限制类型:1-同仙盟队长;2-同ServerGroupID队长;3-同ServerID队长 - SearchLen = 0 #(BYTE SearchLen) - SearchMsg = "" #(String SearchMsg)// 指定搜索时有用,可搜索指定队伍ID或模糊搜索队伍名称,搜索时返回最多QueryCnt个数的队伍 - LoopIndex = 0 #(DWORD LoopIndex)// 服务器检索到的索引,列表下拉时下一个查询包的StartIndex从这个LoopIndex开始 - TeamCount = 0 #(BYTE TeamCount)// 如果返回的队伍数小于QueryCnt,代表服务器已经没有满足条件的队伍了,列表再下拉时不再发查询包 - TeamList = list() #(vector<tagGCFuncTeam> TeamList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x22 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.StartIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.QueryCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.HaveSpace,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IDLimitType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SearchLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SearchMsg,_pos = CommFunc.ReadString(_lpData, _pos,self.SearchLen) - self.LoopIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TeamCount): - temTeamList = tagGCFuncTeam() - _pos = temTeamList.ReadData(_lpData, _pos) - self.TeamList.append(temTeamList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x22 - self.FuncMapID = 0 - self.FuncMapEx = 0 - self.StartIndex = 0 - self.QueryCnt = 0 - self.HaveSpace = 0 - self.IDLimitType = 0 - self.SearchLen = 0 - self.SearchMsg = "" - self.LoopIndex = 0 - self.TeamCount = 0 - self.TeamList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 - length += 4 - length += 1 - length += 1 - length += 1 - length += 1 - length += len(self.SearchMsg) - length += 4 - length += 1 - for i in range(self.TeamCount): - length += self.TeamList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FuncMapID) - data = CommFunc.WriteDWORD(data, self.FuncMapEx) - data = CommFunc.WriteDWORD(data, self.StartIndex) - data = CommFunc.WriteBYTE(data, self.QueryCnt) - data = CommFunc.WriteBYTE(data, self.HaveSpace) - data = CommFunc.WriteBYTE(data, self.IDLimitType) - data = CommFunc.WriteBYTE(data, self.SearchLen) - data = CommFunc.WriteString(data, self.SearchLen, self.SearchMsg) - data = CommFunc.WriteDWORD(data, self.LoopIndex) - data = CommFunc.WriteBYTE(data, self.TeamCount) - for i in range(self.TeamCount): - data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FuncMapID:%d, - FuncMapEx:%d, - StartIndex:%d, - QueryCnt:%d, - HaveSpace:%d, - IDLimitType:%d, - SearchLen:%d, - SearchMsg:%s, - LoopIndex:%d, - TeamCount:%d, - TeamList:%s - '''\ - %( - self.Head.OutputString(), - self.FuncMapID, - self.FuncMapEx, - self.StartIndex, - self.QueryCnt, - self.HaveSpace, - self.IDLimitType, - self.SearchLen, - self.SearchMsg, - self.LoopIndex, - self.TeamCount, - "..." - ) - return DumpString - - -m_NAtagGCFuncTeamList=tagGCFuncTeamList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamList.Head.Cmd,m_NAtagGCFuncTeamList.Head.SubCmd))] = m_NAtagGCFuncTeamList - - -#------------------------------------------------------ -# B9 20 功能队伍刷新 #tagGCFuncTeamRefresh - -class tagGCFuncTeamRefreshApply(Structure): - ServerID = 0 #(DWORD ServerID) - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower)// 战力,求余亿 - FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ServerID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - return data - - def OutputString(self): - DumpString = ''' - ServerID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - FightPowerEx:%d - '''\ - %( - self.ServerID, - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic, - self.FightPower, - self.FightPowerEx - ) - return DumpString - - -class tagGCFuncTeamRefreshMem(Structure): - ServerID = 0 #(DWORD ServerID) - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - RealmLV = 0 #(WORD RealmLV)// 玩家境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower)// 战力,求余亿 - FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 - OfflineValue = 0 #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; - Value1 = 0 #(DWORD Value1)//值1 - Value2 = 0 #(DWORD Value2)//值2 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.ServerID = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.OfflineValue = 0 - self.Value1 = 0 - self.Value2 = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 2 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.OfflineValue) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - return data - - def OutputString(self): - DumpString = ''' - ServerID:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - FightPowerEx:%d, - OfflineValue:%d, - Value1:%d, - Value2:%d - '''\ - %( - self.ServerID, - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.RealmLV, - self.Face, - self.FacePic, - self.FightPower, - self.FightPowerEx, - self.OfflineValue, - self.Value1, - self.Value2 - ) - return DumpString - - -class tagGCFuncTeamRefresh(Structure): - Head = tagHead() - TeamID = 0 #(DWORD TeamID) - CreateTime = 0 #(DWORD CreateTime)//创建队伍时间戳 - FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID - FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级 - NameLen = 0 #(BYTE NameLen) - TeamName = "" #(String TeamName)// 队伍名称 - CaptainID = 0 #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID - MinLV = 0 #(WORD MinLV)//最低等级限制 - MinFightPower = 0 #(DWORD MinFightPower)//最低战力限制,求余亿 - MinFightPowerEx = 0 #(DWORD MinFightPowerEx)//最低战力限制,整除亿 - ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 - NeedCheck = 0 #(BYTE NeedCheck)//是否需要审核 - Value1 = 0 #(DWORD Value1)//值1 - Value2 = 0 #(DWORD Value2)//值2 - MemberCount = 0 #(BYTE MemberCount) - MemberList = list() #(vector<tagGCFuncTeamRefreshMem> MemberList)// 成员列表 - ApplyCount = 0 #(WORD ApplyCount) - ApplyIDList = list() #(vector<DWORD> ApplyIDList)// 申请玩家ID列表 - ApplyInfoList = list() #(vector<tagGCFuncTeamRefreshApply> ApplyInfoList)// 申请玩家明细列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x20 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemberCount): - temMemberList = tagGCFuncTeamRefreshMem() - _pos = temMemberList.ReadData(_lpData, _pos) - self.MemberList.append(temMemberList) - self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.ApplyCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.ApplyIDList.append(value) - for i in range(self.ApplyCount): - temApplyInfoList = tagGCFuncTeamRefreshApply() - _pos = temApplyInfoList.ReadData(_lpData, _pos) - self.ApplyInfoList.append(temApplyInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x20 - self.TeamID = 0 - self.CreateTime = 0 - self.FuncMapID = 0 - self.FuncMapEx = 0 - self.NameLen = 0 - self.TeamName = "" - self.CaptainID = 0 - self.MinLV = 0 - self.MinFightPower = 0 - self.MinFightPowerEx = 0 - self.ServerOnly = 0 - self.NeedCheck = 0 - self.Value1 = 0 - self.Value2 = 0 - self.MemberCount = 0 - self.MemberList = list() - self.ApplyCount = 0 - self.ApplyIDList = list() - self.ApplyInfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.TeamName) - length += 4 - length += 2 - length += 4 - length += 4 - length += 1 - length += 1 - length += 4 - length += 4 - length += 1 - for i in range(self.MemberCount): - length += self.MemberList[i].GetLength() - length += 2 - length += 4 * self.ApplyCount - for i in range(self.ApplyCount): - length += self.ApplyInfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TeamID) - data = CommFunc.WriteDWORD(data, self.CreateTime) - data = CommFunc.WriteDWORD(data, self.FuncMapID) - data = CommFunc.WriteDWORD(data, self.FuncMapEx) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.TeamName) - data = CommFunc.WriteDWORD(data, self.CaptainID) - data = CommFunc.WriteWORD(data, self.MinLV) - data = CommFunc.WriteDWORD(data, self.MinFightPower) - data = CommFunc.WriteDWORD(data, self.MinFightPowerEx) - data = CommFunc.WriteBYTE(data, self.ServerOnly) - data = CommFunc.WriteBYTE(data, self.NeedCheck) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - data = CommFunc.WriteBYTE(data, self.MemberCount) - for i in range(self.MemberCount): - data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) - data = CommFunc.WriteWORD(data, self.ApplyCount) - for i in range(self.ApplyCount): - data = CommFunc.WriteDWORD(data, self.ApplyIDList[i]) - for i in range(self.ApplyCount): - data = CommFunc.WriteString(data, self.ApplyInfoList[i].GetLength(), self.ApplyInfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TeamID:%d, - CreateTime:%d, - FuncMapID:%d, - FuncMapEx:%d, - NameLen:%d, - TeamName:%s, - CaptainID:%d, - MinLV:%d, - MinFightPower:%d, - MinFightPowerEx:%d, - ServerOnly:%d, - NeedCheck:%d, - Value1:%d, - Value2:%d, - MemberCount:%d, - MemberList:%s, - ApplyCount:%d, - ApplyIDList:%s, - ApplyInfoList:%s - '''\ - %( - self.Head.OutputString(), - self.TeamID, - self.CreateTime, - self.FuncMapID, - self.FuncMapEx, - self.NameLen, - self.TeamName, - self.CaptainID, - self.MinLV, - self.MinFightPower, - self.MinFightPowerEx, - self.ServerOnly, - self.NeedCheck, - self.Value1, - self.Value2, - self.MemberCount, - "...", - self.ApplyCount, - "...", - "..." - ) - return DumpString - - -m_NAtagGCFuncTeamRefresh=tagGCFuncTeamRefresh() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamRefresh.Head.Cmd,m_NAtagGCFuncTeamRefresh.Head.SubCmd))] = m_NAtagGCFuncTeamRefresh - - -#------------------------------------------------------ -# B9 01 收到邀请加入队伍信息 #tagGCInviteJoinTeamInfo - -class tagGCInviteJoinTeamInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - TagMapID = 0 #(DWORD TagMapID)// 目标地图 - TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x01 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x01 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.TagMapID = 0 - self.TagMapEx = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 1 - length += 2 - length += 4 - length += 2 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.TagMapID) - data = CommFunc.WriteWORD(data, self.TagMapEx) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - TagMapID:%d, - TagMapEx:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.TagMapID, - self.TagMapEx - ) - return DumpString - - -m_NAtagGCInviteJoinTeamInfo=tagGCInviteJoinTeamInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCInviteJoinTeamInfo.Head.Cmd,m_NAtagGCInviteJoinTeamInfo.Head.SubCmd))] = m_NAtagGCInviteJoinTeamInfo - - -#------------------------------------------------------ -# B9 09 组队目标队伍信息列表 #tagGCTagMapTeamList - -class tagGCTagMapTeam(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 队长名称 - LV = 0 #(WORD LV)// 队长等级 - Job = 0 #(BYTE Job)// 队长职业 - JobLevel = 0 #(BYTE JobLevel)// 队长职业阶级 - RealmLV = 0 #(WORD RealmLV)// 队长境界等级 - MemberCount = 0 #(BYTE MemberCount)// 队伍人数 - ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 - ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.MemberCount = 0 - self.ReqMinLV = 0 - self.ReqMaxLV = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 2 - length += 1 - length += 1 - length += 2 - length += 1 - length += 2 - length += 2 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteBYTE(data, self.MemberCount) - data = CommFunc.WriteWORD(data, self.ReqMinLV) - data = CommFunc.WriteWORD(data, self.ReqMaxLV) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - MemberCount:%d, - ReqMinLV:%d, - ReqMaxLV:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.MemberCount, - self.ReqMinLV, - self.ReqMaxLV - ) - return DumpString - - -class tagGCTagMapTeamList(Structure): - Head = tagHead() - TagMapID = 0 #(DWORD TagMapID)// 目标地图 - TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 - IsTagEx = 0 #(BYTE IsTagEx)// 是否对应目标扩展的; 0否1是 - MatchState = 0 #(BYTE MatchState)// 0-全部;1-匹配中的; - TeamCount = 0 #(BYTE TeamCount) - TeamList = list() #(vector<tagGCTagMapTeam> TeamList)// 队伍列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.IsTagEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TeamCount): - temTeamList = tagGCTagMapTeam() - _pos = temTeamList.ReadData(_lpData, _pos) - self.TeamList.append(temTeamList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x09 - self.TagMapID = 0 - self.TagMapEx = 0 - self.IsTagEx = 0 - self.MatchState = 0 - self.TeamCount = 0 - self.TeamList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += 1 - length += 1 - length += 1 - for i in range(self.TeamCount): - length += self.TeamList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TagMapID) - data = CommFunc.WriteWORD(data, self.TagMapEx) - data = CommFunc.WriteBYTE(data, self.IsTagEx) - data = CommFunc.WriteBYTE(data, self.MatchState) - data = CommFunc.WriteBYTE(data, self.TeamCount) - for i in range(self.TeamCount): - data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TagMapID:%d, - TagMapEx:%d, - IsTagEx:%d, - MatchState:%d, - TeamCount:%d, - TeamList:%s - '''\ - %( - self.Head.OutputString(), - self.TagMapID, - self.TagMapEx, - self.IsTagEx, - self.MatchState, - self.TeamCount, - "..." - ) - return DumpString - - -m_NAtagGCTagMapTeamList=tagGCTagMapTeamList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagMapTeamList.Head.Cmd,m_NAtagGCTagMapTeamList.Head.SubCmd))] = m_NAtagGCTagMapTeamList - - -#------------------------------------------------------ -# B9 21 查找玩家功能队伍结果 #tagGCQueryPlayerFuncTeamRet - -class tagGCQueryPlayerFuncTeamRet(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("FuncMapID", c_int), # 功能地图ID或自定义的活动功能ID - ("TeamID", c_int), # 玩家所属队伍ID,目前只同步0的情况,如果玩家有队伍统一B920封包同步处理 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x21 - 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 = 0xB9 - self.SubCmd = 0x21 - self.FuncMapID = 0 - self.TeamID = 0 - return - - def GetLength(self): - return sizeof(tagGCQueryPlayerFuncTeamRet) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 21 查找玩家功能队伍结果 //tagGCQueryPlayerFuncTeamRet: - Cmd:%s, - SubCmd:%s, - FuncMapID:%d, - TeamID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.FuncMapID, - self.TeamID - ) - return DumpString - - -m_NAtagGCQueryPlayerFuncTeamRet=tagGCQueryPlayerFuncTeamRet() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryPlayerFuncTeamRet.Cmd,m_NAtagGCQueryPlayerFuncTeamRet.SubCmd))] = m_NAtagGCQueryPlayerFuncTeamRet - - -#------------------------------------------------------ -# B9 08 推荐组队的附近玩家信息 #tagGCRecommendNearbyPlayerList - -class tagGCRecommendNearbyPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 1 - length += 2 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCRecommendNearbyPlayerList(Structure): - Head = tagHead() - PlayerCount = 0 #(BYTE PlayerCount) - PlayerList = list() #(vector<tagGCRecommendNearbyPlayer> PlayerList)// 推荐玩家列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PlayerCount): - temPlayerList = tagGCRecommendNearbyPlayer() - _pos = temPlayerList.ReadData(_lpData, _pos) - self.PlayerList.append(temPlayerList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x08 - self.PlayerCount = 0 - self.PlayerList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.PlayerCount): - length += self.PlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.PlayerCount) - for i in range(self.PlayerCount): - data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerCount:%d, - PlayerList:%s - '''\ - %( - self.Head.OutputString(), - self.PlayerCount, - "..." - ) - return DumpString - - -m_NAtagGCRecommendNearbyPlayerList=tagGCRecommendNearbyPlayerList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendNearbyPlayerList.Head.Cmd,m_NAtagGCRecommendNearbyPlayerList.Head.SubCmd))] = m_NAtagGCRecommendNearbyPlayerList - - -#------------------------------------------------------ -# B9 07 收到请求加入队伍信息 #tagGCRequestJoinTeam - -class tagGCRequestJoinTeam(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)// 发起请求的玩家ID - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 发起请求的玩家名,size = NameLen - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x07 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x07 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += len(self.Name) - length += 2 - length += 1 - length += 1 - length += 2 - 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.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - NameLen:%d, - Name:%s, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.NameLen, - self.Name, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -m_NAtagGCRequestJoinTeam=tagGCRequestJoinTeam() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRequestJoinTeam.Head.Cmd,m_NAtagGCRequestJoinTeam.Head.SubCmd))] = m_NAtagGCRequestJoinTeam - - -#------------------------------------------------------ -# B9 04 刷新场景队伍回应包 #tagGCSceneTeamRefresh - -class tagGCSceneTeam(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 队长名称 - LV = 0 #(WORD LV)// 队长等级 - Job = 0 #(BYTE Job)// 队长职业 - JobLevel = 0 #(BYTE JobLevel)// 队长职业阶级 - RealmLV = 0 #(WORD RealmLV)// 队长境界等级 - MemberCount = 0 #(BYTE MemberCount)// 队伍人数 - TagMapID = 0 #(DWORD TagMapID)// 目标地图 - TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 - ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 - ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.MemberCount = 0 - self.TagMapID = 0 - self.TagMapEx = 0 - self.ReqMinLV = 0 - self.ReqMaxLV = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 2 - length += 1 - length += 1 - length += 2 - length += 1 - length += 4 - length += 2 - length += 2 - length += 2 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteBYTE(data, self.MemberCount) - data = CommFunc.WriteDWORD(data, self.TagMapID) - data = CommFunc.WriteWORD(data, self.TagMapEx) - data = CommFunc.WriteWORD(data, self.ReqMinLV) - data = CommFunc.WriteWORD(data, self.ReqMaxLV) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - MemberCount:%d, - TagMapID:%d, - TagMapEx:%d, - ReqMinLV:%d, - ReqMaxLV:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.MemberCount, - self.TagMapID, - self.TagMapEx, - self.ReqMinLV, - self.ReqMaxLV - ) - return DumpString - - -class tagGCSceneTeamRefresh(Structure): - Head = tagHead() - TeamCount = 0 #(BYTE TeamCount) - SceneTeamList = list() #(vector<tagGCSceneTeam> SceneTeamList)// 场景队伍列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TeamCount): - temSceneTeamList = tagGCSceneTeam() - _pos = temSceneTeamList.ReadData(_lpData, _pos) - self.SceneTeamList.append(temSceneTeamList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x04 - self.TeamCount = 0 - self.SceneTeamList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.TeamCount): - length += self.SceneTeamList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.TeamCount) - for i in range(self.TeamCount): - data = CommFunc.WriteString(data, self.SceneTeamList[i].GetLength(), self.SceneTeamList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TeamCount:%d, - SceneTeamList:%s - '''\ - %( - self.Head.OutputString(), - self.TeamCount, - "..." - ) - return DumpString - - -m_NAtagGCSceneTeamRefresh=tagGCSceneTeamRefresh() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSceneTeamRefresh.Head.Cmd,m_NAtagGCSceneTeamRefresh.Head.SubCmd))] = m_NAtagGCSceneTeamRefresh - - -#------------------------------------------------------ -# B9 11 队员进入副本准备状态刷新 #tagGCTeamEnterFBPrepare - -class tagGCTeamMemPrepareState(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), - ("PrepareState", c_ubyte), # 状态,0-未准备,1-已准备,2-拒绝 - ] - - 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.PlayerID = 0 - self.PrepareState = 0 - return - - def GetLength(self): - return sizeof(tagGCTeamMemPrepareState) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 11 队员进入副本准备状态刷新 //tagGCTeamEnterFBPrepare: - PlayerID:%d, - PrepareState:%d - '''\ - %( - self.PlayerID, - self.PrepareState - ) - return DumpString - - -class tagGCTeamEnterFBPrepare(Structure): - Head = tagHead() - TagMapID = 0 #(DWORD TagMapID)// 目标地图,不一定是队伍目标 - TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 - IsPrepareErr = 0 #(BYTE IsPrepareErr)// 是否准备异常(在所有队员都准备好后准备传入副本出现有队员最终不能进入的情况时该值为1) - MemCount = 0 #(BYTE MemCount) - MemStateList = list() #(vector<tagGCTeamMemPrepareState> MemStateList)// 队员状态列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x11 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.IsPrepareErr,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemCount): - temMemStateList = tagGCTeamMemPrepareState() - _pos = temMemStateList.ReadData(_lpData, _pos) - self.MemStateList.append(temMemStateList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x11 - self.TagMapID = 0 - self.TagMapEx = 0 - self.IsPrepareErr = 0 - self.MemCount = 0 - self.MemStateList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += 1 - length += 1 - for i in range(self.MemCount): - length += self.MemStateList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TagMapID) - data = CommFunc.WriteWORD(data, self.TagMapEx) - data = CommFunc.WriteBYTE(data, self.IsPrepareErr) - data = CommFunc.WriteBYTE(data, self.MemCount) - for i in range(self.MemCount): - data = CommFunc.WriteString(data, self.MemStateList[i].GetLength(), self.MemStateList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TagMapID:%d, - TagMapEx:%d, - IsPrepareErr:%d, - MemCount:%d, - MemStateList:%s - '''\ - %( - self.Head.OutputString(), - self.TagMapID, - self.TagMapEx, - self.IsPrepareErr, - self.MemCount, - "..." - ) - return DumpString - - -m_NAtagGCTeamEnterFBPrepare=tagGCTeamEnterFBPrepare() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamEnterFBPrepare.Head.Cmd,m_NAtagGCTeamEnterFBPrepare.Head.SubCmd))] = m_NAtagGCTeamEnterFBPrepare - - -#------------------------------------------------------ -# B9 03 队伍信息变更 #tagGCTeamInfoChange - -class tagGCTeamInfoChange(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("TagMapID", c_int), # 目标地图 - ("TagMapEx", c_ushort), # 目标地图扩展 - ("ReqMinLV", c_ushort), # 队员最低等级限制 - ("ReqMaxLV", c_ushort), # 队员最高等级限制 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x03 - 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 = 0xB9 - self.SubCmd = 0x03 - self.TagMapID = 0 - self.TagMapEx = 0 - self.ReqMinLV = 0 - self.ReqMaxLV = 0 - return - - def GetLength(self): - return sizeof(tagGCTeamInfoChange) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 03 队伍信息变更 //tagGCTeamInfoChange: - Cmd:%s, - SubCmd:%s, - TagMapID:%d, - TagMapEx:%d, - ReqMinLV:%d, - ReqMaxLV:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.TagMapID, - self.TagMapEx, - self.ReqMinLV, - self.ReqMaxLV - ) - return DumpString - - -m_NAtagGCTeamInfoChange=tagGCTeamInfoChange() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamInfoChange.Cmd,m_NAtagGCTeamInfoChange.SubCmd))] = m_NAtagGCTeamInfoChange - - -#------------------------------------------------------ -# B9 10 队伍或玩家匹配状态变更 #tagGCTeamMatchState - -class tagGCTeamMatchState(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsMatching", c_ubyte), # 是否匹配中, 0否1是 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x10 - 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 = 0xB9 - self.SubCmd = 0x10 - self.IsMatching = 0 - return - - def GetLength(self): - return sizeof(tagGCTeamMatchState) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 10 队伍或玩家匹配状态变更 //tagGCTeamMatchState: - Cmd:%s, - SubCmd:%s, - IsMatching:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.IsMatching - ) - return DumpString - - -m_NAtagGCTeamMatchState=tagGCTeamMatchState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMatchState.Cmd,m_NAtagGCTeamMatchState.SubCmd))] = m_NAtagGCTeamMatchState - - -#------------------------------------------------------ -# B9 02 队伍成员信息刷新 #tagGCTeamMemberInfo - -class tagGCTeamMember(Structure): - Index = 0 #(BYTE Index)// 队员编号 - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - Name = "" #(String Name)// 玩家名,size = NameLen - MemberLV = 0 #(BYTE MemberLV)// 成员等级, 0-普通成员, 2-队长 - LV = 0 #(WORD LV)// 玩家等级 - Job = 0 #(BYTE Job)// 玩家职业 - JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 - RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - PlayerState = 0 #(BYTE PlayerState)// 0: 离线 1:在线 - MapID = 0 #(DWORD MapID)// 地图ID - LineID = 0 #(BYTE LineID)// 线路ID - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.MemberLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Index = 0 - self.PlayerID = 0 - self.NameLen = 0 - self.Name = "" - self.MemberLV = 0 - self.LV = 0 - self.Job = 0 - self.JobLevel = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.PlayerState = 0 - self.MapID = 0 - self.LineID = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 1 - length += len(self.Name) - length += 1 - length += 2 - length += 1 - length += 1 - length += 2 - length += 4 - length += 4 - length += 1 - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.Index) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.Name) - data = CommFunc.WriteBYTE(data, self.MemberLV) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteBYTE(data, self.JobLevel) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteBYTE(data, self.PlayerState) - data = CommFunc.WriteDWORD(data, self.MapID) - data = CommFunc.WriteBYTE(data, self.LineID) - return data - - def OutputString(self): - DumpString = ''' - Index:%d, - PlayerID:%d, - NameLen:%d, - Name:%s, - MemberLV:%d, - LV:%d, - Job:%d, - JobLevel:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - PlayerState:%d, - MapID:%d, - LineID:%d - '''\ - %( - self.Index, - self.PlayerID, - self.NameLen, - self.Name, - self.MemberLV, - self.LV, - self.Job, - self.JobLevel, - self.RealmLV, - self.Face, - self.FacePic, - self.PlayerState, - self.MapID, - self.LineID - ) - return DumpString - - -class tagGCTeamMemberInfo(Structure): - Head = tagHead() - TeamID = 0 #(DWORD TeamID) - TagMapID = 0 #(DWORD TagMapID)// 目标地图 - TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 - ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 - ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 - MemberCount = 0 #(BYTE MemberCount) - MemberList = list() #(vector<tagGCTeamMember> MemberList)// 成员列表, size = MemberCount - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x02 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemberCount): - temMemberList = tagGCTeamMember() - _pos = temMemberList.ReadData(_lpData, _pos) - self.MemberList.append(temMemberList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x02 - self.TeamID = 0 - self.TagMapID = 0 - self.TagMapEx = 0 - self.ReqMinLV = 0 - self.ReqMaxLV = 0 - self.MemberCount = 0 - self.MemberList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 - length += 2 - length += 2 - length += 2 - length += 1 - for i in range(self.MemberCount): - length += self.MemberList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TeamID) - data = CommFunc.WriteDWORD(data, self.TagMapID) - data = CommFunc.WriteWORD(data, self.TagMapEx) - data = CommFunc.WriteWORD(data, self.ReqMinLV) - data = CommFunc.WriteWORD(data, self.ReqMaxLV) - data = CommFunc.WriteBYTE(data, self.MemberCount) - for i in range(self.MemberCount): - data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TeamID:%d, - TagMapID:%d, - TagMapEx:%d, - ReqMinLV:%d, - ReqMaxLV:%d, - MemberCount:%d, - MemberList:%s - '''\ - %( - self.Head.OutputString(), - self.TeamID, - self.TagMapID, - self.TagMapEx, - self.ReqMinLV, - self.ReqMaxLV, - self.MemberCount, - "..." - ) - return DumpString - - -m_NAtagGCTeamMemberInfo=tagGCTeamMemberInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberInfo.Head.Cmd,m_NAtagGCTeamMemberInfo.Head.SubCmd))] = m_NAtagGCTeamMemberInfo - - -#------------------------------------------------------ -# B9 05 队伍成员属性刷新 #tagGCTeamMemberRefreshProperty - -class tagGCTeamMemberRefreshProperty(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PlayerID", c_int), - ("RefreshType", c_ubyte), #刷新类型,同0418属性类型 - ("Value", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB9 - self.SubCmd = 0x05 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB9 - self.SubCmd = 0x05 - self.PlayerID = 0 - self.RefreshType = 0 - self.Value = 0 - return - - def GetLength(self): - return sizeof(tagGCTeamMemberRefreshProperty) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B9 05 队伍成员属性刷新 //tagGCTeamMemberRefreshProperty: - Cmd:%s, - SubCmd:%s, - PlayerID:%d, - RefreshType:%d, - Value:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PlayerID, - self.RefreshType, - self.Value - ) - return DumpString - - -m_NAtagGCTeamMemberRefreshProperty=tagGCTeamMemberRefreshProperty() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberRefreshProperty.Cmd,m_NAtagGCTeamMemberRefreshProperty.SubCmd))] = m_NAtagGCTeamMemberRefreshProperty - - -#------------------------------------------------------ -# B9 12 队员功能数据查询结果 #tagGCTeamMemFuncDataList - -class tagGCTeamMemFuncData(Structure): - PlayerID = 0 #(DWORD PlayerID) - DataLen = 0 #(WORD DataLen) - MemFuncData = "" #(String MemFuncData)// 队员对应功能数据查询结果 - 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.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MemFuncData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.DataLen = 0 - self.MemFuncData = "" - return - - def GetLength(self): - length = 0 - length += 4 - length += 2 - length += len(self.MemFuncData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteWORD(data, self.DataLen) - data = CommFunc.WriteString(data, self.DataLen, self.MemFuncData) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - DataLen:%d, - MemFuncData:%s - '''\ - %( - self.PlayerID, - self.DataLen, - self.MemFuncData - ) - return DumpString - - -class tagGCTeamMemFuncDataList(Structure): - Head = tagHead() - TeamMemFuncType = 0 #(BYTE TeamMemFuncType)// 查询队员的功能数据类型 - MemCount = 0 #(BYTE MemCount) - MemFuncDataList = list() #(vector<tagGCTeamMemFuncData> MemFuncDataList)// 数据列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x12 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.TeamMemFuncType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemCount): - temMemFuncDataList = tagGCTeamMemFuncData() - _pos = temMemFuncDataList.ReadData(_lpData, _pos) - self.MemFuncDataList.append(temMemFuncDataList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB9 - self.Head.SubCmd = 0x12 - self.TeamMemFuncType = 0 - self.MemCount = 0 - self.MemFuncDataList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.MemCount): - length += self.MemFuncDataList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.TeamMemFuncType) - data = CommFunc.WriteBYTE(data, self.MemCount) - for i in range(self.MemCount): - data = CommFunc.WriteString(data, self.MemFuncDataList[i].GetLength(), self.MemFuncDataList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - TeamMemFuncType:%d, - MemCount:%d, - MemFuncDataList:%s - '''\ - %( - self.Head.OutputString(), - self.TeamMemFuncType, - self.MemCount, - "..." - ) - return DumpString - - -m_NAtagGCTeamMemFuncDataList=tagGCTeamMemFuncDataList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemFuncDataList.Head.Cmd,m_NAtagGCTeamMemFuncDataList.Head.SubCmd))] = m_NAtagGCTeamMemFuncDataList - - -#------------------------------------------------------ -# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo - -class tagGCChampionshipGuessPlayerPri(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), # 目标玩家ID - ("MoneyTotal", c_int), # 已投注该玩家货币总数 - ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;1-代表第一名 - ] - - 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.PlayerID = 0 - self.MoneyTotal = 0 - self.GuessRank = 0 - return - - def GetLength(self): - return sizeof(tagGCChampionshipGuessPlayerPri) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo: - PlayerID:%d, - MoneyTotal:%d, - GuessRank:%d - '''\ - %( - self.PlayerID, - self.MoneyTotal, - self.GuessRank - ) - return DumpString - - -class tagGCChampionshipGuessPriList(Structure): - GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 - PlayerCount = 0 #(BYTE PlayerCount) - GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PlayerCount): - temGuessPlayerList = tagGCChampionshipGuessPlayerPri() - _pos = temGuessPlayerList.ReadData(_lpData, _pos) - self.GuessPlayerList.append(temGuessPlayerList) - return _pos - - def Clear(self): - self.GuessType = 0 - self.PlayerCount = 0 - self.GuessPlayerList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - for i in range(self.PlayerCount): - length += self.GuessPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.GuessType) - data = CommFunc.WriteBYTE(data, self.PlayerCount) - for i in range(self.PlayerCount): - data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - GuessType:%d, - PlayerCount:%d, - GuessPlayerList:%s - '''\ - %( - self.GuessType, - self.PlayerCount, - "..." - ) - return DumpString - - -class tagGCChampionshipGuessPriInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID - Count = 0 #(BYTE Count) - GuessList = list() #(vector<tagGCChampionshipGuessPriList> GuessList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x23 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temGuessList = tagGCChampionshipGuessPriList() - _pos = temGuessList.ReadData(_lpData, _pos) - self.GuessList.append(temGuessList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x23 - self.ZoneID = 0 - self.Count = 0 - self.GuessList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.Count): - length += self.GuessList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - Count:%d, - GuessList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo - - -#------------------------------------------------------ -# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo - -class tagGCChampionshipGuessPlayerPub(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), # 目标玩家ID - ("SupportCount", c_int), # 支持人数 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.PlayerID = 0 - self.SupportCount = 0 - return - - def GetLength(self): - return sizeof(tagGCChampionshipGuessPlayerPub) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo: - PlayerID:%d, - SupportCount:%d - '''\ - %( - self.PlayerID, - self.SupportCount - ) - return DumpString - - -class tagGCChampionshipGuessPubList(Structure): - GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 - PlayerCount = 0 #(BYTE PlayerCount) - GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PlayerCount): - temGuessPlayerList = tagGCChampionshipGuessPlayerPub() - _pos = temGuessPlayerList.ReadData(_lpData, _pos) - self.GuessPlayerList.append(temGuessPlayerList) - return _pos - - def Clear(self): - self.GuessType = 0 - self.PlayerCount = 0 - self.GuessPlayerList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - for i in range(self.PlayerCount): - length += self.GuessPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.GuessType) - data = CommFunc.WriteBYTE(data, self.PlayerCount) - for i in range(self.PlayerCount): - data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - GuessType:%d, - PlayerCount:%d, - GuessPlayerList:%s - '''\ - %( - self.GuessType, - self.PlayerCount, - "..." - ) - return DumpString - - -class tagGCChampionshipGuessPubInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID - Count = 0 #(BYTE Count) - GuessList = list() #(vector<tagGCChampionshipGuessPubList> GuessList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x22 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temGuessList = tagGCChampionshipGuessPubList() - _pos = temGuessList.ReadData(_lpData, _pos) - self.GuessList.append(temGuessList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x22 - self.ZoneID = 0 - self.Count = 0 - self.GuessList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.Count): - length += self.GuessList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - Count:%d, - GuessList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo - - -#------------------------------------------------------ -# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet - -class tagGCChampionshipOfficialApplyReplyRet(Structure): - Head = tagHead() - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 界主玩家名 - MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID - OfficialID = 0 #(WORD OfficialID)//申请官职ID - IsOK = 0 #(BYTE IsOK)//是否同意;1-是;0-否 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x19 - 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.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x19 - self.NameLen = 0 - self.PlayerName = "" - self.MainOfficialID = 0 - self.OfficialID = 0 - self.IsOK = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.PlayerName) - length += 2 - length += 2 - 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.WriteWORD(data, self.MainOfficialID) - data = CommFunc.WriteWORD(data, self.OfficialID) - data = CommFunc.WriteBYTE(data, self.IsOK) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - NameLen:%d, - PlayerName:%s, - MainOfficialID:%d, - OfficialID:%d, - IsOK:%d - '''\ - %( - self.Head.OutputString(), - self.NameLen, - self.PlayerName, - self.MainOfficialID, - self.OfficialID, - self.IsOK - ) - return DumpString - - -m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet - - -#------------------------------------------------------ -# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo - -class tagGCChampionshipOfficialChallengeRecord(Structure): - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - ChallengeTime = 0 #(DWORD ChallengeTime)//挑战时间戳 - Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜; - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.NameLen = 0 - self.PlayerName = "" - self.ChallengeTime = 0 - self.Ret = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += len(self.PlayerName) - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteDWORD(data, self.ChallengeTime) - data = CommFunc.WriteBYTE(data, self.Ret) - return data - - def OutputString(self): - DumpString = ''' - NameLen:%d, - PlayerName:%s, - ChallengeTime:%d, - Ret:%d - '''\ - %( - self.NameLen, - self.PlayerName, - self.ChallengeTime, - self.Ret - ) - return DumpString - - -class tagGCChampionshipOfficialChallengeRecordInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 分区ID - MainOfficialID = 0 #(WORD MainOfficialID)// 界主官职ID - OfficialID = 0 #(WORD OfficialID)// 记录的官职ID - RecordCount = 0 #(BYTE RecordCount)// 挑战记录数 - RecordList = list() #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x21 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RecordCount): - temRecordList = tagGCChampionshipOfficialChallengeRecord() - _pos = temRecordList.ReadData(_lpData, _pos) - self.RecordList.append(temRecordList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x21 - self.ZoneID = 0 - self.MainOfficialID = 0 - self.OfficialID = 0 - self.RecordCount = 0 - self.RecordList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 2 - length += 2 - length += 1 - for i in range(self.RecordCount): - length += self.RecordList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteWORD(data, self.MainOfficialID) - data = CommFunc.WriteWORD(data, self.OfficialID) - data = CommFunc.WriteBYTE(data, self.RecordCount) - for i in range(self.RecordCount): - data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - MainOfficialID:%d, - OfficialID:%d, - RecordCount:%d, - RecordList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.MainOfficialID, - self.OfficialID, - self.RecordCount, - "..." - ) - return DumpString - - -m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo - - -#------------------------------------------------------ -# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet - -class tagGCChampionshipOfficialChallengeRet(Structure): - Head = tagHead() - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家 - MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID - OfficialID = 0 #(WORD OfficialID)//挑战的官职ID - Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x20 - 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.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x20 - self.NameLen = 0 - self.PlayerName = "" - self.MainOfficialID = 0 - self.OfficialID = 0 - self.Ret = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.PlayerName) - length += 2 - length += 2 - 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.WriteWORD(data, self.MainOfficialID) - data = CommFunc.WriteWORD(data, self.OfficialID) - data = CommFunc.WriteBYTE(data, self.Ret) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - NameLen:%d, - PlayerName:%s, - MainOfficialID:%d, - OfficialID:%d, - Ret:%d - '''\ - %( - self.Head.OutputString(), - self.NameLen, - self.PlayerName, - self.MainOfficialID, - self.OfficialID, - self.Ret - ) - return DumpString - - -m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet - - -#------------------------------------------------------ -# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo - -class tagGCChampionshipOfficialPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID)// 玩家ID - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV) - FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 - RealmLV = 0 #(WORD RealmLV) - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 1 - length += 2 - length += 4 - length += 4 - length += 2 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - Job:%d, - LV:%d, - FightPower:%d, - FightPowerEx:%d, - RealmLV:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.Job, - self.LV, - self.FightPower, - self.FightPowerEx, - self.RealmLV, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCChampionshipOfficial(Structure): - OfficialID = 0 #(DWORD OfficialID)// 官职ID - LastDismissJuniorTime = 0 #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD - WorshipCount = 0 #(DWORD WorshipCount)// 被膜拜次数 - WorshipDouble = 0 #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用 - OfficialPlayer=tagGCChampionshipOfficialPlayer() #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有 - ApplyPlayerCount = 0 #(BYTE ApplyPlayerCount)// 申请该仙官玩家数 - ApplyPlayerList = list() #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) - _pos = self.OfficialPlayer.ReadData(_lpData,_pos) - self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ApplyPlayerCount): - temApplyPlayerList = tagGCChampionshipOfficialPlayer() - _pos = temApplyPlayerList.ReadData(_lpData, _pos) - self.ApplyPlayerList.append(temApplyPlayerList) - return _pos - - def Clear(self): - self.OfficialID = 0 - self.LastDismissJuniorTime = 0 - self.WorshipCount = 0 - self.WorshipDouble = 0 - self.OfficialPlayer=tagGCChampionshipOfficialPlayer() - self.OfficialPlayer.Clear() - self.ApplyPlayerCount = 0 - self.ApplyPlayerList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 4 - length += 4 - length += 1 - length += self.OfficialPlayer.GetLength() - length += 1 - for i in range(self.ApplyPlayerCount): - length += self.ApplyPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.OfficialID) - data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime) - data = CommFunc.WriteDWORD(data, self.WorshipCount) - data = CommFunc.WriteBYTE(data, self.WorshipDouble) - data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount) - for i in range(self.ApplyPlayerCount): - data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - OfficialID:%d, - LastDismissJuniorTime:%d, - WorshipCount:%d, - WorshipDouble:%d, - OfficialPlayer:%s, - ApplyPlayerCount:%d, - ApplyPlayerList:%s - '''\ - %( - self.OfficialID, - self.LastDismissJuniorTime, - self.WorshipCount, - self.WorshipDouble, - self.OfficialPlayer.OutputString(), - self.ApplyPlayerCount, - "..." - ) - return DumpString - - -class tagGCChampionshipOfficialInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 官职数据分区ID - OfficialCount = 0 #(BYTE OfficialCount)// 官职数,包含界主及所有仙官 - OfficialList = list() #(vector<tagGCChampionshipOfficial> OfficialList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x18 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.OfficialCount): - temOfficialList = tagGCChampionshipOfficial() - _pos = temOfficialList.ReadData(_lpData, _pos) - self.OfficialList.append(temOfficialList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x18 - self.ZoneID = 0 - self.OfficialCount = 0 - self.OfficialList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.OfficialCount): - length += self.OfficialList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.OfficialCount) - for i in range(self.OfficialCount): - data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - OfficialCount:%d, - OfficialList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.OfficialCount, - "..." - ) - return DumpString - - -m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo - - -#------------------------------------------------------ -# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo - -class tagGCCrossBattlefieldPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - PlayerName = "" #(char PlayerName[33]) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV)//等级 - RealmLV = 0 #(WORD RealmLV)//境界 - FightPower = 0 #(DWORD FightPower)//战力求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分 - 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.FightPowerEx,_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.FightPowerEx = 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.FightPowerEx) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - FightPower:%d, - FightPowerEx:%d - '''\ - %( - self.PlayerID, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.FightPower, - self.FightPowerEx - ) - return DumpString - - -class tagGCCrossBattlefieldBuyPlayer(Structure): - BuyPlayerID = 0 #(DWORD BuyPlayerID)//购买的玩家ID,即召集人 - Faction = 0 #(BYTE Faction)//阵营 1-红;2-蓝 - ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 - FactionPlayerCount = 0 #(BYTE FactionPlayerCount) - FactionPlayerList = list() #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.FactionPlayerCount): - temFactionPlayerList = tagGCCrossBattlefieldPlayer() - _pos = temFactionPlayerList.ReadData(_lpData, _pos) - self.FactionPlayerList.append(temFactionPlayerList) - return _pos - - def Clear(self): - self.BuyPlayerID = 0 - self.Faction = 0 - self.ServerOnly = 0 - self.FactionPlayerCount = 0 - self.FactionPlayerList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 1 - length += 1 - for i in range(self.FactionPlayerCount): - length += self.FactionPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.BuyPlayerID) - data = CommFunc.WriteBYTE(data, self.Faction) - data = CommFunc.WriteBYTE(data, self.ServerOnly) - data = CommFunc.WriteBYTE(data, self.FactionPlayerCount) - for i in range(self.FactionPlayerCount): - data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - BuyPlayerID:%d, - Faction:%d, - ServerOnly:%d, - FactionPlayerCount:%d, - FactionPlayerList:%s - '''\ - %( - self.BuyPlayerID, - self.Faction, - self.ServerOnly, - self.FactionPlayerCount, - "..." - ) - return DumpString - - -class tagGCCrossBattlefieldBuyHM(Structure): - Hour = 0 #(BYTE Hour)//战场开启时 - Minute = 0 #(BYTE Minute)//战场开启分 - BuyPlayerCount = 0 #(BYTE BuyPlayerCount) - BuyPlayerList = list() #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BuyPlayerCount): - temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer() - _pos = temBuyPlayerList.ReadData(_lpData, _pos) - self.BuyPlayerList.append(temBuyPlayerList) - return _pos - - def Clear(self): - self.Hour = 0 - self.Minute = 0 - self.BuyPlayerCount = 0 - self.BuyPlayerList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - length += 1 - for i in range(self.BuyPlayerCount): - length += self.BuyPlayerList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.Hour) - data = CommFunc.WriteBYTE(data, self.Minute) - data = CommFunc.WriteBYTE(data, self.BuyPlayerCount) - for i in range(self.BuyPlayerCount): - data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Hour:%d, - Minute:%d, - BuyPlayerCount:%d, - BuyPlayerList:%s - '''\ - %( - self.Hour, - self.Minute, - self.BuyPlayerCount, - "..." - ) - return DumpString - - -class tagGCCrossBattlefieldBuyInfo(Structure): - Head = tagHead() - HMCount = 0 #(BYTE HMCount)// 为0时清空重置,其他为增量更新 - HMBuyList = list() #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x09 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.HMCount): - temHMBuyList = tagGCCrossBattlefieldBuyHM() - _pos = temHMBuyList.ReadData(_lpData, _pos) - self.HMBuyList.append(temHMBuyList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x09 - self.HMCount = 0 - self.HMBuyList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.HMCount): - length += self.HMBuyList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.HMCount) - for i in range(self.HMCount): - data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - HMCount:%d, - HMBuyList:%s - '''\ - %( - self.Head.OutputString(), - self.HMCount, - "..." - ) - return DumpString - - -m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo - - -#------------------------------------------------------ -# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo - -class tagGCCrossBillboardData(Structure): - OrderIndex = 0 #(WORD OrderIndex)//名次索引,0代表第一名 - ID = 0 #(DWORD ID) - ID2 = 0 #(DWORD ID2) - Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 - Name2 = "" #(char Name2[65])//名字2 - Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 - Value1 = 0 #(DWORD Value1)//自定义值1 - Value2 = 0 #(DWORD Value2)//自定义值2 - Value3 = 0 #(DWORD Value3)//附加值 - Value4 = 0 #(DWORD Value4)//附加值 - Value5 = 0 #(DWORD Value5)//附加值 - Value6 = 0 #(DWORD Value6)//附加值 - Value7 = 0 #(DWORD Value7)//附加值 - Value8 = 0 #(DWORD Value8)//附加值 - CmpValue = 0 #(DWORD CmpValue)// 比较权值 - CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 - CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 - DataLen = 0 #(WORD DataLen) - UserData = "" #(String UserData)//附加 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) - self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) - return _pos - - def Clear(self): - self.OrderIndex = 0 - self.ID = 0 - self.ID2 = 0 - self.Name1 = "" - self.Name2 = "" - self.Type2 = 0 - self.Value1 = 0 - self.Value2 = 0 - self.Value3 = 0 - self.Value4 = 0 - self.Value5 = 0 - self.Value6 = 0 - self.Value7 = 0 - self.Value8 = 0 - self.CmpValue = 0 - self.CmpValue2 = 0 - self.CmpValue3 = 0 - self.DataLen = 0 - self.UserData = "" - return - - def GetLength(self): - length = 0 - length += 2 - length += 4 - length += 4 - length += 33 - length += 65 - length += 1 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 2 - length += len(self.UserData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteWORD(data, self.OrderIndex) - data = CommFunc.WriteDWORD(data, self.ID) - data = CommFunc.WriteDWORD(data, self.ID2) - data = CommFunc.WriteString(data, 33, self.Name1) - data = CommFunc.WriteString(data, 65, self.Name2) - data = CommFunc.WriteBYTE(data, self.Type2) - data = CommFunc.WriteDWORD(data, self.Value1) - data = CommFunc.WriteDWORD(data, self.Value2) - data = CommFunc.WriteDWORD(data, self.Value3) - data = CommFunc.WriteDWORD(data, self.Value4) - data = CommFunc.WriteDWORD(data, self.Value5) - data = CommFunc.WriteDWORD(data, self.Value6) - data = CommFunc.WriteDWORD(data, self.Value7) - data = CommFunc.WriteDWORD(data, self.Value8) - data = CommFunc.WriteDWORD(data, self.CmpValue) - data = CommFunc.WriteDWORD(data, self.CmpValue2) - data = CommFunc.WriteDWORD(data, self.CmpValue3) - data = CommFunc.WriteWORD(data, self.DataLen) - data = CommFunc.WriteString(data, self.DataLen, self.UserData) - return data - - def OutputString(self): - DumpString = ''' - OrderIndex:%d, - ID:%d, - ID2:%d, - Name1:%s, - Name2:%s, - Type2:%d, - Value1:%d, - Value2:%d, - Value3:%d, - Value4:%d, - Value5:%d, - Value6:%d, - Value7:%d, - Value8:%d, - CmpValue:%d, - CmpValue2:%d, - CmpValue3:%d, - DataLen:%d, - UserData:%s - '''\ - %( - self.OrderIndex, - self.ID, - self.ID2, - self.Name1, - self.Name2, - self.Type2, - self.Value1, - self.Value2, - self.Value3, - self.Value4, - self.Value5, - self.Value6, - self.Value7, - self.Value8, - self.CmpValue, - self.CmpValue2, - self.CmpValue3, - self.DataLen, - self.UserData - ) - return DumpString - - -class tagGCCrossBillboardInfo(Structure): - Head = tagHead() - Type = 0 #(BYTE Type)//榜单类型 - GroupValue1 = 0 #(DWORD GroupValue1)// 分组值1 - GroupValue2 = 0 #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 - WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 - BillboardCount = 0 #(BYTE BillboardCount) - CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x07 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BillboardCount): - temCrossBillboardDataList = tagGCCrossBillboardData() - _pos = temCrossBillboardDataList.ReadData(_lpData, _pos) - self.CrossBillboardDataList.append(temCrossBillboardDataList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x07 - self.Type = 0 - self.GroupValue1 = 0 - self.GroupValue2 = 0 - self.WatchID = 0 - self.BillboardCount = 0 - self.CrossBillboardDataList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 - length += 4 - length += 4 - length += 1 - for i in range(self.BillboardCount): - length += self.CrossBillboardDataList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Type) - data = CommFunc.WriteDWORD(data, self.GroupValue1) - data = CommFunc.WriteDWORD(data, self.GroupValue2) - data = CommFunc.WriteDWORD(data, self.WatchID) - data = CommFunc.WriteBYTE(data, self.BillboardCount) - for i in range(self.BillboardCount): - data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Type:%d, - GroupValue1:%d, - GroupValue2:%d, - WatchID:%d, - BillboardCount:%d, - CrossBillboardDataList:%s - '''\ - %( - self.Head.OutputString(), - self.Type, - self.GroupValue1, - self.GroupValue2, - self.WatchID, - self.BillboardCount, - "..." - ) - return DumpString - - -m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo - - -#------------------------------------------------------ -# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver - -class tagGCCrossChampionshipPKOver(Structure): - Head = tagHead() - GroupMark = 0 #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛 - TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss - OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线 - WinnerID = 0 #(DWORD WinnerID)// 胜方ID - LoserID = 0 #(DWORD LoserID)// 败方ID - RoundCount = 0 #(BYTE RoundCount)// PK回合数 - RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表 - TagNameLen = 0 #(BYTE TagNameLen) - TagName = "" #(String TagName) - Rank = 0 #(BYTE Rank)// 最终名次,决赛才有 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x16 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.GroupMark,_pos = CommFunc.ReadDWORD(_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.LoserID,_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.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen) - self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x16 - self.GroupMark = 0 - self.TimeStr = "" - self.OverType = 0 - self.WinnerID = 0 - self.LoserID = 0 - self.RoundCount = 0 - self.RoundWinnerID = list() - self.TagNameLen = 0 - self.TagName = "" - self.Rank = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 19 - length += 1 - length += 4 - length += 4 - length += 1 - length += 4 * self.RoundCount - length += 1 - length += len(self.TagName) - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.GroupMark) - data = CommFunc.WriteString(data, 19, self.TimeStr) - data = CommFunc.WriteBYTE(data, self.OverType) - data = CommFunc.WriteDWORD(data, self.WinnerID) - data = CommFunc.WriteDWORD(data, self.LoserID) - data = CommFunc.WriteBYTE(data, self.RoundCount) - for i in range(self.RoundCount): - data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i]) - data = CommFunc.WriteBYTE(data, self.TagNameLen) - data = CommFunc.WriteString(data, self.TagNameLen, self.TagName) - data = CommFunc.WriteBYTE(data, self.Rank) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - GroupMark:%d, - TimeStr:%s, - OverType:%d, - WinnerID:%d, - LoserID:%d, - RoundCount:%d, - RoundWinnerID:%s, - TagNameLen:%d, - TagName:%s, - Rank:%d - '''\ - %( - self.Head.OutputString(), - self.GroupMark, - self.TimeStr, - self.OverType, - self.WinnerID, - self.LoserID, - self.RoundCount, - "...", - self.TagNameLen, - self.TagName, - self.Rank - ) - return DumpString - - -m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver - - -#------------------------------------------------------ -# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo - -class tagGCCrossChampionshipPKBattle(Structure): - BattleNum = 0 #(BYTE BattleNum)// 对战组编号 1~n - WinPlayerID = 0 #(DWORD WinPlayerID)// 获胜玩家ID - PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家IDA - PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家IDB - BattleRetLen = 0 #(BYTE BattleRetLen) - BattleRet = "" #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...} - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen) - return _pos - - def Clear(self): - self.BattleNum = 0 - self.WinPlayerID = 0 - self.PlayerIDA = 0 - self.PlayerIDB = 0 - self.BattleRetLen = 0 - self.BattleRet = "" - return - - def GetLength(self): - length = 0 - length += 1 - length += 4 - length += 4 - length += 4 - length += 1 - length += len(self.BattleRet) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.BattleNum) - data = CommFunc.WriteDWORD(data, self.WinPlayerID) - data = CommFunc.WriteDWORD(data, self.PlayerIDA) - data = CommFunc.WriteDWORD(data, self.PlayerIDB) - data = CommFunc.WriteBYTE(data, self.BattleRetLen) - data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet) - return data - - def OutputString(self): - DumpString = ''' - BattleNum:%d, - WinPlayerID:%d, - PlayerIDA:%d, - PlayerIDB:%d, - BattleRetLen:%d, - BattleRet:%s - '''\ - %( - self.BattleNum, - self.WinPlayerID, - self.PlayerIDA, - self.PlayerIDB, - self.BattleRetLen, - self.BattleRet - ) - return DumpString - - -class tagGCCrossChampionshipPKGroup(Structure): - GroupMark = 0 #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛; - BattleCount = 0 #(BYTE BattleCount)// 对战组数 - BattleList = list() #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BattleCount): - temBattleList = tagGCCrossChampionshipPKBattle() - _pos = temBattleList.ReadData(_lpData, _pos) - self.BattleList.append(temBattleList) - return _pos - - def Clear(self): - self.GroupMark = 0 - self.BattleCount = 0 - self.BattleList = list() - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - for i in range(self.BattleCount): - length += self.BattleList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.GroupMark) - data = CommFunc.WriteBYTE(data, self.BattleCount) - for i in range(self.BattleCount): - data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - GroupMark:%d, - BattleCount:%d, - BattleList:%s - '''\ - %( - self.GroupMark, - self.BattleCount, - "..." - ) - return DumpString - - -class tagGCCrossChampionshipPKPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID)// 玩家ID - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV) - FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 - RealmLV = 0 #(WORD RealmLV) - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - ServerID = 0 #(DWORD ServerID) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.ServerID = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 1 - length += 2 - length += 4 - length += 4 - length += 2 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.ServerID) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - Job:%d, - LV:%d, - FightPower:%d, - FightPowerEx:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - ServerID:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.Job, - self.LV, - self.FightPower, - self.FightPowerEx, - self.RealmLV, - self.Face, - self.FacePic, - self.ServerID - ) - return DumpString - - -class tagGCCrossChampionshipPKZoneGroupInfo(Structure): - Head = tagHead() - ActID = 0 #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据 - StateError = 0 #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动; - ZoneID = 0 #(BYTE ZoneID)// 排位分区ID - PlayerCount = 0 #(BYTE PlayerCount)// 参赛玩家数 - PlayerList = list() #(vector<tagGCCrossChampionshipPKPlayer> PlayerList) - GroupCount = 0 #(WORD GroupCount) - GroupList = list() #(vector<tagGCCrossChampionshipPKGroup> GroupList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x15 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PlayerCount): - temPlayerList = tagGCCrossChampionshipPKPlayer() - _pos = temPlayerList.ReadData(_lpData, _pos) - self.PlayerList.append(temPlayerList) - self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.GroupCount): - temGroupList = tagGCCrossChampionshipPKGroup() - _pos = temGroupList.ReadData(_lpData, _pos) - self.GroupList.append(temGroupList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x15 - self.ActID = 0 - self.StateError = 0 - self.ZoneID = 0 - self.PlayerCount = 0 - self.PlayerList = list() - self.GroupCount = 0 - self.GroupList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 1 - length += 1 - for i in range(self.PlayerCount): - length += self.PlayerList[i].GetLength() - length += 2 - for i in range(self.GroupCount): - length += self.GroupList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.ActID) - data = CommFunc.WriteBYTE(data, self.StateError) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.PlayerCount) - for i in range(self.PlayerCount): - data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) - data = CommFunc.WriteWORD(data, self.GroupCount) - for i in range(self.GroupCount): - data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActID:%d, - StateError:%d, - ZoneID:%d, - PlayerCount:%d, - PlayerList:%s, - GroupCount:%d, - GroupList:%s - '''\ - %( - self.Head.OutputString(), - self.ActID, - self.StateError, - self.ZoneID, - self.PlayerCount, - "...", - self.GroupCount, - "..." - ) - return DumpString - - -m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo - - -#------------------------------------------------------ -# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo - -class tagGCCrossRealmPKBillboardData(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - Job = 0 #(BYTE Job) - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower) - RealmLV = 0 #(WORD RealmLV) - PKScore = 0 #(DWORD PKScore) - DanLV = 0 #(BYTE DanLV) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.Job = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.RealmLV = 0 - self.PKScore = 0 - self.DanLV = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 1 - length += 4 - length += 4 - length += 4 - length += 2 - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.PKScore) - data = CommFunc.WriteBYTE(data, self.DanLV) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - Job:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - RealmLV:%d, - PKScore:%d, - DanLV:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.Job, - self.Face, - self.FacePic, - self.FightPower, - self.RealmLV, - self.PKScore, - self.DanLV - ) - return DumpString - - -class tagGCCrossRealmPKBillboardInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 赛区ID - SeasonID = 0 #(BYTE SeasonID)// 赛季ID - Count = 0 #(WORD Count) - PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x05 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temPKBillboardList = tagGCCrossRealmPKBillboardData() - _pos = temPKBillboardList.ReadData(_lpData, _pos) - self.PKBillboardList.append(temPKBillboardList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x05 - self.ZoneID = 0 - self.SeasonID = 0 - self.Count = 0 - self.PKBillboardList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 2 - for i in range(self.Count): - length += self.PKBillboardList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.SeasonID) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - SeasonID:%d, - Count:%d, - PKBillboardList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.SeasonID, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo - - -#------------------------------------------------------ -# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK - -class tagGCCrossRealmPKMatchPlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 跨服名字 - Job = 0 #(BYTE Job) - LV = 0 #(WORD LV) - RealmLV = 0 #(WORD RealmLV)//境界 - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 - ServerID = 0 #(DWORD ServerID) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.Job = 0 - self.LV = 0 - self.RealmLV = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.ServerID = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += len(self.PlayerName) - length += 1 - length += 2 - length += 2 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteWORD(data, self.LV) - data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.ServerID) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - NameLen:%d, - PlayerName:%s, - Job:%d, - LV:%d, - RealmLV:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - FightPowerEx:%d, - ServerID:%d - '''\ - %( - self.PlayerID, - self.NameLen, - self.PlayerName, - self.Job, - self.LV, - self.RealmLV, - self.Face, - self.FacePic, - self.FightPower, - self.FightPowerEx, - self.ServerID - ) - return DumpString - - -class tagGCCrossRealmPKMatchOK(Structure): - Head = tagHead() - MatchPlayerCount = 0 #(BYTE MatchPlayerCount) - MatchPlayer = list() #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家 - 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.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MatchPlayerCount): - temMatchPlayer = tagGCCrossRealmPKMatchPlayer() - _pos = temMatchPlayer.ReadData(_lpData, _pos) - self.MatchPlayer.append(temMatchPlayer) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x01 - self.MatchPlayerCount = 0 - self.MatchPlayer = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.MatchPlayerCount): - length += self.MatchPlayer[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.MatchPlayerCount) - for i in range(self.MatchPlayerCount): - data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - MatchPlayerCount:%d, - MatchPlayer:%s - '''\ - %( - self.Head.OutputString(), - self.MatchPlayerCount, - "..." - ) - 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 #(DWORD 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.ReadDWORD(_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 += 4 - 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.WriteDWORD(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 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo - -class tagGCCrossRealmPKSeason(Structure): - SeasonID = 0 #(WORD SeasonID)// 当前赛季ID - StartDate = "" #(char StartDate[10])// 开始日期 yyyy-MM-dd - EndDate = "" #(char EndDate[10])// 结束日期 yyyy-MM-dd - EndTime = "" #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) - return _pos - - def Clear(self): - self.SeasonID = 0 - self.StartDate = "" - self.EndDate = "" - self.EndTime = "" - return - - def GetLength(self): - length = 0 - length += 2 - length += 10 - length += 10 - length += 5 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteWORD(data, self.SeasonID) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndDate) - data = CommFunc.WriteString(data, 5, self.EndTime) - return data - - def OutputString(self): - DumpString = ''' - SeasonID:%d, - StartDate:%s, - EndDate:%s, - EndTime:%s - '''\ - %( - self.SeasonID, - self.StartDate, - self.EndDate, - self.EndTime - ) - return DumpString - - -class tagGCCrossRealmPKZone(Structure): - ZoneID = 0 #(BYTE ZoneID)// 赛区ID - ZoneNameLen = 0 #(BYTE ZoneNameLen) - ZoneName = "" #(String ZoneName)// 赛区名 - SeasonCount = 0 #(WORD SeasonCount) - SeasonList = list() #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen) - self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.SeasonCount): - temSeasonList = tagGCCrossRealmPKSeason() - _pos = temSeasonList.ReadData(_lpData, _pos) - self.SeasonList.append(temSeasonList) - return _pos - - def Clear(self): - self.ZoneID = 0 - self.ZoneNameLen = 0 - self.ZoneName = "" - self.SeasonCount = 0 - self.SeasonList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - length += len(self.ZoneName) - length += 2 - for i in range(self.SeasonCount): - length += self.SeasonList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteBYTE(data, self.ZoneNameLen) - data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName) - data = CommFunc.WriteWORD(data, self.SeasonCount) - for i in range(self.SeasonCount): - data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - ZoneID:%d, - ZoneNameLen:%d, - ZoneName:%s, - SeasonCount:%d, - SeasonList:%s - '''\ - %( - self.ZoneID, - self.ZoneNameLen, - self.ZoneName, - self.SeasonCount, - "..." - ) - return DumpString - - -class tagGCCrossRealmPKSeasonInfo(Structure): - Head = tagHead() - ZoneCount = 0 #(BYTE ZoneCount)// 赛区个数 - ZoneList = list() #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x04 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ZoneCount): - temZoneList = tagGCCrossRealmPKZone() - _pos = temZoneList.ReadData(_lpData, _pos) - self.ZoneList.append(temZoneList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x04 - self.ZoneCount = 0 - self.ZoneList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.ZoneCount): - length += self.ZoneList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneCount) - for i in range(self.ZoneCount): - data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneCount:%d, - ZoneList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneCount, - "..." - ) - return DumpString - - -m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo - - -#------------------------------------------------------ -# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState - -class tagGCCrossRealmPKSeasonState(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 所属赛区ID - SeasonID = 0 #(WORD SeasonID)// 当前赛季ID - SeasonState = 0 #(BYTE SeasonState)// 赛季状态;0-未开启,1-开启中,2-已结束 - MatchState = 0 #(BYTE MatchState)// 匹配状态;0-未开启;1-开启中 - CrossZoneNameLen = 0 #(BYTE CrossZoneNameLen) - CrossZoneName = "" #(String CrossZoneName)// 跨服分区名 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x06 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.SeasonState,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.CrossZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.CrossZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.CrossZoneNameLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x06 - self.ZoneID = 0 - self.SeasonID = 0 - self.SeasonState = 0 - self.MatchState = 0 - self.CrossZoneNameLen = 0 - self.CrossZoneName = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 2 - length += 1 - length += 1 - length += 1 - length += len(self.CrossZoneName) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteWORD(data, self.SeasonID) - data = CommFunc.WriteBYTE(data, self.SeasonState) - data = CommFunc.WriteBYTE(data, self.MatchState) - data = CommFunc.WriteBYTE(data, self.CrossZoneNameLen) - data = CommFunc.WriteString(data, self.CrossZoneNameLen, self.CrossZoneName) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - SeasonID:%d, - SeasonState:%d, - MatchState:%d, - CrossZoneNameLen:%d, - CrossZoneName:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.SeasonID, - self.SeasonState, - self.MatchState, - self.CrossZoneNameLen, - self.CrossZoneName - ) - return DumpString - - -m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Head.Cmd,m_NAtagGCCrossRealmPKSeasonState.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState - - -#------------------------------------------------------ -# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch - -class tagGCCrossRealmPKStartMatch(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsRobot", 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 - self.IsRobot = 0 - 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, - IsRobot:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.IsRobot - ) - return DumpString - - -m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch - - -#------------------------------------------------------ -# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo - -class tagGCCrossYaomoBossPlayerHurtInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("HurtTotal", c_int), # 总伤害值,小于亿部分 - ("HurtTotalEx", c_int), # 总伤害值,整除亿部分 - ("AwardState", c_int), # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xC0 - 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 = 0xC0 - self.SubCmd = 0x11 - self.HurtTotal = 0 - self.HurtTotalEx = 0 - self.AwardState = 0 - return - - def GetLength(self): - return sizeof(tagGCCrossYaomoBossPlayerHurtInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo: - Cmd:%s, - SubCmd:%s, - HurtTotal:%d, - HurtTotalEx:%d, - AwardState:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.HurtTotal, - self.HurtTotalEx, - self.AwardState - ) - return DumpString - - -m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo - - -#------------------------------------------------------ -# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo - -class tagGCCrossZoneInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("CommZoneID", c_ubyte), # 所属常规分区ID - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xC0 - self.SubCmd = 0x10 - 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 = 0x10 - self.CommZoneID = 0 - return - - def GetLength(self): - return sizeof(tagGCCrossZoneInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo: - Cmd:%s, - SubCmd:%s, - CommZoneID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.CommZoneID - ) - return DumpString - - -m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo - - -#------------------------------------------------------ -# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo - -class tagGCFamilyGCZActFamily(Structure): - FamilyID = 0 #(DWORD FamilyID) - Name = "" #(char Name[33])//参与仙盟名字 - LV = 0 #(BYTE LV)//仙盟等级 - ServerID = 0 #(DWORD ServerID)//仙盟所属区服ID - EmblemID = 0 #(DWORD EmblemID)//徽章ID - FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 - LeaderID = 0 #(DWORD LeaderID)//盟主ID - LeaderName = "" #(char LeaderName[33])//盟主名 - LeaderFace = 0 #(DWORD LeaderFace) - LeaderFacePic = 0 #(DWORD LeaderFacePic) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.FamilyID = 0 - self.Name = "" - self.LV = 0 - self.ServerID = 0 - self.EmblemID = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.LeaderID = 0 - self.LeaderName = "" - self.LeaderFace = 0 - self.LeaderFacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 33 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteString(data, 33, self.Name) - data = CommFunc.WriteBYTE(data, self.LV) - data = CommFunc.WriteDWORD(data, self.ServerID) - data = CommFunc.WriteDWORD(data, self.EmblemID) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.LeaderID) - data = CommFunc.WriteString(data, 33, self.LeaderName) - data = CommFunc.WriteDWORD(data, self.LeaderFace) - data = CommFunc.WriteDWORD(data, self.LeaderFacePic) - return data - - def OutputString(self): - DumpString = ''' - FamilyID:%d, - Name:%s, - LV:%d, - ServerID:%d, - EmblemID:%d, - FightPower:%d, - FightPowerEx:%d, - LeaderID:%d, - LeaderName:%s, - LeaderFace:%d, - LeaderFacePic:%d - '''\ - %( - self.FamilyID, - self.Name, - self.LV, - self.ServerID, - self.EmblemID, - self.FightPower, - self.FightPowerEx, - self.LeaderID, - self.LeaderName, - self.LeaderFace, - self.LeaderFacePic - ) - return DumpString - - -class tagGCFamilyGCZActInfo(Structure): - Head = tagHead() - ServerInfoLen = 0 #(BYTE ServerInfoLen) - ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 - ZoneID = 0 #(BYTE ZoneID)// 活动分区ID,公示期为0 - ActID = 0 #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置 - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - JoinFamilyCnt = 0 #(BYTE JoinFamilyCnt)// 参与仙盟数 - ActFlowID = 0 #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态 - GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示 - PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 - FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 - StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示 - FamilyCount = 0 #(BYTE FamilyCount) - ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x24 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.FamilyCount): - temActFamilyList = tagGCFamilyGCZActFamily() - _pos = temActFamilyList.ReadData(_lpData, _pos) - self.ActFamilyList.append(temActFamilyList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x24 - self.ServerInfoLen = 0 - self.ServerIDRangeInfo = "" - self.ZoneID = 0 - self.ActID = 0 - self.StartDate = "" - self.EndtDate = "" - self.JoinFamilyCnt = 0 - self.ActFlowID = 0 - self.GuessTemplateID = 0 - self.PersonalTemplateID = 0 - self.FamilyTemplateID = 0 - self.StateError = 0 - self.FamilyCount = 0 - self.ActFamilyList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.ServerIDRangeInfo) - length += 1 - length += 4 - length += 10 - length += 10 - length += 1 - length += 2 - length += 2 - length += 2 - length += 2 - length += 4 - length += 1 - for i in range(self.FamilyCount): - length += self.ActFamilyList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ServerInfoLen) - data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteDWORD(data, self.ActID) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt) - data = CommFunc.WriteWORD(data, self.ActFlowID) - data = CommFunc.WriteWORD(data, self.GuessTemplateID) - data = CommFunc.WriteWORD(data, self.PersonalTemplateID) - data = CommFunc.WriteWORD(data, self.FamilyTemplateID) - data = CommFunc.WriteDWORD(data, self.StateError) - data = CommFunc.WriteBYTE(data, self.FamilyCount) - for i in range(self.FamilyCount): - data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ServerInfoLen:%d, - ServerIDRangeInfo:%s, - ZoneID:%d, - ActID:%d, - StartDate:%s, - EndtDate:%s, - JoinFamilyCnt:%d, - ActFlowID:%d, - GuessTemplateID:%d, - PersonalTemplateID:%d, - FamilyTemplateID:%d, - StateError:%d, - FamilyCount:%d, - ActFamilyList:%s - '''\ - %( - self.Head.OutputString(), - self.ServerInfoLen, - self.ServerIDRangeInfo, - self.ZoneID, - self.ActID, - self.StartDate, - self.EndtDate, - self.JoinFamilyCnt, - self.ActFlowID, - self.GuessTemplateID, - self.PersonalTemplateID, - self.FamilyTemplateID, - self.StateError, - self.FamilyCount, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo - - -#------------------------------------------------------ -# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo - -class tagGCFamilyGCZBatCityInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("CityID", c_int), #城池ID - ("CityLV", c_ubyte), #城池等级 - ("FamilyID", c_int), #所属仙盟ID,可能为0 - ("GuardID", c_int), #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁 - ("HP", c_int), #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败 - ("HPEx", c_int), #防守成员剩余生命,整除亿部分 - ("HPMax", c_int), #防守成员最大生命,求余亿部分 - ("HPMaxEx", c_int), #防守成员最大生命,整除亿部分 - ("AtkPlayerID", c_int), #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现 - ("AtkRet", c_ubyte), #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他 - ("KillCnt", c_ubyte), #本次攻击击杀防守人员数 - ("HurtValue", c_int), #伤害飘血,求余亿部分 - ("HurtValueEx", c_int), #伤害飘血,整除亿部分 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xC0 - self.SubCmd = 0x29 - 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 = 0x29 - self.CityID = 0 - self.CityLV = 0 - self.FamilyID = 0 - self.GuardID = 0 - self.HP = 0 - self.HPEx = 0 - self.HPMax = 0 - self.HPMaxEx = 0 - self.AtkPlayerID = 0 - self.AtkRet = 0 - self.KillCnt = 0 - self.HurtValue = 0 - self.HurtValueEx = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZBatCityInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo: - Cmd:%s, - SubCmd:%s, - CityID:%d, - CityLV:%d, - FamilyID:%d, - GuardID:%d, - HP:%d, - HPEx:%d, - HPMax:%d, - HPMaxEx:%d, - AtkPlayerID:%d, - AtkRet:%d, - KillCnt:%d, - HurtValue:%d, - HurtValueEx:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.CityID, - self.CityLV, - self.FamilyID, - self.GuardID, - self.HP, - self.HPEx, - self.HPMax, - self.HPMaxEx, - self.AtkPlayerID, - self.AtkRet, - self.KillCnt, - self.HurtValue, - self.HurtValueEx - ) - return DumpString - - -m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo - - -#------------------------------------------------------ -# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo - -class tagGCFamilyGCZBatGroup(Structure): - GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A - FamilyIDCnt = 0 #(BYTE FamilyIDCnt) - FamilyIDList = list() #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.FamilyIDCnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.FamilyIDList.append(value) - return _pos - - def Clear(self): - self.GroupNum = 0 - self.FamilyIDCnt = 0 - self.FamilyIDList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - length += 4 * self.FamilyIDCnt - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.GroupNum) - data = CommFunc.WriteBYTE(data, self.FamilyIDCnt) - for i in range(self.FamilyIDCnt): - data = CommFunc.WriteDWORD(data, self.FamilyIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - GroupNum:%d, - FamilyIDCnt:%d, - FamilyIDList:%s - '''\ - %( - self.GroupNum, - self.FamilyIDCnt, - "..." - ) - return DumpString - - -class tagGCFamilyGCZBat(Structure): - BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; - GroupCnt = 0 #(BYTE GroupCnt)// 分组数 - GroupList = list() #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.GroupCnt): - temGroupList = tagGCFamilyGCZBatGroup() - _pos = temGroupList.ReadData(_lpData, _pos) - self.GroupList.append(temGroupList) - return _pos - - def Clear(self): - self.BatType = 0 - self.GroupCnt = 0 - self.GroupList = list() - return - - def GetLength(self): - length = 0 - length += 1 - length += 1 - for i in range(self.GroupCnt): - length += self.GroupList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.BatType) - data = CommFunc.WriteBYTE(data, self.GroupCnt) - for i in range(self.GroupCnt): - data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - BatType:%d, - GroupCnt:%d, - GroupList:%s - '''\ - %( - self.BatType, - self.GroupCnt, - "..." - ) - return DumpString - - -class tagGCFamilyGCZBatGroupInfo(Structure): - Head = tagHead() - RoundNum = 0 #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格 - BatTypeCnt = 0 #(BYTE BatTypeCnt)// 战场类型数 - BatList = list() #(vector<tagGCFamilyGCZBat> BatList)//战场列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x25 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BatTypeCnt): - temBatList = tagGCFamilyGCZBat() - _pos = temBatList.ReadData(_lpData, _pos) - self.BatList.append(temBatList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x25 - self.RoundNum = 0 - self.BatTypeCnt = 0 - self.BatList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - for i in range(self.BatTypeCnt): - length += self.BatList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RoundNum) - data = CommFunc.WriteBYTE(data, self.BatTypeCnt) - for i in range(self.BatTypeCnt): - data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RoundNum:%d, - BatTypeCnt:%d, - BatList:%s - '''\ - %( - self.Head.OutputString(), - self.RoundNum, - self.BatTypeCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo - - -#------------------------------------------------------ -# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport - -class tagGCFamilyGCZBatRepHurt(Structure): - _pack_ = 1 - _fields_ = [ - ("TagFamilyID", c_int), #目标仙盟ID - ("HurtValue", c_int), #输出伤害,求余亿部分 - ("HurtValueEx", c_int), #输出伤害,整除亿部分 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.TagFamilyID = 0 - self.HurtValue = 0 - self.HurtValueEx = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZBatRepHurt) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport: - TagFamilyID:%d, - HurtValue:%d, - HurtValueEx:%d - '''\ - %( - self.TagFamilyID, - self.HurtValue, - self.HurtValueEx - ) - return DumpString - - -class tagGCFamilyGCZBatReport(Structure): - Head = tagHead() - FamilyID = 0 #(DWORD FamilyID)// 战报仙盟ID - DefRepCnt = 0 #(BYTE DefRepCnt) - DefRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报 - AtkRepCnt = 0 #(BYTE AtkRepCnt) - AtkRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x30 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.DefRepCnt): - temDefRepList = tagGCFamilyGCZBatRepHurt() - _pos = temDefRepList.ReadData(_lpData, _pos) - self.DefRepList.append(temDefRepList) - self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AtkRepCnt): - temAtkRepList = tagGCFamilyGCZBatRepHurt() - _pos = temAtkRepList.ReadData(_lpData, _pos) - self.AtkRepList.append(temAtkRepList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x30 - self.FamilyID = 0 - self.DefRepCnt = 0 - self.DefRepList = list() - self.AtkRepCnt = 0 - self.AtkRepList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - for i in range(self.DefRepCnt): - length += self.DefRepList[i].GetLength() - length += 1 - for i in range(self.AtkRepCnt): - length += self.AtkRepList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.DefRepCnt) - for i in range(self.DefRepCnt): - data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AtkRepCnt) - for i in range(self.AtkRepCnt): - data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FamilyID:%d, - DefRepCnt:%d, - DefRepList:%s, - AtkRepCnt:%d, - AtkRepList:%s - '''\ - %( - self.Head.OutputString(), - self.FamilyID, - self.DefRepCnt, - "...", - self.AtkRepCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport - - -#------------------------------------------------------ -# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo - -class tagGCFamilyGCZBatScenePlayer(Structure): - PlayerID = 0 #(DWORD PlayerID) - Name = "" #(char Name[33]) - Job = 0 #(BYTE Job) - Face = 0 #(DWORD Face) - FacePic = 0 #(DWORD FacePic) - 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.Name = "" - self.Job = 0 - self.Face = 0 - self.FacePic = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteString(data, 33, self.Name) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - Name:%s, - Job:%d, - Face:%d, - FacePic:%d - '''\ - %( - self.PlayerID, - self.Name, - self.Job, - self.Face, - self.FacePic - ) - return DumpString - - -class tagGCFamilyGCZBatSceneHurt(Structure): - _pack_ = 1 - _fields_ = [ - ("CityID", c_int), #被攻击的城池ID - ("HurtValue", c_int), #伤害飘血,求余亿部分 - ("HurtValueEx", c_int), #伤害飘血,整除亿部分 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.CityID = 0 - self.HurtValue = 0 - self.HurtValueEx = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZBatSceneHurt) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: - CityID:%d, - HurtValue:%d, - HurtValueEx:%d - '''\ - %( - self.CityID, - self.HurtValue, - self.HurtValueEx - ) - return DumpString - - -class tagGCFamilyGCZBatSceneCity(Structure): - _pack_ = 1 - _fields_ = [ - ("CityID", c_int), #城池ID - ("CityLV", c_ubyte), #城池等级 - ("FamilyID", c_int), #所属仙盟ID,可能为0 - ("Rank", c_ubyte), #当前名次,从1开始 - ("HP", c_int), #剩余生命,求余亿部分,剩余生命为0时代表被摧毁 - ("HPEx", c_int), #剩余生命,整除亿部分 - ("HPMax", c_int), #最大生命,求余亿部分 - ("HPMaxEx", c_int), #最大生命,整除亿部分 - ("LastAtkedTime", c_int), #最后一次被攻击时间戳,可能为0 - ] - - 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.CityID = 0 - self.CityLV = 0 - self.FamilyID = 0 - self.Rank = 0 - self.HP = 0 - self.HPEx = 0 - self.HPMax = 0 - self.HPMaxEx = 0 - self.LastAtkedTime = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZBatSceneCity) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: - CityID:%d, - CityLV:%d, - FamilyID:%d, - Rank:%d, - HP:%d, - HPEx:%d, - HPMax:%d, - HPMaxEx:%d, - LastAtkedTime:%d - '''\ - %( - self.CityID, - self.CityLV, - self.FamilyID, - self.Rank, - self.HP, - self.HPEx, - self.HPMax, - self.HPMaxEx, - self.LastAtkedTime - ) - return DumpString - - -class tagGCFamilyGCZBatSceneInfo(Structure): - Head = tagHead() - BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; - GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A - TopFamilyID = 0 #(DWORD TopFamilyID)// 伤害第一仙盟ID - TopLeaderID = 0 #(DWORD TopLeaderID)// 伤害第一盟主ID - TopPlayerID = 0 #(DWORD TopPlayerID)// 伤害第一玩家ID - TopPlayerFamilyID = 0 #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID - AtkPlayerID = 0 #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息 - AtkType = 0 #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效 - KillCnt = 0 #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效 - HurtCnt = 0 #(BYTE HurtCnt) - HurtList = list() #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效 - CityCnt = 0 #(BYTE CityCnt) - CityList = list() #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池 - PlayerCnt = 0 #(BYTE PlayerCnt) - PlayerInfoList = list() #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x28 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.HurtCnt): - temHurtList = tagGCFamilyGCZBatSceneHurt() - _pos = temHurtList.ReadData(_lpData, _pos) - self.HurtList.append(temHurtList) - self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.CityCnt): - temCityList = tagGCFamilyGCZBatSceneCity() - _pos = temCityList.ReadData(_lpData, _pos) - self.CityList.append(temCityList) - self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PlayerCnt): - temPlayerInfoList = tagGCFamilyGCZBatScenePlayer() - _pos = temPlayerInfoList.ReadData(_lpData, _pos) - self.PlayerInfoList.append(temPlayerInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x28 - self.BatType = 0 - self.GroupNum = 0 - self.TopFamilyID = 0 - self.TopLeaderID = 0 - self.TopPlayerID = 0 - self.TopPlayerFamilyID = 0 - self.AtkPlayerID = 0 - self.AtkType = 0 - self.KillCnt = 0 - self.HurtCnt = 0 - self.HurtList = list() - self.CityCnt = 0 - self.CityList = list() - self.PlayerCnt = 0 - self.PlayerInfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 1 - length += 1 - length += 1 - for i in range(self.HurtCnt): - length += self.HurtList[i].GetLength() - length += 1 - for i in range(self.CityCnt): - length += self.CityList[i].GetLength() - length += 1 - for i in range(self.PlayerCnt): - 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.BatType) - data = CommFunc.WriteBYTE(data, self.GroupNum) - data = CommFunc.WriteDWORD(data, self.TopFamilyID) - data = CommFunc.WriteDWORD(data, self.TopLeaderID) - data = CommFunc.WriteDWORD(data, self.TopPlayerID) - data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID) - data = CommFunc.WriteDWORD(data, self.AtkPlayerID) - data = CommFunc.WriteBYTE(data, self.AtkType) - data = CommFunc.WriteBYTE(data, self.KillCnt) - data = CommFunc.WriteBYTE(data, self.HurtCnt) - for i in range(self.HurtCnt): - data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.CityCnt) - for i in range(self.CityCnt): - data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.PlayerCnt) - for i in range(self.PlayerCnt): - data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - BatType:%d, - GroupNum:%d, - TopFamilyID:%d, - TopLeaderID:%d, - TopPlayerID:%d, - TopPlayerFamilyID:%d, - AtkPlayerID:%d, - AtkType:%d, - KillCnt:%d, - HurtCnt:%d, - HurtList:%s, - CityCnt:%d, - CityList:%s, - PlayerCnt:%d, - PlayerInfoList:%s - '''\ - %( - self.Head.OutputString(), - self.BatType, - self.GroupNum, - self.TopFamilyID, - self.TopLeaderID, - self.TopPlayerID, - self.TopPlayerFamilyID, - self.AtkPlayerID, - self.AtkType, - self.KillCnt, - self.HurtCnt, - "...", - self.CityCnt, - "...", - self.PlayerCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo - - -#------------------------------------------------------ -# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo - -class tagGCFamilyGCZCampMem(Structure): - PlayerID = 0 #(DWORD PlayerID) - Name = "" #(char Name[33])//参与玩家名字 - FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位 - Job = 0 #(BYTE Job) - Face = 0 #(DWORD Face)//基本脸型 - FacePic = 0 #(DWORD FacePic)//头像框 - FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 - FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 - HP = 0 #(DWORD HP)//剩余生命,求余亿部分 - HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 - HPMax = 0 #(DWORD HPMax)//最大生命,求余亿部分 - HPMaxEx = 0 #(DWORD HPMaxEx)//最大生命,整除亿部分 - TotalHurt = 0 #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值 - TotalHurtEx = 0 #(DWORD TotalHurtEx)//活动总伤害,整除亿部分 - 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.PlayerID = 0 - self.Name = "" - self.FamilyLV = 0 - self.Job = 0 - self.Face = 0 - self.FacePic = 0 - self.FightPower = 0 - self.FightPowerEx = 0 - self.HP = 0 - self.HPEx = 0 - self.HPMax = 0 - self.HPMaxEx = 0 - self.TotalHurt = 0 - self.TotalHurtEx = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 33 - length += 1 - length += 1 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteString(data, 33, self.Name) - data = CommFunc.WriteBYTE(data, self.FamilyLV) - data = CommFunc.WriteBYTE(data, self.Job) - data = CommFunc.WriteDWORD(data, self.Face) - data = CommFunc.WriteDWORD(data, self.FacePic) - data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteDWORD(data, self.FightPowerEx) - data = CommFunc.WriteDWORD(data, self.HP) - data = CommFunc.WriteDWORD(data, self.HPEx) - data = CommFunc.WriteDWORD(data, self.HPMax) - data = CommFunc.WriteDWORD(data, self.HPMaxEx) - data = CommFunc.WriteDWORD(data, self.TotalHurt) - data = CommFunc.WriteDWORD(data, self.TotalHurtEx) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - Name:%s, - FamilyLV:%d, - Job:%d, - Face:%d, - FacePic:%d, - FightPower:%d, - FightPowerEx:%d, - HP:%d, - HPEx:%d, - HPMax:%d, - HPMaxEx:%d, - TotalHurt:%d, - TotalHurtEx:%d - '''\ - %( - self.PlayerID, - self.Name, - self.FamilyLV, - self.Job, - self.Face, - self.FacePic, - self.FightPower, - self.FightPowerEx, - self.HP, - self.HPEx, - self.HPMax, - self.HPMaxEx, - self.TotalHurt, - self.TotalHurtEx - ) - return DumpString - - -class tagGCFamilyGCZCampRound(Structure): - _pack_ = 1 - _fields_ = [ - ("RoundNum", c_ubyte), #轮次编号,从1开始 - ("BatType", c_ubyte), #所在战场类型 - ("GroupNum", c_ubyte), #所在分组编号 - ("Rank", c_ubyte), #本轮排名 - ("Score", c_ushort), #本轮积分,总积分为所有轮次累加 - ("UpdownState", c_ubyte), #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型 - ] - - 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.RoundNum = 0 - self.BatType = 0 - self.GroupNum = 0 - self.Rank = 0 - self.Score = 0 - self.UpdownState = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZCampRound) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo: - RoundNum:%d, - BatType:%d, - GroupNum:%d, - Rank:%d, - Score:%d, - UpdownState:%d - '''\ - %( - self.RoundNum, - self.BatType, - self.GroupNum, - self.Rank, - self.Score, - self.UpdownState - ) - return DumpString - - -class tagGCFamilyGCZCampInfo(Structure): - Head = tagHead() - FamilyID = 0 #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准 - CampLV = 0 #(WORD CampLV)//大本营当前等级 - CampExp = 0 #(DWORD CampExp)//大本营当前经验 - CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样 - HPBase = 0 #(DWORD HPBase)//基础生命,求余亿部分 - HPBaseEx = 0 #(DWORD HPBaseEx)//基础生命,整除亿部分 - HPMax = 0 #(DWORD HPMax)//总生命,求余亿部分 - HPMaxEx = 0 #(DWORD HPMaxEx)//总大生命,整除亿部分 - HP = 0 #(DWORD HP)//剩余生命,求余亿部分 - HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 - RoundCnt = 0 #(BYTE RoundCnt) - RoundInfoList = list() #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息 - DefMemCnt = 0 #(BYTE DefMemCnt) - DefMemList = list() #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x26 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RoundCnt): - temRoundInfoList = tagGCFamilyGCZCampRound() - _pos = temRoundInfoList.ReadData(_lpData, _pos) - self.RoundInfoList.append(temRoundInfoList) - self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.DefMemCnt): - temDefMemList = tagGCFamilyGCZCampMem() - _pos = temDefMemList.ReadData(_lpData, _pos) - self.DefMemList.append(temDefMemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x26 - self.FamilyID = 0 - self.CampLV = 0 - self.CampExp = 0 - self.CityLV = 0 - self.HPBase = 0 - self.HPBaseEx = 0 - self.HPMax = 0 - self.HPMaxEx = 0 - self.HP = 0 - self.HPEx = 0 - self.RoundCnt = 0 - self.RoundInfoList = list() - self.DefMemCnt = 0 - self.DefMemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += 4 - length += 2 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 1 - for i in range(self.RoundCnt): - length += self.RoundInfoList[i].GetLength() - length += 1 - for i in range(self.DefMemCnt): - length += self.DefMemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteWORD(data, self.CampLV) - data = CommFunc.WriteDWORD(data, self.CampExp) - data = CommFunc.WriteWORD(data, self.CityLV) - data = CommFunc.WriteDWORD(data, self.HPBase) - data = CommFunc.WriteDWORD(data, self.HPBaseEx) - data = CommFunc.WriteDWORD(data, self.HPMax) - data = CommFunc.WriteDWORD(data, self.HPMaxEx) - data = CommFunc.WriteDWORD(data, self.HP) - data = CommFunc.WriteDWORD(data, self.HPEx) - data = CommFunc.WriteBYTE(data, self.RoundCnt) - for i in range(self.RoundCnt): - data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.DefMemCnt) - for i in range(self.DefMemCnt): - data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FamilyID:%d, - CampLV:%d, - CampExp:%d, - CityLV:%d, - HPBase:%d, - HPBaseEx:%d, - HPMax:%d, - HPMaxEx:%d, - HP:%d, - HPEx:%d, - RoundCnt:%d, - RoundInfoList:%s, - DefMemCnt:%d, - DefMemList:%s - '''\ - %( - self.Head.OutputString(), - self.FamilyID, - self.CampLV, - self.CampExp, - self.CityLV, - self.HPBase, - self.HPBaseEx, - self.HPMax, - self.HPMaxEx, - self.HP, - self.HPEx, - self.RoundCnt, - "...", - self.DefMemCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo - - -#------------------------------------------------------ -# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo - -class tagGCFamilyGCZContribution(Structure): - _pack_ = 1 - _fields_ = [ - ("PlayerID", c_int), - ("ContributionValue", c_int), #贡献值 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.PlayerID = 0 - self.ContributionValue = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZContribution) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo: - PlayerID:%d, - ContributionValue:%d - '''\ - %( - self.PlayerID, - self.ContributionValue - ) - return DumpString - - -class tagGCFamilyGCZContributionInfo(Structure): - Head = tagHead() - ContriCnt = 0 #(BYTE ContriCnt) - ContriList = list() #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x27 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ContriCnt): - temContriList = tagGCFamilyGCZContribution() - _pos = temContriList.ReadData(_lpData, _pos) - self.ContriList.append(temContriList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x27 - self.ContriCnt = 0 - self.ContriList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.ContriCnt): - length += self.ContriList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ContriCnt) - for i in range(self.ContriCnt): - data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ContriCnt:%d, - ContriList:%s - '''\ - %( - self.Head.OutputString(), - self.ContriCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo - - -#------------------------------------------------------ -# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo - -class tagGCFamilyGCZGroupFamilyMemHurt(Structure): - PlayerID = 0 #(DWORD PlayerID) - Name = "" #(char Name[33])//参与玩家名字 - HurtValue = 0 #(DWORD HurtValue)//伤害,求余亿部分 - HurtValueEx = 0 #(DWORD HurtValueEx)//伤害,整除亿部分 - 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.Name,_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.Name = "" - 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.Name) - data = CommFunc.WriteDWORD(data, self.HurtValue) - data = CommFunc.WriteDWORD(data, self.HurtValueEx) - return data - - def OutputString(self): - DumpString = ''' - PlayerID:%d, - Name:%s, - HurtValue:%d, - HurtValueEx:%d - '''\ - %( - self.PlayerID, - self.Name, - self.HurtValue, - self.HurtValueEx - ) - return DumpString - - -class tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure): - Head = tagHead() - FamilyID = 0 #(DWORD FamilyID)//查看的目标仙盟ID - HurtMemCnt = 0 #(BYTE HurtMemCnt) - HurtMemList = list() #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x31 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.HurtMemCnt): - temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt() - _pos = temHurtMemList.ReadData(_lpData, _pos) - self.HurtMemList.append(temHurtMemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x31 - self.FamilyID = 0 - self.HurtMemCnt = 0 - self.HurtMemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - for i in range(self.HurtMemCnt): - length += self.HurtMemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteBYTE(data, self.HurtMemCnt) - for i in range(self.HurtMemCnt): - data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FamilyID:%d, - HurtMemCnt:%d, - HurtMemList:%s - '''\ - %( - self.Head.OutputString(), - self.FamilyID, - self.HurtMemCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo - - -#------------------------------------------------------ -# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo - -class tagGCFamilyGCZGuessFamily(Structure): - _pack_ = 1 - _fields_ = [ - ("FamilyID", c_int), #备选仙盟ID - ("GuessValue", c_ushort), #竞猜热度值,玩家每次选择则加1,重复选择也算 - ] - - 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.FamilyID = 0 - self.GuessValue = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZGuessFamily) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: - FamilyID:%d, - GuessValue:%d - '''\ - %( - self.FamilyID, - self.GuessValue - ) - return DumpString - - -class tagGCFamilyGCZGuessRight(Structure): - _pack_ = 1 - _fields_ = [ - ("AwardID", c_ubyte), #奖励ID - ("RightPlayerCnt", 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.AwardID = 0 - self.RightPlayerCnt = 0 - return - - def GetLength(self): - return sizeof(tagGCFamilyGCZGuessRight) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: - AwardID:%d, - RightPlayerCnt:%d - '''\ - %( - self.AwardID, - self.RightPlayerCnt - ) - return DumpString - - -class tagGCFamilyGCZGuessInfo(Structure): - Head = tagHead() - PlayerID = 0 #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视 - SelectCnt = 0 #(BYTE SelectCnt) - SelectFamilyIDList = list() #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序 - FinalCnt = 0 #(BYTE FinalCnt) - FinalFamilyIDList = list() #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值 - RightCnt = 0 #(BYTE RightCnt) - RightInfoList = list() #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表 - FamilyCnt = 0 #(BYTE FamilyCnt) - GuessFamilyList = list() #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x32 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SelectCnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.SelectFamilyIDList.append(value) - self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.FinalCnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.FinalFamilyIDList.append(value) - self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RightCnt): - temRightInfoList = tagGCFamilyGCZGuessRight() - _pos = temRightInfoList.ReadData(_lpData, _pos) - self.RightInfoList.append(temRightInfoList) - self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.FamilyCnt): - temGuessFamilyList = tagGCFamilyGCZGuessFamily() - _pos = temGuessFamilyList.ReadData(_lpData, _pos) - self.GuessFamilyList.append(temGuessFamilyList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x32 - self.PlayerID = 0 - self.SelectCnt = 0 - self.SelectFamilyIDList = list() - self.FinalCnt = 0 - self.FinalFamilyIDList = list() - self.RightCnt = 0 - self.RightInfoList = list() - self.FamilyCnt = 0 - self.GuessFamilyList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 4 * self.SelectCnt - length += 1 - length += 4 * self.FinalCnt - length += 1 - for i in range(self.RightCnt): - length += self.RightInfoList[i].GetLength() - length += 1 - for i in range(self.FamilyCnt): - length += self.GuessFamilyList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteBYTE(data, self.SelectCnt) - for i in range(self.SelectCnt): - data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i]) - data = CommFunc.WriteBYTE(data, self.FinalCnt) - for i in range(self.FinalCnt): - data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i]) - data = CommFunc.WriteBYTE(data, self.RightCnt) - for i in range(self.RightCnt): - data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.FamilyCnt) - for i in range(self.FamilyCnt): - data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - PlayerID:%d, - SelectCnt:%d, - SelectFamilyIDList:%s, - FinalCnt:%d, - FinalFamilyIDList:%s, - RightCnt:%d, - RightInfoList:%s, - FamilyCnt:%d, - GuessFamilyList:%s - '''\ - %( - self.Head.OutputString(), - self.PlayerID, - self.SelectCnt, - "...", - self.FinalCnt, - "...", - self.RightCnt, - "...", - self.FamilyCnt, - "..." - ) - return DumpString - - -m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo - - -#------------------------------------------------------ -# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo - -class tagGCLuckyCloudBuyLotteryRec(Structure): - SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID - SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 中奖玩家名 - LotteryNum = 0 #(WORD LotteryNum)// 开奖号码 - LotteryTime = 0 #(DWORD LotteryTime)// 开奖时间戳,秒 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.SuperItemID = 0 - self.SuperItemCount = 0 - self.NameLen = 0 - self.PlayerName = "" - self.LotteryNum = 0 - self.LotteryTime = 0 - return - - def GetLength(self): - length = 0 - length += 4 - length += 1 - length += 1 - length += len(self.PlayerName) - length += 2 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteDWORD(data, self.SuperItemID) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteWORD(data, self.LotteryNum) - data = CommFunc.WriteDWORD(data, self.LotteryTime) - return data - - def OutputString(self): - DumpString = ''' - SuperItemID:%d, - SuperItemCount:%d, - NameLen:%d, - PlayerName:%s, - LotteryNum:%d, - LotteryTime:%d - '''\ - %( - self.SuperItemID, - self.SuperItemCount, - self.NameLen, - self.PlayerName, - self.LotteryNum, - self.LotteryTime - ) - return DumpString - - -class tagGCLuckyCloudBuyLotteryRecInfo(Structure): - Head = tagHead() - ZoneCount = 0 #(BYTE ZoneCount)// 分区数 - ZoneIDList = list() #(vector<BYTE> ZoneIDList)// 所有分区ID列表 - ZoneID = 0 #(BYTE ZoneID)// 返回记录分区ID - Count = 0 #(WORD Count) - LotteryRecList = list() #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x14 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.ZoneCount): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.ZoneIDList.append(value) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temLotteryRecList = tagGCLuckyCloudBuyLotteryRec() - _pos = temLotteryRecList.ReadData(_lpData, _pos) - self.LotteryRecList.append(temLotteryRecList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x14 - self.ZoneCount = 0 - self.ZoneIDList = list() - self.ZoneID = 0 - self.Count = 0 - self.LotteryRecList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 * self.ZoneCount - length += 1 - length += 2 - for i in range(self.Count): - length += self.LotteryRecList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneCount) - for i in range(self.ZoneCount): - data = CommFunc.WriteBYTE(data, self.ZoneIDList[i]) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneCount:%d, - ZoneIDList:%s, - ZoneID:%d, - Count:%d, - LotteryRecList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneCount, - "...", - self.ZoneID, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo - - -#------------------------------------------------------ -# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo - -class tagGCLuckyCloudBuyNumRec(Structure): - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName) - BuyNum = 0 #(WORD BuyNum) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.NameLen = 0 - self.PlayerName = "" - self.BuyNum = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += len(self.PlayerName) - length += 2 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteWORD(data, self.BuyNum) - return data - - def OutputString(self): - DumpString = ''' - NameLen:%d, - PlayerName:%s, - BuyNum:%d - '''\ - %( - self.NameLen, - self.PlayerName, - self.BuyNum - ) - return DumpString - - -class tagGCLuckyCloudBuyNumRecInfo(Structure): - Head = tagHead() - RemainCount = 0 #(WORD RemainCount)// 开奖剩余份数 - Count = 0 #(WORD Count) - BuyNumRecList = list() #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x13 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Count): - temBuyNumRecList = tagGCLuckyCloudBuyNumRec() - _pos = temBuyNumRecList.ReadData(_lpData, _pos) - self.BuyNumRecList.append(temBuyNumRecList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x13 - self.RemainCount = 0 - self.Count = 0 - self.BuyNumRecList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += 2 - for i in range(self.Count): - length += self.BuyNumRecList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.RemainCount) - data = CommFunc.WriteWORD(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - RemainCount:%d, - Count:%d, - BuyNumRecList:%s - '''\ - %( - self.Head.OutputString(), - self.RemainCount, - self.Count, - "..." - ) - return DumpString - - -m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo - - -#------------------------------------------------------ -# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo - -class tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo: - ItemID:%d, - ItemCount:%d, - IsBind:%d - '''\ - %( - self.ItemID, - self.ItemCount, - self.IsBind - ) - return DumpString - - -class tagGCLuckyCloudBuyRoundTime(Structure): - StartTime = "" #(char StartTime[5])// 开始时间 H:M - EndtTime = "" #(char EndtTime[5])// 结束时间 H:M - RoundMax = 0 #(BYTE RoundMax)// 本时段最大轮次 - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) - self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) - self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.StartTime = "" - self.EndtTime = "" - self.RoundMax = 0 - return - - def GetLength(self): - length = 0 - length += 5 - length += 5 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, 5, self.StartTime) - data = CommFunc.WriteString(data, 5, self.EndtTime) - data = CommFunc.WriteBYTE(data, self.RoundMax) - return data - - def OutputString(self): - DumpString = ''' - StartTime:%s, - EndtTime:%s, - RoundMax:%d - '''\ - %( - self.StartTime, - self.EndtTime, - self.RoundMax - ) - return DumpString - - -class tagGCLuckyCloudBuyRoundInfo(Structure): - Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 所属分区ID - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - RoundTimeCount = 0 #(BYTE RoundTimeCount) - RoundTimeList = list() #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段 - RoundID = 0 #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存 - RoundNum = 0 #(BYTE RoundNum)// 当前时段第几轮 - SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID - SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 - SuperItemMoneyType = 0 #(BYTE SuperItemMoneyType)// 大奖价值货币类型 - SuperItemMoneyValue = 0 #(DWORD SuperItemMoneyValue)// 大奖价值 - LVLimit = 0 #(WORD LVLimit)//开启等级 - BaseItemCount = 0 #(BYTE BaseItemCount)// 每次购买固定奖励物品数 - BaseItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息 - RandItemCount = 0 #(BYTE RandItemCount)// 每次购买随机奖励物品数 - RandItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x12 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RoundTimeCount): - temRoundTimeList = tagGCLuckyCloudBuyRoundTime() - _pos = temRoundTimeList.ReadData(_lpData, _pos) - self.RoundTimeList.append(temRoundTimeList) - self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.BaseItemCount): - temBaseItemList = tagGCLuckyCloudBuyRoundItem() - _pos = temBaseItemList.ReadData(_lpData, _pos) - self.BaseItemList.append(temBaseItemList) - self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.RandItemCount): - temRandItemList = tagGCLuckyCloudBuyRoundItem() - _pos = temRandItemList.ReadData(_lpData, _pos) - self.RandItemList.append(temRandItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xC0 - self.Head.SubCmd = 0x12 - self.ZoneID = 0 - self.StartDate = "" - self.EndtDate = "" - self.RoundTimeCount = 0 - self.RoundTimeList = list() - self.RoundID = 0 - self.RoundNum = 0 - self.SuperItemID = 0 - self.SuperItemCount = 0 - self.SuperItemMoneyType = 0 - self.SuperItemMoneyValue = 0 - self.LVLimit = 0 - self.BaseItemCount = 0 - self.BaseItemList = list() - self.RandItemCount = 0 - self.RandItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 10 - length += 10 - length += 1 - for i in range(self.RoundTimeCount): - length += self.RoundTimeList[i].GetLength() - length += 4 - length += 1 - length += 4 - length += 1 - length += 1 - length += 4 - length += 2 - length += 1 - for i in range(self.BaseItemCount): - length += self.BaseItemList[i].GetLength() - length += 1 - for i in range(self.RandItemCount): - length += self.RandItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ZoneID) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteBYTE(data, self.RoundTimeCount) - for i in range(self.RoundTimeCount): - data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer()) - data = CommFunc.WriteDWORD(data, self.RoundID) - data = CommFunc.WriteBYTE(data, self.RoundNum) - data = CommFunc.WriteDWORD(data, self.SuperItemID) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType) - data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue) - data = CommFunc.WriteWORD(data, self.LVLimit) - data = CommFunc.WriteBYTE(data, self.BaseItemCount) - for i in range(self.BaseItemCount): - data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RandItemCount) - for i in range(self.RandItemCount): - data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ZoneID:%d, - StartDate:%s, - EndtDate:%s, - RoundTimeCount:%d, - RoundTimeList:%s, - RoundID:%d, - RoundNum:%d, - SuperItemID:%d, - SuperItemCount:%d, - SuperItemMoneyType:%d, - SuperItemMoneyValue:%d, - LVLimit:%d, - BaseItemCount:%d, - BaseItemList:%s, - RandItemCount:%d, - RandItemList:%s - '''\ - %( - self.Head.OutputString(), - self.ZoneID, - self.StartDate, - self.EndtDate, - self.RoundTimeCount, - "...", - self.RoundID, - self.RoundNum, - self.SuperItemID, - self.SuperItemCount, - self.SuperItemMoneyType, - self.SuperItemMoneyValue, - self.LVLimit, - self.BaseItemCount, - "...", - self.RandItemCount, - "..." - ) - return DumpString - - -m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo - - -#------------------------------------------------------ #A1 25 请求切换地图失败#tagMCChangeMapFail class tagMCChangeMapFail(Structure): @@ -32083,6 +12379,2004 @@ #------------------------------------------------------ +# A4 0C 多仙盟boss活动信息 #tagGCAllFamilyBossInfo + +class tagGCAllFamilyBossInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsEnd", c_ubyte), # 是否已结束 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0C + 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 = 0xA4 + self.SubCmd = 0x0C + self.IsEnd = 0 + return + + def GetLength(self): + return sizeof(tagGCAllFamilyBossInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0C 多仙盟boss活动信息 //tagGCAllFamilyBossInfo: + Cmd:%s, + SubCmd:%s, + IsEnd:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsEnd + ) + return DumpString + + +m_NAtagGCAllFamilyBossInfo=tagGCAllFamilyBossInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossInfo.Cmd,m_NAtagGCAllFamilyBossInfo.SubCmd))] = m_NAtagGCAllFamilyBossInfo + + +#------------------------------------------------------ +# A4 11 传功邀请信息 #tagGCChuangongInviteInfo + +class tagGCChuangongInviteInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + 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.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo + + +#------------------------------------------------------ +# A4 12 传功开始 #tagGCChuangongStart + +class tagGCChuangongStart(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +m_NAtagGCChuangongStart=tagGCChuangongStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart + + +#------------------------------------------------------ +# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo + +class tagGCFakeFamilyInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + FakeIDList = list() #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0A + 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.FakeIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0A + self.Count = 0 + self.FakeIDList = 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.FakeIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + FakeIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo + + +#------------------------------------------------------ +# A4 03 家族行为信息 #tagGCFamilyActionInfo + +class tagGCFamilyAction(Structure): + Time = 0 #(DWORD Time)//时间 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name) + Value1 = 0 #(DWORD Value1)//数值1 + Value2 = 0 #(DWORD Value2)//数值2 + Value3 = 0 #(DWORD Value3)//数值3 + Value4 = 0 #(DWORD Value4)//数值4 + Value5 = 0 #(DWORD Value5)//数值5 + Value6 = 0 #(DWORD Value6)//数值6 + UseDataLen = 0 #(WORD UseDataLen) + UseData = "" #(String UseData) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UseDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UseData,_pos = CommFunc.ReadString(_lpData, _pos,self.UseDataLen) + return _pos + + def Clear(self): + self.Time = 0 + self.NameLen = 0 + self.Name = "" + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.UseDataLen = 0 + self.UseData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.Name) + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UseData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteWORD(data, self.UseDataLen) + data = CommFunc.WriteString(data, self.UseDataLen, self.UseData) + return data + + def OutputString(self): + DumpString = ''' + Time:%d, + NameLen:%d, + Name:%s, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + UseDataLen:%d, + UseData:%s + '''\ + %( + self.Time, + self.NameLen, + self.Name, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.UseDataLen, + self.UseData + ) + return DumpString + + +class tagGCFamilyActionInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)//家族ID + ActionType = 0 #(BYTE ActionType)//类型 + Count = 0 #(WORD Count)//数量 + FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temFamilyActionList = tagGCFamilyAction() + _pos = temFamilyActionList.ReadData(_lpData, _pos) + self.FamilyActionList.append(temFamilyActionList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x03 + self.FamilyID = 0 + self.ActionType = 0 + self.Count = 0 + self.FamilyActionList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 2 + for i in range(self.Count): + length += self.FamilyActionList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.ActionType) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.FamilyActionList[i].GetLength(), self.FamilyActionList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + ActionType:%d, + Count:%d, + FamilyActionList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.ActionType, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFamilyActionInfo=tagGCFamilyActionInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyActionInfo.Head.Cmd,m_NAtagGCFamilyActionInfo.Head.SubCmd))] = m_NAtagGCFamilyActionInfo + + +#------------------------------------------------------ +# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo + +class tagGCFamilyBosFBInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 仙盟累计伤血,亿求余部分 + ("HurtTotalPoint", c_int), # 仙盟累计伤血,亿整除部分 + ("FightMemCount", c_ubyte), # 目前正在仙盟boss副本中的成员数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0E + 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 = 0xA4 + self.SubCmd = 0x0E + self.HurtTotal = 0 + self.HurtTotalPoint = 0 + self.FightMemCount = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyBosFBInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalPoint:%d, + FightMemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalPoint, + self.FightMemCount + ) + return DumpString + + +m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo + + +#------------------------------------------------------ +# A4 02 家族boss副本开启及击杀信息 #tagGCFamilyBossFBInfo + +class tagGCFamilyBossFBInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsOpen", c_int), # 是否已开启 + ("OpenCnt", c_ubyte), # 本周已开启次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + 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 = 0xA4 + self.SubCmd = 0x02 + self.IsOpen = 0 + self.OpenCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyBossFBInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 02 家族boss副本开启及击杀信息 //tagGCFamilyBossFBInfo: + Cmd:%s, + SubCmd:%s, + IsOpen:%d, + OpenCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsOpen, + self.OpenCnt + ) + return DumpString + + +m_NAtagGCFamilyBossFBInfo=tagGCFamilyBossFBInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBossFBInfo.Cmd,m_NAtagGCFamilyBossFBInfo.SubCmd))] = m_NAtagGCFamilyBossFBInfo + + +#------------------------------------------------------ +# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo + +class tagFGrabRedPacketInfo(Structure): + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//名字 + PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.Name = "" + self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 + self.MoneyNum = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.Name) + length += 1 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteBYTE(data, self.PlayeJob) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.MoneyNum) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + Name:%s, + PlayeJob:%d, + Face:%d, + FacePic:%d, + MoneyNum:%d + '''\ + %( + self.NameLen, + self.Name, + self.PlayeJob, + self.Face, + self.FacePic, + self.MoneyNum + ) + return DumpString + + +class tagGCFamilyRedPacketGrabInfo(Structure): + Head = tagHead() + RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID + Count = 0 #(BYTE Count)//数量 + GrabInfo = list() #(vector<tagFGrabRedPacketInfo> GrabInfo)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGrabInfo = tagFGrabRedPacketInfo() + _pos = temGrabInfo.ReadData(_lpData, _pos) + self.GrabInfo.append(temGrabInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x05 + self.RedPacketID = 0 + self.Count = 0 + self.GrabInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.GrabInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.RedPacketID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GrabInfo[i].GetLength(), self.GrabInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RedPacketID:%d, + Count:%d, + GrabInfo:%s + '''\ + %( + self.Head.OutputString(), + self.RedPacketID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFamilyRedPacketGrabInfo=tagGCFamilyRedPacketGrabInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketGrabInfo.Head.Cmd,m_NAtagGCFamilyRedPacketGrabInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketGrabInfo + + +#------------------------------------------------------ +# A4 04 家族红包总信息 #tagGCFamilyRedPacketInfo + +class tagFRedPacketInfo(Structure): + RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID + PlayerID = 0 #(DWORD PlayerID)//玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//玩家名字 + Time = 0 #(DWORD Time)//时间 + PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + MoneyType = 0 #(BYTE MoneyType)//金钱类型 + MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 + GetWay = 0 #(BYTE GetWay)//获得途径 + PacketCnt = 0 #(BYTE PacketCnt)//可抢个数 + State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完 + WishLen = 0 #(BYTE WishLen) + Wish = "" #(String Wish)//祝福语 + IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen) + self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.RedPacketID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.Time = 0 + self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 + self.MoneyType = 0 + self.MoneyNum = 0 + self.GetWay = 0 + self.PacketCnt = 0 + self.State = 0 + self.WishLen = 0 + self.Wish = "" + self.IsAnonymous = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 4 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 + length += 1 + length += 1 + length += 1 + length += 1 + length += len(self.Wish) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.RedPacketID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteBYTE(data, self.PlayeJob) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteDWORD(data, self.MoneyNum) + data = CommFunc.WriteBYTE(data, self.GetWay) + data = CommFunc.WriteBYTE(data, self.PacketCnt) + data = CommFunc.WriteBYTE(data, self.State) + data = CommFunc.WriteBYTE(data, self.WishLen) + data = CommFunc.WriteString(data, self.WishLen, self.Wish) + data = CommFunc.WriteBYTE(data, self.IsAnonymous) + return data + + def OutputString(self): + DumpString = ''' + RedPacketID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + Time:%d, + PlayeJob:%d, + Face:%d, + FacePic:%d, + MoneyType:%d, + MoneyNum:%d, + GetWay:%d, + PacketCnt:%d, + State:%d, + WishLen:%d, + Wish:%s, + IsAnonymous:%d + '''\ + %( + self.RedPacketID, + self.PlayerID, + self.NameLen, + self.Name, + self.Time, + self.PlayeJob, + self.Face, + self.FacePic, + self.MoneyType, + self.MoneyNum, + self.GetWay, + self.PacketCnt, + self.State, + self.WishLen, + self.Wish, + self.IsAnonymous + ) + return DumpString + + +class tagGCFamilyRedPacketInfo(Structure): + Head = tagHead() + IsAll = 0 #(BYTE IsAll)//是否全部红包 + Count = 0 #(BYTE Count)//红包数量 + RedPacketInfo = list() #(vector<tagFRedPacketInfo> RedPacketInfo)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temRedPacketInfo = tagFRedPacketInfo() + _pos = temRedPacketInfo.ReadData(_lpData, _pos) + self.RedPacketInfo.append(temRedPacketInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x04 + self.IsAll = 0 + self.Count = 0 + self.RedPacketInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.RedPacketInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsAll) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.RedPacketInfo[i].GetLength(), self.RedPacketInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IsAll:%d, + Count:%d, + RedPacketInfo:%s + '''\ + %( + self.Head.OutputString(), + self.IsAll, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFamilyRedPacketInfo=tagGCFamilyRedPacketInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketInfo.Head.Cmd,m_NAtagGCFamilyRedPacketInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketInfo + + +#------------------------------------------------------ +# A4 06 家族仓库物品信息 #tagGCFamilyStoreItemInfo + +class tagGCFamilyStoreItem(Structure): + Index = 0 #(BYTE Index)// 仓库格子索引,从0开始代表第一格 + ItemID = 0 #(DWORD ItemID)// 物品ID + ItemDataLen = 0 #(WORD ItemDataLen) + ItemData = "" #(String ItemData)//size = ItemDataLen + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen) + return _pos + + def Clear(self): + self.Index = 0 + self.ItemID = 0 + self.ItemDataLen = 0 + self.ItemData = "" + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 2 + length += len(self.ItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Index) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemDataLen) + data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData) + return data + + def OutputString(self): + DumpString = ''' + Index:%d, + ItemID:%d, + ItemDataLen:%d, + ItemData:%s + '''\ + %( + self.Index, + self.ItemID, + self.ItemDataLen, + self.ItemData + ) + return DumpString + + +class tagGCFamilyStoreItemInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//数量 + StoreItemList = list() #(vector<tagGCFamilyStoreItem> StoreItemList)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x06 + 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): + temStoreItemList = tagGCFamilyStoreItem() + _pos = temStoreItemList.ReadData(_lpData, _pos) + self.StoreItemList.append(temStoreItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x06 + self.Count = 0 + self.StoreItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.StoreItemList[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.StoreItemList[i].GetLength(), self.StoreItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + StoreItemList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFamilyStoreItemInfo=tagGCFamilyStoreItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemInfo.Head.Cmd,m_NAtagGCFamilyStoreItemInfo.Head.SubCmd))] = m_NAtagGCFamilyStoreItemInfo + + +#------------------------------------------------------ +# A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear + +class tagGCFamilyStoreItemClear(Structure): + Head = tagHead() + ClearType = 0 #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除 + IndexCount = 0 #(BYTE IndexCount) + IndexList = list() #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ClearType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.IndexCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.IndexList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x07 + self.ClearType = 0 + self.IndexCount = 0 + self.IndexList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 * self.IndexCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ClearType) + data = CommFunc.WriteBYTE(data, self.IndexCount) + for i in range(self.IndexCount): + data = CommFunc.WriteBYTE(data, self.IndexList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ClearType:%d, + IndexCount:%d, + IndexList:%s + '''\ + %( + self.Head.OutputString(), + self.ClearType, + self.IndexCount, + "..." + ) + return DumpString + + +m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear + + +#------------------------------------------------------ +# A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo + +class tagGCFamilySWRHInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HasJoin", c_ubyte), # 是否已参与 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA4 + self.SubCmd = 0x09 + self.HasJoin = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilySWRHInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 09 家族守卫人皇信息通知 //tagGCFamilySWRHInfo: + Cmd:%s, + SubCmd:%s, + HasJoin:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HasJoin + ) + return DumpString + + +m_NAtagGCFamilySWRHInfo=tagGCFamilySWRHInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilySWRHInfo.Cmd,m_NAtagGCFamilySWRHInfo.SubCmd))] = m_NAtagGCFamilySWRHInfo + + +#------------------------------------------------------ +# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo + +class tagGCPlayerJoinFamilyWarInfo(Structure): + Head = tagHead() + JoinFamilyID = 0 #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包 + JoinFamilyNameLen = 0 #(BYTE JoinFamilyNameLen) + JoinFamilyName = "" #(String JoinFamilyName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0B + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0B + self.JoinFamilyID = 0 + self.JoinFamilyNameLen = 0 + self.JoinFamilyName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.JoinFamilyName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.JoinFamilyID) + data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen) + data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + JoinFamilyID:%d, + JoinFamilyNameLen:%d, + JoinFamilyName:%s + '''\ + %( + self.Head.OutputString(), + self.JoinFamilyID, + self.JoinFamilyNameLen, + self.JoinFamilyName + ) + return DumpString + + +m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo + + +#------------------------------------------------------ +# A4 08 查看家族 #tagGCPyAllFamilyView + +class tagGCPyFamilyView(Structure): + FamilyIndex = 0 #(WORD FamilyIndex) + FamilyID = 0 #(DWORD FamilyID)//家族ID + FamilyNameLen = 0 #(BYTE FamilyNameLen) + FamilyName = "" #(String FamilyName)//size = FamilyNameLen + LeaderID = 0 #(DWORD LeaderID)//族长ID + LeaderNameLen = 0 #(BYTE LeaderNameLen) + LeaderName = "" #(String LeaderName)//size = LeaderNameLen + LeaderOfficialRank = 0 #(BYTE LeaderOfficialRank)//境界 + FamilyLV = 0 #(WORD FamilyLV)//家族等级 + FamilyMemberCount = 0 #(WORD FamilyMemberCount)//家族人数 + JoinAccept = 0 #(BYTE JoinAccept)//申请状态 + WarRank = 0 #(BYTE WarRank)//联赛排名 + TotalFightPower = 0 #(DWORD TotalFightPower)//总战力,不足1个亿的部分 + TotalFightPowerEx = 0 #(DWORD TotalFightPowerEx)//总战力点,1点=1亿 + EmblemID = 0 #(BYTE EmblemID)//徽章ID + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FamilyIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyNameLen) + self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,self.LeaderNameLen) + self.LeaderOfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FamilyMemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.JoinAccept,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.FamilyIndex = 0 + self.FamilyID = 0 + self.FamilyNameLen = 0 + self.FamilyName = "" + self.LeaderID = 0 + self.LeaderNameLen = 0 + self.LeaderName = "" + self.LeaderOfficialRank = 0 + self.FamilyLV = 0 + self.FamilyMemberCount = 0 + self.JoinAccept = 0 + self.WarRank = 0 + self.TotalFightPower = 0 + self.TotalFightPowerEx = 0 + self.EmblemID = 0 + return + + def GetLength(self): + length = 0 + length += 2 + length += 4 + length += 1 + length += len(self.FamilyName) + length += 4 + length += 1 + length += len(self.LeaderName) + length += 1 + length += 2 + length += 2 + length += 1 + length += 1 + length += 4 + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteWORD(data, self.FamilyIndex) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.FamilyNameLen) + data = CommFunc.WriteString(data, self.FamilyNameLen, self.FamilyName) + data = CommFunc.WriteDWORD(data, self.LeaderID) + data = CommFunc.WriteBYTE(data, self.LeaderNameLen) + data = CommFunc.WriteString(data, self.LeaderNameLen, self.LeaderName) + data = CommFunc.WriteBYTE(data, self.LeaderOfficialRank) + data = CommFunc.WriteWORD(data, self.FamilyLV) + data = CommFunc.WriteWORD(data, self.FamilyMemberCount) + data = CommFunc.WriteBYTE(data, self.JoinAccept) + data = CommFunc.WriteBYTE(data, self.WarRank) + data = CommFunc.WriteDWORD(data, self.TotalFightPower) + data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx) + data = CommFunc.WriteBYTE(data, self.EmblemID) + return data + + def OutputString(self): + DumpString = ''' + FamilyIndex:%d, + FamilyID:%d, + FamilyNameLen:%d, + FamilyName:%s, + LeaderID:%d, + LeaderNameLen:%d, + LeaderName:%s, + LeaderOfficialRank:%d, + FamilyLV:%d, + FamilyMemberCount:%d, + JoinAccept:%d, + WarRank:%d, + TotalFightPower:%d, + TotalFightPowerEx:%d, + EmblemID:%d + '''\ + %( + self.FamilyIndex, + self.FamilyID, + self.FamilyNameLen, + self.FamilyName, + self.LeaderID, + self.LeaderNameLen, + self.LeaderName, + self.LeaderOfficialRank, + self.FamilyLV, + self.FamilyMemberCount, + self.JoinAccept, + self.WarRank, + self.TotalFightPower, + self.TotalFightPowerEx, + self.EmblemID + ) + return DumpString + + +class tagGCPyAllFamilyView(Structure): + Head = tagHead() + TotalCount = 0 #(DWORD TotalCount)//一共有多少页 + CurPage = 0 #(WORD CurPage)//当前第几页, 每页个数:FAMILY_VIEW_PAGE_COUNT + PageCount = 0 #(BYTE PageCount)//这一页有多少数目 + Family = list() #(vector<tagGCPyFamilyView> Family)//size = PageCount + IsSearching = 0 #(BYTE IsSearching)//是否在模糊搜索状态下 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CurPage,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PageCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PageCount): + temFamily = tagGCPyFamilyView() + _pos = temFamily.ReadData(_lpData, _pos) + self.Family.append(temFamily) + self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x08 + self.TotalCount = 0 + self.CurPage = 0 + self.PageCount = 0 + self.Family = list() + self.IsSearching = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + for i in range(self.PageCount): + length += self.Family[i].GetLength() + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TotalCount) + data = CommFunc.WriteWORD(data, self.CurPage) + data = CommFunc.WriteBYTE(data, self.PageCount) + for i in range(self.PageCount): + data = CommFunc.WriteString(data, self.Family[i].GetLength(), self.Family[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsSearching) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TotalCount:%d, + CurPage:%d, + PageCount:%d, + Family:%s, + IsSearching:%d + '''\ + %( + self.Head.OutputString(), + self.TotalCount, + self.CurPage, + self.PageCount, + "...", + self.IsSearching + ) + return DumpString + + +m_NAtagGCPyAllFamilyView=tagGCPyAllFamilyView() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPyAllFamilyView.Head.Cmd,m_NAtagGCPyAllFamilyView.Head.SubCmd))] = m_NAtagGCPyAllFamilyView + + +#------------------------------------------------------ +# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes + +class tagGCServerCreatFamilyTimes(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Times", c_int), #建盟次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0D + 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 = 0xA4 + self.SubCmd = 0x0D + self.Times = 0 + return + + def GetLength(self): + return sizeof(tagGCServerCreatFamilyTimes) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes: + Cmd:%s, + SubCmd:%s, + Times:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Times + ) + return DumpString + + +m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes + + +#------------------------------------------------------ +# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo + +class tagGCTagFamilyMember(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//size = NameLen + FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级 + LV = 0 #(WORD LV) + Job = 0 #(BYTE Job)//职业 + Face = 0 #(DWORD Face)//头像 + FacePic = 0 #(DWORD FacePic)//头像外框 + OfficialRank = 0 #(BYTE OfficialRank)//境界 + FightPower = 0 #(DWORD FightPower)//成员战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//成员战力,整除亿部分 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.FamilyLV = 0 + self.LV = 0 + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.OfficialRank = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.Name) + length += 1 + length += 2 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteBYTE(data, self.FamilyLV) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteBYTE(data, self.OfficialRank) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + Name:%s, + FamilyLV:%d, + LV:%d, + Job:%d, + Face:%d, + FacePic:%d, + OfficialRank:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.Name, + self.FamilyLV, + self.LV, + self.Job, + self.Face, + self.FacePic, + self.OfficialRank, + self.FightPower, + self.FightPowerEx + ) + return DumpString + + +class tagGCTagFamilyInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID) + FamilyName = "" #(char FamilyName[33])//家族名称 + FamilyLV = 0 #(WORD FamilyLV)//家族等级 + BroadcastLen = 0 #(WORD BroadcastLen)//公告 + Broadcast = "" #(String Broadcast)//size = BroadcastLen + MemberCount = 0 #(WORD MemberCount)//人数 + Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount + FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 + EmblemID = 0 #(DWORD EmblemID)//徽章ID + ServerID = 0 #(DWORD ServerID)//仙盟区服ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen) + self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.MemberCount): + temMember = tagGCTagFamilyMember() + _pos = temMember.ReadData(_lpData, _pos) + self.Member.append(temMember) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x13 + self.FamilyID = 0 + self.FamilyName = "" + self.FamilyLV = 0 + self.BroadcastLen = 0 + self.Broadcast = "" + self.MemberCount = 0 + self.Member = list() + self.FightPower = 0 + self.FightPowerEx = 0 + self.EmblemID = 0 + self.ServerID = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 2 + length += 2 + length += len(self.Broadcast) + length += 2 + for i in range(self.MemberCount): + length += self.Member[i].GetLength() + 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.FamilyID) + data = CommFunc.WriteString(data, 33, self.FamilyName) + data = CommFunc.WriteWORD(data, self.FamilyLV) + data = CommFunc.WriteWORD(data, self.BroadcastLen) + data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast) + data = CommFunc.WriteWORD(data, self.MemberCount) + for i in range(self.MemberCount): + data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.EmblemID) + data = CommFunc.WriteDWORD(data, self.ServerID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + FamilyName:%s, + FamilyLV:%d, + BroadcastLen:%d, + Broadcast:%s, + MemberCount:%d, + Member:%s, + FightPower:%d, + FightPowerEx:%d, + EmblemID:%d, + ServerID:%d + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.FamilyName, + self.FamilyLV, + self.BroadcastLen, + self.Broadcast, + self.MemberCount, + "...", + self.FightPower, + self.FightPowerEx, + self.EmblemID, + self.ServerID + ) + return DumpString + + +m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo + + +#------------------------------------------------------ +#A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo + +class tagtMemberInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)//玩家ID + NameLen = 0 #(BYTE NameLen)//名字长度 + Name = "" #(String Name)//size=NameLen + PlayerLV = 0 #(WORD PlayerLV)//玩家等级 + PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 + PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分 + PlayeFightPowerEx = 0 #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿 + RequestTime = 0 #(DWORD RequestTime)//申请时间 + IsOnLine = 0 #(BYTE IsOnLine)//是否在线 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.PlayerLV = 0 + self.PlayeJob = 0 + self.PlayeFightPower = 0 + self.PlayeFightPowerEx = 0 + self.RequestTime = 0 + self.IsOnLine = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.PlayerLV) + data = CommFunc.WriteBYTE(data, self.PlayeJob) + data = CommFunc.WriteDWORD(data, self.PlayeFightPower) + data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx) + data = CommFunc.WriteDWORD(data, self.RequestTime) + data = CommFunc.WriteBYTE(data, self.IsOnLine) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + Name:%s, + PlayerLV:%d, + PlayeJob:%d, + PlayeFightPower:%d, + PlayeFightPowerEx:%d, + RequestTime:%d, + IsOnLine:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.Name, + self.PlayerLV, + self.PlayeJob, + self.PlayeFightPower, + self.PlayeFightPowerEx, + self.RequestTime, + self.IsOnLine + ) + return DumpString + + +class tagGCViewFamilyRequestInfo(Structure): + Head = tagHead() + RequestMemberCount = 0 #(BYTE RequestMemberCount)//申请成员的数量 + MemberInfo = list() #(vector<tagtMemberInfo> MemberInfo)//size = RequestMemberCount + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RequestMemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RequestMemberCount): + temMemberInfo = tagtMemberInfo() + _pos = temMemberInfo.ReadData(_lpData, _pos) + self.MemberInfo.append(temMemberInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x01 + self.RequestMemberCount = 0 + self.MemberInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RequestMemberCount): + length += self.MemberInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RequestMemberCount) + for i in range(self.RequestMemberCount): + data = CommFunc.WriteString(data, self.MemberInfo[i].GetLength(), self.MemberInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RequestMemberCount:%d, + MemberInfo:%s + '''\ + %( + self.Head.OutputString(), + self.RequestMemberCount, + "..." + ) + return DumpString + + +m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo + + +#------------------------------------------------------ # A5 35 王者仙盟每日俸禄奖励状态 #tagMCChampionFamilyDailyReward class tagMCChampionFamilyDailyReward(Structure): @@ -37721,6 +20015,3350 @@ m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop + + +#------------------------------------------------------ +# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo + +class tagGCArenaBattlePlayerInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + 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.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.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score + ) + return DumpString + + +m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo + + +#------------------------------------------------------ +# 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)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + AddScoreLen = 0 #(BYTE AddScoreLen) + AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 + IsWin = 0 #(BYTE IsWin)//是否获胜 + Time = 0 #(DWORD Time)//时间戳 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_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) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.FightPowerEx = 0 + self.Score = 0 + self.AddScoreLen = 0 + self.AddScore = "" + self.IsWin = 0 + self.Time = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.AddScore) + length += 1 + length += 4 + 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.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + 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) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d, + AddScoreLen:%d, + AddScore:%s, + IsWin:%d, + Time:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score, + self.AddScoreLen, + self.AddScore, + self.IsWin, + self.Time, + self.Face, + self.FacePic + ) + 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)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.FightPowerEx = 0 + self.Score = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + 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.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score, + self.Face, + self.FacePic + ) + 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): + _pack_ = 1 + _fields_ = [ + ("BossID", c_int), # bossID + ("AddState", 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.BossID = 0 + self.AddState = 0 + return + + def GetLength(self): + return sizeof(tagGCBossAttention) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 09 通知BOSS关注记录 //tagGCBossAttentionInfo: + BossID:%d, + AddState:%d + '''\ + %( + self.BossID, + self.AddState + ) + return DumpString + + +class tagGCBossAttentionInfo(Structure): + Head = tagHead() + BossCnt = 0 #(BYTE BossCnt)//boss个数 + BossList = list() #(vector<tagGCBossAttention> BossList)//列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BossCnt): + temBossList = tagGCBossAttention() + _pos = temBossList.ReadData(_lpData, _pos) + self.BossList.append(temBossList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x09 + self.BossCnt = 0 + self.BossList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.BossCnt): + length += self.BossList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BossCnt) + for i in range(self.BossCnt): + data = CommFunc.WriteString(data, self.BossList[i].GetLength(), self.BossList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BossCnt:%d, + BossList:%s + '''\ + %( + self.Head.OutputString(), + self.BossCnt, + "..." + ) + return DumpString + + +m_NAtagGCBossAttentionInfo=tagGCBossAttentionInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossAttentionInfo.Head.Cmd,m_NAtagGCBossAttentionInfo.Head.SubCmd))] = m_NAtagGCBossAttentionInfo + + +#------------------------------------------------------ +# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo + +class tagGCBossShuntLineState(Structure): + BossID = 0 #(DWORD BossID)// bossID + LineCount = 0 #(BYTE LineCount) + LineIDList = list() #(vector<BYTE> LineIDList)// 线路ID列表 + StateList = list() #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.LineCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.LineIDList.append(value) + for i in range(self.LineCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.StateList.append(value) + return _pos + + def Clear(self): + self.BossID = 0 + self.LineCount = 0 + self.LineIDList = list() + self.StateList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 * self.LineCount + length += 1 * self.LineCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.BossID) + data = CommFunc.WriteBYTE(data, self.LineCount) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.LineIDList[i]) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.StateList[i]) + return data + + def OutputString(self): + DumpString = ''' + BossID:%d, + LineCount:%d, + LineIDList:%s, + StateList:%s + '''\ + %( + self.BossID, + self.LineCount, + "...", + "..." + ) + return DumpString + + +class tagGCBossShuntLineStateInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BossLineStateInfo = list() #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + 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): + temBossLineStateInfo = tagGCBossShuntLineState() + _pos = temBossLineStateInfo.ReadData(_lpData, _pos) + self.BossLineStateInfo.append(temBossLineStateInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x01 + self.Count = 0 + self.BossLineStateInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BossLineStateInfo[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.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BossLineStateInfo:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo + + +#------------------------------------------------------ +# A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice + +class tagGCBourseItemPrice(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ItemID", c_int), #物品ID + ("Price", c_int), #最新成交单价 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0xAC + 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 = 0xA9 + self.SubCmd = 0xAC + self.ItemID = 0 + self.Price = 0 + return + + def GetLength(self): + return sizeof(tagGCBourseItemPrice) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 AC 交易所物品最新成交价通知 //tagGCBourseItemPrice: + Cmd:%s, + SubCmd:%s, + ItemID:%d, + Price:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ItemID, + self.Price + ) + return DumpString + + +m_NAtagGCBourseItemPrice=tagGCBourseItemPrice() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseItemPrice.Cmd,m_NAtagGCBourseItemPrice.SubCmd))] = m_NAtagGCBourseItemPrice + + +#------------------------------------------------------ +# A9 AB 交易所交易记录通知 #tagGCBourseRecordInfo + +class tagGCBourseRecord(Structure): + Type = 0 #(BYTE Type)//类型 0-购买 1-卖出 + Timestamp = 0 #(DWORD Timestamp)//时间戳 + TradeTax = 0 #(DWORD TradeTax)//交易税 + TradeMoney = 0 #(DWORD TradeMoney)//收支 + ItemDataLen = 0 #(WORD ItemDataLen) + ItemData = "" #(String ItemData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Timestamp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TradeTax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TradeMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen) + return _pos + + def Clear(self): + self.Type = 0 + self.Timestamp = 0 + self.TradeTax = 0 + self.TradeMoney = 0 + self.ItemDataLen = 0 + self.ItemData = "" + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.ItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteDWORD(data, self.Timestamp) + data = CommFunc.WriteDWORD(data, self.TradeTax) + data = CommFunc.WriteDWORD(data, self.TradeMoney) + data = CommFunc.WriteWORD(data, self.ItemDataLen) + data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData) + return data + + def OutputString(self): + DumpString = ''' + Type:%d, + Timestamp:%d, + TradeTax:%d, + TradeMoney:%d, + ItemDataLen:%d, + ItemData:%s + '''\ + %( + self.Type, + self.Timestamp, + self.TradeTax, + self.TradeMoney, + self.ItemDataLen, + self.ItemData + ) + return DumpString + + +class tagGCBourseRecordInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//数量 + RecordList = list() #(vector<tagGCBourseRecord> RecordList)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAB + 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): + temRecordList = tagGCBourseRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAB + self.Count = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.RecordList[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.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCBourseRecordInfo=tagGCBourseRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseRecordInfo.Head.Cmd,m_NAtagGCBourseRecordInfo.Head.SubCmd))] = m_NAtagGCBourseRecordInfo + + +#------------------------------------------------------ +#A9 AA 删除邮件通知 #tagGCDelCompensationResult + +class tagGCDelCompensationResult(Structure): + Head = tagHead() + GUID = "" #(char GUID[40]) + Result = 0 #(BYTE Result)// 删除状态 0 不成功 1成功 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAA + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAA + self.GUID = "" + self.Result = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.GUID) + data = CommFunc.WriteBYTE(data, self.Result) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GUID:%s, + Result:%d + '''\ + %( + self.Head.OutputString(), + self.GUID, + self.Result + ) + return DumpString + + +m_NAtagGCDelCompensationResult=tagGCDelCompensationResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelCompensationResult.Head.Cmd,m_NAtagGCDelCompensationResult.Head.SubCmd))] = m_NAtagGCDelCompensationResult + + +#------------------------------------------------------ +# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime + +class tagDogzTimeInfoObj(Structure): + _pack_ = 1 + _fields_ = [ + ("NPCID", c_int), # npcid + ("RefreshSecond", c_int), # 刷新倒计时, 秒 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.NPCID = 0 + self.RefreshSecond = 0 + return + + def GetLength(self): + return sizeof(tagDogzTimeInfoObj) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime: + NPCID:%d, + RefreshSecond:%d + '''\ + %( + self.NPCID, + self.RefreshSecond + ) + return DumpString + + +class tagGCDogzNPCRefreshTime(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)//信息个数 + InfoList = list() #(vector<tagDogzTimeInfoObj> InfoList)//信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temInfoList = tagDogzTimeInfoObj() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x04 + self.Cnt = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + 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.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime + + +#------------------------------------------------------ +# A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo + +class tagGCFriendSendEnergyInfo(Structure): + Head = tagHead() + DataSize = 0 #(DWORD DataSize) + SendData = "" #(String SendData)//赠送记录 + RecvSize = 0 #(DWORD RecvSize) + RecvData = "" #(String RecvData)//可接收记录 + HasRecvCnt = 0 #(DWORD HasRecvCnt)//已接收个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA9 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SendData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) + self.RecvSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecvData,_pos = CommFunc.ReadString(_lpData, _pos,self.RecvSize) + self.HasRecvCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA9 + self.DataSize = 0 + self.SendData = "" + self.RecvSize = 0 + self.RecvData = "" + self.HasRecvCnt = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += len(self.SendData) + length += 4 + length += len(self.RecvData) + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.DataSize) + data = CommFunc.WriteString(data, self.DataSize, self.SendData) + data = CommFunc.WriteDWORD(data, self.RecvSize) + data = CommFunc.WriteString(data, self.RecvSize, self.RecvData) + data = CommFunc.WriteDWORD(data, self.HasRecvCnt) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + DataSize:%d, + SendData:%s, + RecvSize:%d, + RecvData:%s, + HasRecvCnt:%d + '''\ + %( + self.Head.OutputString(), + self.DataSize, + self.SendData, + self.RecvSize, + self.RecvData, + self.HasRecvCnt + ) + return DumpString + + +m_NAtagGCFriendSendEnergyInfo=tagGCFriendSendEnergyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendSendEnergyInfo.Head.Cmd,m_NAtagGCFriendSendEnergyInfo.Head.SubCmd))] = m_NAtagGCFriendSendEnergyInfo + + +#------------------------------------------------------ +#A9 02 世界boss相关信息 #tagGCGameWorldBossInfo + +class tagBossInfoObj(Structure): + BossID = 0 #(DWORD BossID)// bossID + IsAlive = 0 #(BYTE IsAlive)// 是否存活 + RecordLen = 0 #(WORD RecordLen)// 长度 + KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen + RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 + RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.IsAlive,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen) + self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.BossID = 0 + self.IsAlive = 0 + self.RecordLen = 0 + self.KillRecord = "" + self.RefreshSecond = 0 + self.RefreshCD = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 2 + length += len(self.KillRecord) + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.BossID) + data = CommFunc.WriteBYTE(data, self.IsAlive) + data = CommFunc.WriteWORD(data, self.RecordLen) + data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord) + data = CommFunc.WriteDWORD(data, self.RefreshSecond) + data = CommFunc.WriteDWORD(data, self.RefreshCD) + return data + + def OutputString(self): + DumpString = ''' + BossID:%d, + IsAlive:%d, + RecordLen:%d, + KillRecord:%s, + RefreshSecond:%d, + RefreshCD:%d + '''\ + %( + self.BossID, + self.IsAlive, + self.RecordLen, + self.KillRecord, + self.RefreshSecond, + self.RefreshCD + ) + return DumpString + + +class tagGCGameWorldBossInfo(Structure): + Head = tagHead() + BossCnt = 0 #(BYTE BossCnt)//boss信息个数 + BossInfoList = list() #(vector<tagBossInfoObj> BossInfoList)//boss信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BossCnt): + temBossInfoList = tagBossInfoObj() + _pos = temBossInfoList.ReadData(_lpData, _pos) + self.BossInfoList.append(temBossInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x02 + self.BossCnt = 0 + self.BossInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.BossCnt): + length += self.BossInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BossCnt) + for i in range(self.BossCnt): + data = CommFunc.WriteString(data, self.BossInfoList[i].GetLength(), self.BossInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BossCnt:%d, + BossInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.BossCnt, + "..." + ) + return DumpString + + +m_NAtagGCGameWorldBossInfo=tagGCGameWorldBossInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGameWorldBossInfo.Head.Cmd,m_NAtagGCGameWorldBossInfo.Head.SubCmd))] = m_NAtagGCGameWorldBossInfo + + +#------------------------------------------------------ +# A9 08 渡劫副本护法通知 #tagGCRealmFBHelpInfo + +class tagGCRealmFBHelpInfo(Structure): + Head = tagHead() + PlayerName = "" #(char PlayerName[33])//玩家名字 + PlayerID = 0 #(DWORD PlayerID)//玩家ID + RealmLV = 0 #(BYTE RealmLV)//玩家境界 + Job = 0 #(BYTE Job)//玩家职业 + JobRank = 0 #(BYTE JobRank)//玩家职业阶级 + AtkAdd = 0 #(BYTE AtkAdd)//获得加成 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AtkAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x08 + self.PlayerName = "" + self.PlayerID = 0 + self.RealmLV = 0 + self.Job = 0 + self.JobRank = 0 + self.AtkAdd = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 33 + length += 4 + length += 1 + length += 1 + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobRank) + data = CommFunc.WriteBYTE(data, self.AtkAdd) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerName:%s, + PlayerID:%d, + RealmLV:%d, + Job:%d, + JobRank:%d, + AtkAdd:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerName, + self.PlayerID, + self.RealmLV, + self.Job, + self.JobRank, + self.AtkAdd + ) + return DumpString + + +m_NAtagGCRealmFBHelpInfo=tagGCRealmFBHelpInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRealmFBHelpInfo.Head.Cmd,m_NAtagGCRealmFBHelpInfo.Head.SubCmd))] = m_NAtagGCRealmFBHelpInfo + + +#------------------------------------------------------ +# A9 A7 通知可抢的红包信息 #tagGCGrabRedPacketInfo + +class tagGCGrabRedPacketInfo(Structure): + Head = tagHead() + RedPacketCnt = 0 #(DWORD RedPacketCnt)//可抢红包个数 + StrLen = 0 #(WORD StrLen)//字符串长度 + OwnerName = "" #(String OwnerName)//红包主人名字 + RedPacketID = 0 #(DWORD RedPacketID)//可抢红包ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA7 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RedPacketCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen) + self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA7 + self.RedPacketCnt = 0 + self.StrLen = 0 + self.OwnerName = "" + self.RedPacketID = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += len(self.OwnerName) + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.RedPacketCnt) + data = CommFunc.WriteWORD(data, self.StrLen) + data = CommFunc.WriteString(data, self.StrLen, self.OwnerName) + data = CommFunc.WriteDWORD(data, self.RedPacketID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RedPacketCnt:%d, + StrLen:%d, + OwnerName:%s, + RedPacketID:%d + '''\ + %( + self.Head.OutputString(), + self.RedPacketCnt, + self.StrLen, + self.OwnerName, + self.RedPacketID + ) + return DumpString + + +m_NAtagGCGrabRedPacketInfo=tagGCGrabRedPacketInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketInfo.Head.Cmd,m_NAtagGCGrabRedPacketInfo.Head.SubCmd))] = m_NAtagGCGrabRedPacketInfo + + +#------------------------------------------------------ +# A9 A6 通知抢红包结果 #tagGCGrabRedPacketResult + +class tagGCGrabRedPacketResult(Structure): + Head = tagHead() + StrLen = 0 #(WORD StrLen)//字符串长度 + OwnerName = "" #(String OwnerName)//红包主人名字 + TotalMoney = 0 #(DWORD TotalMoney)//红包总额 + DataSize = 0 #(DWORD DataSize) + GrabInfo = "" #(String GrabInfo)//抢红包具体结果 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA6 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen) + self.TotalMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GrabInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA6 + self.StrLen = 0 + self.OwnerName = "" + self.TotalMoney = 0 + self.DataSize = 0 + self.GrabInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += len(self.OwnerName) + length += 4 + length += 4 + length += len(self.GrabInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.StrLen) + data = CommFunc.WriteString(data, self.StrLen, self.OwnerName) + data = CommFunc.WriteDWORD(data, self.TotalMoney) + data = CommFunc.WriteDWORD(data, self.DataSize) + data = CommFunc.WriteString(data, self.DataSize, self.GrabInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StrLen:%d, + OwnerName:%s, + TotalMoney:%d, + DataSize:%d, + GrabInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StrLen, + self.OwnerName, + self.TotalMoney, + self.DataSize, + self.GrabInfo + ) + return DumpString + + +m_NAtagGCGrabRedPacketResult=tagGCGrabRedPacketResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketResult.Head.Cmd,m_NAtagGCGrabRedPacketResult.Head.SubCmd))] = m_NAtagGCGrabRedPacketResult + + +#------------------------------------------------------ +# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo + +class tagGCNotifyEquipClassEquip(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("Star", 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.Star = 0 + return + + def GetLength(self): + return sizeof(tagGCNotifyEquipClassEquip) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo: + ItemID:%d, + Star:%d + '''\ + %( + self.ItemID, + self.Star + ) + return DumpString + + +class tagGCNotifyEquipDetailInfo(Structure): + Head = tagHead() + ItemGUID = "" #(char ItemGUID[40]) + ItemID = 0 #(DWORD ItemID) + Star = 0 #(BYTE Star)//星级 + PlusLV = 0 #(WORD PlusLV)//强化等级 + EvolveLV = 0 #(BYTE EvolveLV)//进化等级 + WashLV = 0 #(BYTE WashLV)//洗练等级 + WashValueCount = 0 #(BYTE WashValueCount) + WashValueList = list() #(vector<DWORD> WashValueList)//洗练值 + StoneIDCount = 0 #(BYTE StoneIDCount) + StoneIDList = list() #(vector<DWORD> StoneIDList)//宝石 + ClassEquipCount = 0 #(BYTE ClassEquipCount) + ClassEquipList = list() #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WashValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.WashValueList.append(value) + self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.StoneIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.StoneIDList.append(value) + self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ClassEquipCount): + temClassEquipList = tagGCNotifyEquipClassEquip() + _pos = temClassEquipList.ReadData(_lpData, _pos) + self.ClassEquipList.append(temClassEquipList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x05 + self.ItemGUID = "" + self.ItemID = 0 + self.Star = 0 + self.PlusLV = 0 + self.EvolveLV = 0 + self.WashLV = 0 + self.WashValueCount = 0 + self.WashValueList = list() + self.StoneIDCount = 0 + self.StoneIDList = list() + self.ClassEquipCount = 0 + self.ClassEquipList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + length += 4 + length += 1 + length += 2 + length += 1 + length += 1 + length += 1 + length += 4 * self.WashValueCount + length += 1 + length += 4 * self.StoneIDCount + length += 1 + for i in range(self.ClassEquipCount): + length += self.ClassEquipList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteBYTE(data, self.Star) + data = CommFunc.WriteWORD(data, self.PlusLV) + data = CommFunc.WriteBYTE(data, self.EvolveLV) + data = CommFunc.WriteBYTE(data, self.WashLV) + data = CommFunc.WriteBYTE(data, self.WashValueCount) + for i in range(self.WashValueCount): + data = CommFunc.WriteDWORD(data, self.WashValueList[i]) + data = CommFunc.WriteBYTE(data, self.StoneIDCount) + for i in range(self.StoneIDCount): + data = CommFunc.WriteDWORD(data, self.StoneIDList[i]) + data = CommFunc.WriteBYTE(data, self.ClassEquipCount) + for i in range(self.ClassEquipCount): + data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ItemGUID:%s, + ItemID:%d, + Star:%d, + PlusLV:%d, + EvolveLV:%d, + WashLV:%d, + WashValueCount:%d, + WashValueList:%s, + StoneIDCount:%d, + StoneIDList:%s, + ClassEquipCount:%d, + ClassEquipList:%s + '''\ + %( + self.Head.OutputString(), + self.ItemGUID, + self.ItemID, + self.Star, + self.PlusLV, + self.EvolveLV, + self.WashLV, + self.WashValueCount, + "...", + self.StoneIDCount, + "...", + self.ClassEquipCount, + "..." + ) + return DumpString + + +m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo + + +#------------------------------------------------------ +#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount + +class tagGCOpenServerCampaignAwardCount(Structure): + Head = tagHead() + CampaignType = 0 #(BYTE CampaignType)//奖励类型 + AwardTypeCount = 0 #(BYTE AwardTypeCount)//奖品种类数量 + GotCountList = list() #(vector<DWORD> GotCountList)//奖品已领取数量列表,根据种类索引依次 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CampaignType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardTypeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.GotCountList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x03 + self.CampaignType = 0 + self.AwardTypeCount = 0 + self.GotCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.AwardTypeCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CampaignType) + data = CommFunc.WriteBYTE(data, self.AwardTypeCount) + for i in range(self.AwardTypeCount): + data = CommFunc.WriteDWORD(data, self.GotCountList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CampaignType:%d, + AwardTypeCount:%d, + GotCountList:%s + '''\ + %( + self.Head.OutputString(), + self.CampaignType, + self.AwardTypeCount, + "..." + ) + return DumpString + + +m_NAtagGCOpenServerCampaignAwardCount=tagGCOpenServerCampaignAwardCount() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCOpenServerCampaignAwardCount.Head.Cmd,m_NAtagGCOpenServerCampaignAwardCount.Head.SubCmd))] = m_NAtagGCOpenServerCampaignAwardCount + + +#------------------------------------------------------ +# A9 A2 排行榜信息#tagPYBillboardData + +class tagPYBillboardInfo(Structure): + OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名 + ID = 0 #(DWORD ID) + ID2 = 0 #(DWORD ID2) + Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 + Name2 = "" #(char Name2[65])//名字2 + Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 + Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级 + Value2 = 0 #(DWORD Value2)//排序依赖的值,比如,战斗力 + Value3 = 0 #(DWORD Value3)//附加值 + Value4 = 0 #(DWORD Value4)//附加值 + Value5 = 0 #(DWORD Value5)//附加值 + Value6 = 0 #(DWORD Value6)//附加值 + Value7 = 0 #(DWORD Value7)//附加值 + Value8 = 0 #(DWORD Value8)//附加值 + CmpValue = 0 #(DWORD CmpValue)// 比较权值 + CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 + CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + DataLen = 0 #(WORD DataLen) + UserData = "" #(String UserData)//附加 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) + self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) + return _pos + + def Clear(self): + self.OrderIndex = 0 + self.ID = 0 + self.ID2 = 0 + self.Name1 = "" + self.Name2 = "" + self.Type2 = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 + self.CmpValue = 0 + self.CmpValue2 = 0 + self.CmpValue3 = 0 + self.DataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 33 + length += 65 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OrderIndex) + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteDWORD(data, self.ID2) + data = CommFunc.WriteString(data, 33, self.Name1) + data = CommFunc.WriteString(data, 65, self.Name2) + data = CommFunc.WriteBYTE(data, self.Type2) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) + data = CommFunc.WriteDWORD(data, self.CmpValue) + data = CommFunc.WriteDWORD(data, self.CmpValue2) + data = CommFunc.WriteDWORD(data, self.CmpValue3) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + OrderIndex:%d, + ID:%d, + ID2:%d, + Name1:%s, + Name2:%s, + Type2:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, + CmpValue:%d, + CmpValue2:%d, + CmpValue3:%d, + DataLen:%d, + UserData:%s + '''\ + %( + self.OrderIndex, + self.ID, + self.ID2, + self.Name1, + self.Name2, + self.Type2, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, + self.CmpValue, + self.CmpValue2, + self.CmpValue3, + self.DataLen, + self.UserData + ) + return DumpString + + +class tagPYBillboardData(Structure): + Head = tagHead() + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 + BillboardCount = 0 #(BYTE BillboardCount) + Type = 0 #(BYTE Type)//排行榜类型 + Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA2 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillboardCount): + temBillboard = tagPYBillboardInfo() + _pos = temBillboard.ReadData(_lpData, _pos) + self.Billboard.append(temBillboard) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA2 + self.WatchID = 0 + self.BillboardCount = 0 + self.Type = 0 + self.Billboard = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + for i in range(self.BillboardCount): + length += self.Billboard[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.WatchID) + data = CommFunc.WriteBYTE(data, self.BillboardCount) + data = CommFunc.WriteBYTE(data, self.Type) + for i in range(self.BillboardCount): + data = CommFunc.WriteString(data, self.Billboard[i].GetLength(), self.Billboard[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WatchID:%d, + BillboardCount:%d, + Type:%d, + Billboard:%s + '''\ + %( + self.Head.OutputString(), + self.WatchID, + self.BillboardCount, + self.Type, + "..." + ) + return DumpString + + +m_NAtagPYBillboardData=tagPYBillboardData() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPYBillboardData.Head.Cmd,m_NAtagPYBillboardData.Head.SubCmd))] = m_NAtagPYBillboardData + + +#------------------------------------------------------ +# A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent + +class tagGCPYSpeakerContent(Structure): + Head = tagHead() + AccIDLen = 0 #(BYTE AccIDLen) + AccID = "" #(String AccID)//size = AccIDLen + PlayerID = 0 #(DWORD PlayerID)// 子服的玩家ID,该ID有值时为本服玩家 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//size = NameLen + SpeakerType = 0 #(BYTE SpeakerType) + TextLen = 0 #(WORD TextLen) + Text = "" #(String Text)//size = TextLen + ExtraValue = 0 #(DWORD ExtraValue)//附加值 + Extras = "" #(char Extras[256])//附加值列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA3 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) + self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA3 + self.AccIDLen = 0 + self.AccID = "" + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.SpeakerType = 0 + self.TextLen = 0 + self.Text = "" + self.ExtraValue = 0 + self.Extras = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.AccID) + length += 4 + length += 1 + length += len(self.Name) + length += 1 + length += 2 + length += len(self.Text) + length += 4 + length += 256 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AccIDLen) + data = CommFunc.WriteString(data, self.AccIDLen, self.AccID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteBYTE(data, self.SpeakerType) + data = CommFunc.WriteWORD(data, self.TextLen) + data = CommFunc.WriteString(data, self.TextLen, self.Text) + data = CommFunc.WriteDWORD(data, self.ExtraValue) + data = CommFunc.WriteString(data, 256, self.Extras) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AccIDLen:%d, + AccID:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + SpeakerType:%d, + TextLen:%d, + Text:%s, + ExtraValue:%d, + Extras:%s + '''\ + %( + self.Head.OutputString(), + self.AccIDLen, + self.AccID, + self.PlayerID, + self.NameLen, + self.Name, + self.SpeakerType, + self.TextLen, + self.Text, + self.ExtraValue, + self.Extras + ) + return DumpString + + +m_NAtagGCPYSpeakerContent=tagGCPYSpeakerContent() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPYSpeakerContent.Head.Cmd,m_NAtagGCPYSpeakerContent.Head.SubCmd))] = m_NAtagGCPYSpeakerContent + + +#------------------------------------------------------ +#A9 A1 查询玩家补偿结果封包#tagGCQueryCompensationResult + +class tagGCCompensationItem(Structure): + ItemID = 0 #(DWORD ItemID)//物品ID + Count = 0 #(DWORD Count)//数量 + IsBind = 0 #(BYTE IsBind)//是否绑定 + UserDataLen = 0 #(DWORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemID = 0 + self.Count = 0 + self.IsBind = 0 + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += 4 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteDWORD(data, self.Count) + data = CommFunc.WriteBYTE(data, self.IsBind) + data = CommFunc.WriteDWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemID:%d, + Count:%d, + IsBind:%d, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemID, + self.Count, + self.IsBind, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCCompensationPack(Structure): + GUID = "" #(char GUID[40])//补偿标识 + CreateTime = "" #(char CreateTime[30])//邮件接收时间 + TextLen = 0 #(DWORD TextLen)//文字内容长度 + Text = "" #(String Text)//文字内容 + Count = 0 #(BYTE Count)//当前补偿物品数 + IsRead = 0 #(BYTE IsRead)//已读状态 0 未读取 1已读取 + Gold = 0 #(DWORD Gold)//仙玉 + GoldPaper = 0 #(DWORD GoldPaper)//绑定仙玉 + Silver = 0 #(DWORD Silver)//铜钱 + Items = list() #(vector<tagGCCompensationItem> Items)//补偿物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30) + self.TextLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsRead,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos) + for i in range(self.Count): + temItems = tagGCCompensationItem() + _pos = temItems.ReadData(_lpData, _pos) + self.Items.append(temItems) + return _pos + + def Clear(self): + self.GUID = "" + self.CreateTime = "" + self.TextLen = 0 + self.Text = "" + self.Count = 0 + self.IsRead = 0 + self.Gold = 0 + self.GoldPaper = 0 + self.Silver = 0 + self.Items = list() + return + + def GetLength(self): + length = 0 + length += 40 + length += 30 + length += 4 + length += len(self.Text) + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + for i in range(self.Count): + length += self.Items[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.GUID) + data = CommFunc.WriteString(data, 30, self.CreateTime) + data = CommFunc.WriteDWORD(data, self.TextLen) + data = CommFunc.WriteString(data, self.TextLen, self.Text) + data = CommFunc.WriteBYTE(data, self.Count) + data = CommFunc.WriteBYTE(data, self.IsRead) + data = CommFunc.WriteDWORD(data, self.Gold) + data = CommFunc.WriteDWORD(data, self.GoldPaper) + data = CommFunc.WriteDWORD(data, self.Silver) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GUID:%s, + CreateTime:%s, + TextLen:%d, + Text:%s, + Count:%d, + IsRead:%d, + Gold:%d, + GoldPaper:%d, + Silver:%d, + Items:%s + '''\ + %( + self.GUID, + self.CreateTime, + self.TextLen, + self.Text, + self.Count, + self.IsRead, + self.Gold, + self.GoldPaper, + self.Silver, + "..." + ) + return DumpString + + +class tagGCQueryCompensationResult(Structure): + Head = tagHead() + Count = 0 #(WORD Count)//可领取补偿数 + PackList = list() #(vector<tagGCCompensationPack> PackList)//补偿物品信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA1 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPackList = tagGCCompensationPack() + _pos = temPackList.ReadData(_lpData, _pos) + self.PackList.append(temPackList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA1 + self.Count = 0 + self.PackList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.PackList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PackList[i].GetLength(), self.PackList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + PackList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCQueryCompensationResult=tagGCQueryCompensationResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryCompensationResult.Head.Cmd,m_NAtagGCQueryCompensationResult.Head.SubCmd))] = m_NAtagGCQueryCompensationResult + + +#------------------------------------------------------ +# A9 A8 通知可添加的好友信息 #tagGCRecommendFriendsInfo + +class tagRecommendFriendsData(Structure): + ID = 0 #(DWORD ID) + Name = "" #(char Name[33]) + LV = 0 #(DWORD LV)//等级 + Job = 0 #(BYTE Job) + RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ID = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 4 + length += 1 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteDWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + ID:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.ID, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCRecommendFriendsInfo(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)//信息数 + FriendsList = list() #(vector<tagRecommendFriendsData> FriendsList)//成员信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA8 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temFriendsList = tagRecommendFriendsData() + _pos = temFriendsList.ReadData(_lpData, _pos) + self.FriendsList.append(temFriendsList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xA8 + self.Cnt = 0 + self.FriendsList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + length += self.FriendsList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + FriendsList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo + + +#------------------------------------------------------ +# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo + +class tagGCSkyTowerPassPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.Face = 0 + self.FacePic = 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCSkyTowerPassFloor(Structure): + FloorID = 0 #(DWORD FloorID)// 层ID + PassPlayerCount = 0 #(BYTE PassPlayerCount)// 通关记录玩家数 + PassPlayerIDList = list() #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...] + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PassPlayerCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PassPlayerIDList.append(value) + return _pos + + def Clear(self): + self.FloorID = 0 + self.PassPlayerCount = 0 + self.PassPlayerIDList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 * self.PassPlayerCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FloorID) + data = CommFunc.WriteBYTE(data, self.PassPlayerCount) + for i in range(self.PassPlayerCount): + data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + FloorID:%d, + PassPlayerCount:%d, + PassPlayerIDList:%s + '''\ + %( + self.FloorID, + self.PassPlayerCount, + "..." + ) + return DumpString + + +class tagGCSkyTowerPassPlayerInfo(Structure): + Head = tagHead() + FloorCount = 0 #(WORD FloorCount) + PassFloorList = list() #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表 + PlayerCount = 0 #(WORD PlayerCount) + PassPlayerList = list() #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.FloorCount): + temPassFloorList = tagGCSkyTowerPassFloor() + _pos = temPassFloorList.ReadData(_lpData, _pos) + self.PassFloorList.append(temPassFloorList) + self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.PlayerCount): + temPassPlayerList = tagGCSkyTowerPassPlayer() + _pos = temPassPlayerList.ReadData(_lpData, _pos) + self.PassPlayerList.append(temPassPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + self.FloorCount = 0 + self.PassFloorList = list() + self.PlayerCount = 0 + self.PassPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.FloorCount): + length += self.PassFloorList[i].GetLength() + length += 2 + for i in range(self.PlayerCount): + length += self.PassPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.FloorCount) + for i in range(self.FloorCount): + data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FloorCount:%d, + PassFloorList:%s, + PlayerCount:%d, + PassPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.FloorCount, + "...", + self.PlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo + + +#------------------------------------------------------ +# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo + +class tagGCStoreServerBuyCnt(Structure): + _pack_ = 1 + _fields_ = [ + ("GoodsID", c_int), #商品标识 + ("BuyCnt", c_int), #购买次数 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GoodsID = 0 + self.BuyCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCStoreServerBuyCnt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo: + GoodsID:%d, + BuyCnt:%d + '''\ + %( + self.GoodsID, + self.BuyCnt + ) + return DumpString + + +class tagGCStoreServerBuyCntInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count)//数量 + InfoList = list() #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temInfoList = tagGCStoreServerBuyCnt() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x06 + self.Count = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.InfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo + + +#------------------------------------------------------ +#A9 21 角色改名结果 #tagUpdatePlayerNameResult + +class tagUpdatePlayerNameResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Result", c_ubyte), #角色改名结果 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0x21 + 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 = 0xA9 + self.SubCmd = 0x21 + self.Result = 0 + return + + def GetLength(self): + return sizeof(tagUpdatePlayerNameResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult: + Cmd:%s, + SubCmd:%s, + Result:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Result + ) + return DumpString + + +m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult + + +#------------------------------------------------------ +# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo + +class tagGCXiangongNewPlayer(Structure): + AddTime = 0 #(DWORD AddTime)// 新晋时间戳 + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + EquipShowSwitch = 0 #(DWORD EquipShowSwitch) + EquipShowIDCount = 0 #(BYTE EquipShowIDCount) + EquipShowID = list() #(vector<DWORD> EquipShowID) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.EquipShowIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.EquipShowID.append(value) + return _pos + + def Clear(self): + self.AddTime = 0 + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.EquipShowSwitch = 0 + self.EquipShowIDCount = 0 + self.EquipShowID = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 4 + length += 4 + length += 1 + length += 4 * self.EquipShowIDCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.AddTime) + data = CommFunc.WriteDWORD(data, self.ServerID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.EquipShowSwitch) + data = CommFunc.WriteBYTE(data, self.EquipShowIDCount) + for i in range(self.EquipShowIDCount): + data = CommFunc.WriteDWORD(data, self.EquipShowID[i]) + return data + + def OutputString(self): + DumpString = ''' + AddTime:%d, + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d, + FacePic:%d, + EquipShowSwitch:%d, + EquipShowIDCount:%d, + EquipShowID:%s + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic, + self.EquipShowSwitch, + self.EquipShowIDCount, + "..." + ) + return DumpString + + +class tagGCXiangongNewPlayerInfo(Structure): + Head = tagHead() + XiangongID = 0 #(WORD XiangongID)// 仙宫ID + NewPlayerCount = 0 #(BYTE NewPlayerCount) + NewPlayerList = list() #(vector<tagGCXiangongNewPlayer> NewPlayerList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NewPlayerCount): + temNewPlayerList = tagGCXiangongNewPlayer() + _pos = temNewPlayerList.ReadData(_lpData, _pos) + self.NewPlayerList.append(temNewPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x27 + self.XiangongID = 0 + self.NewPlayerCount = 0 + self.NewPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.NewPlayerCount): + length += self.NewPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.XiangongID) + data = CommFunc.WriteBYTE(data, self.NewPlayerCount) + for i in range(self.NewPlayerCount): + data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + XiangongID:%d, + NewPlayerCount:%d, + NewPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.XiangongID, + self.NewPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo + + +#------------------------------------------------------ +# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo + +class tagGCXiangongRecPlayer(Structure): + AddTime = 0 #(DWORD AddTime)// 新晋时间戳 + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.AddTime = 0 + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.AddTime) + data = CommFunc.WriteDWORD(data, self.ServerID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + AddTime:%d, + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCXiangongRecPlayerInfo(Structure): + Head = tagHead() + XiangongID = 0 #(WORD XiangongID)// 仙宫ID + RecPlayerCount = 0 #(BYTE RecPlayerCount) + RecPlayerList = list() #(vector<tagGCXiangongRecPlayer> RecPlayerList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x28 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecPlayerCount): + temRecPlayerList = tagGCXiangongRecPlayer() + _pos = temRecPlayerList.ReadData(_lpData, _pos) + self.RecPlayerList.append(temRecPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x28 + self.XiangongID = 0 + self.RecPlayerCount = 0 + self.RecPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.RecPlayerCount): + length += self.RecPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.XiangongID) + data = CommFunc.WriteBYTE(data, self.RecPlayerCount) + for i in range(self.RecPlayerCount): + data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + XiangongID:%d, + RecPlayerCount:%d, + RecPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.XiangongID, + self.RecPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo #------------------------------------------------------ @@ -54056,6 +39694,1490 @@ #------------------------------------------------------ +# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList + +class tagGCFamilyBossHurtInfo(Structure): + NPCID = 0 #(DWORD NPCID) + CurHP = 0 #(DWORD CurHP) + CurHPEx = 0 #(DWORD CurHPEx) + MaxHP = 0 #(DWORD MaxHP) + MaxHPEx = 0 #(DWORD MaxHPEx) + FamilyID = 0 #(DWORD FamilyID)// 最大实时伤血仙盟 + NameLen = 0 #(BYTE NameLen) + FamilyName = "" #(String FamilyName) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + return _pos + + def Clear(self): + self.NPCID = 0 + self.CurHP = 0 + self.CurHPEx = 0 + self.MaxHP = 0 + self.MaxHPEx = 0 + self.FamilyID = 0 + self.NameLen = 0 + self.FamilyName = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.FamilyName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteDWORD(data, self.CurHP) + data = CommFunc.WriteDWORD(data, self.CurHPEx) + data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.FamilyName) + return data + + def OutputString(self): + DumpString = ''' + NPCID:%d, + CurHP:%d, + CurHPEx:%d, + MaxHP:%d, + MaxHPEx:%d, + FamilyID:%d, + NameLen:%d, + FamilyName:%s + '''\ + %( + self.NPCID, + self.CurHP, + self.CurHPEx, + self.MaxHP, + self.MaxHPEx, + self.FamilyID, + self.NameLen, + self.FamilyName + ) + return DumpString + + +class tagGCAllFamilyBossHurtInfoList(Structure): + Head = tagHead() + NPCCount = 0 #(BYTE NPCCount)// 个数 + NPCHurtInfo = list() #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NPCCount): + temNPCHurtInfo = tagGCFamilyBossHurtInfo() + _pos = temNPCHurtInfo.ReadData(_lpData, _pos) + self.NPCHurtInfo.append(temNPCHurtInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x10 + self.NPCCount = 0 + self.NPCHurtInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.NPCCount): + length += self.NPCHurtInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.NPCCount) + for i in range(self.NPCCount): + data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NPCCount:%d, + NPCHurtInfo:%s + '''\ + %( + self.Head.OutputString(), + self.NPCCount, + "..." + ) + return DumpString + + +m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList + + +#------------------------------------------------------ +# AC 08 boss复活点数通知 #tagGCBossRebornPoint + +class tagGCBossRebornPoint(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Point", c_int), # 复活点数 + ("TotalPoint", c_int), # 复活总点数 + ("RebornCnt", c_ushort), # 今日已复活次数 + ("TotalRebornCnt", c_ushort), # 每日可复活总次数,0为不限制 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAC + self.SubCmd = 0x08 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAC + self.SubCmd = 0x08 + self.Point = 0 + self.TotalPoint = 0 + self.RebornCnt = 0 + self.TotalRebornCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCBossRebornPoint) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint: + Cmd:%s, + SubCmd:%s, + Point:%d, + TotalPoint:%d, + RebornCnt:%d, + TotalRebornCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Point, + self.TotalPoint, + self.RebornCnt, + self.TotalRebornCnt + ) + return DumpString + + +m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint + + +#------------------------------------------------------ +# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo + +class tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagGCCrossActAllRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB + NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数 + NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagGCCrossActAllRechargeItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRMB = 0 + self.NeedPlayerCount = 0 + self.NowPlayerCount = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 2 + length += 2 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteWORD(data, self.NeedPlayerCount) + data = CommFunc.WriteWORD(data, self.NowPlayerCount) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRMB:%d, + NeedPlayerCount:%d, + NowPlayerCount:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRMB, + self.NeedPlayerCount, + self.NowPlayerCount, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagGCCrossActAllRechargeInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagGCCrossActAllRechargeAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.StartDate = "" + self.EndtDate = "" + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 10 + length += 10 + length += 1 + for i in range(self.AwardCount): + length += self.AwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + StartDate:%s, + EndtDate:%s, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.StartDate, + self.EndtDate, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo + + +#------------------------------------------------------ +# AC 12 跨服运营活动结束 # tagGCCrossActEnd + +class tagGCCrossActEnd(Structure): + Head = tagHead() + ActNameLen = 0 #(BYTE ActNameLen) + ActName = "" #(String ActName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + self.ActNameLen = 0 + self.ActName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ActName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNameLen) + data = CommFunc.WriteString(data, self.ActNameLen, self.ActName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNameLen:%d, + ActName:%s + '''\ + %( + self.Head.OutputString(), + self.ActNameLen, + self.ActName + ) + return DumpString + + +m_NAtagGCCrossActEnd=tagGCCrossActEnd() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd + + +#------------------------------------------------------ +# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo + +class tagGCFairyCeremonyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + WorldLV = 0 #(WORD WorldLV)// 世界等级 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x09 + self.StartDate = "" + self.EndtDate = "" + self.WorldLV = 0 + self.LimitLV = 0 + self.ResetType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 2 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.WorldLV) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + WorldLV:%d, + LimitLV:%d, + ResetType:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.WorldLV, + self.LimitLV, + self.ResetType + ) + return DumpString + + +m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo + + +#------------------------------------------------------ +# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo + +class tagGCFamilyWarInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WorldLV", c_ushort), # 当前进行中的联赛世界等级 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAC + self.SubCmd = 0x01 + 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 = 0xAC + self.SubCmd = 0x01 + self.WorldLV = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyWarInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo: + Cmd:%s, + SubCmd:%s, + WorldLV:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WorldLV + ) + return DumpString + + +m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo + + +#------------------------------------------------------ +# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo + +class tagGCFeastRedPacketDay(Structure): + RedPacketCount = 0 #(BYTE RedPacketCount) + RedPacketIDList = list() #(vector<WORD> RedPacketIDList)// 当日定时发放的系统红包表ID列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RedPacketCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RedPacketCount): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.RedPacketIDList.append(value) + return _pos + + def Clear(self): + self.RedPacketCount = 0 + self.RedPacketIDList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 * self.RedPacketCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RedPacketCount) + for i in range(self.RedPacketCount): + data = CommFunc.WriteWORD(data, self.RedPacketIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + RedPacketCount:%d, + RedPacketIDList:%s + '''\ + %( + self.RedPacketCount, + "..." + ) + return DumpString + + +class tagGCFeastRedPacketInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 + RedPacketDays = 0 #(BYTE RedPacketDays) + RedPacketDayList = list() #(vector<tagGCFeastRedPacketDay> RedPacketDayList)// 每日系统红包信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RedPacketDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RedPacketDays): + temRedPacketDayList = tagGCFeastRedPacketDay() + _pos = temRedPacketDayList.ReadData(_lpData, _pos) + self.RedPacketDayList.append(temRedPacketDayList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x11 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.RedPacketDays = 0 + self.RedPacketDayList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.RedPacketDays): + length += self.RedPacketDayList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.RedPacketDays) + for i in range(self.RedPacketDays): + data = CommFunc.WriteString(data, self.RedPacketDayList[i].GetLength(), self.RedPacketDayList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + RedPacketDays:%d, + RedPacketDayList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.RedPacketDays, + "..." + ) + return DumpString + + +m_NAtagGCFeastRedPacketInfo=tagGCFeastRedPacketInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFeastRedPacketInfo.Head.Cmd,m_NAtagGCFeastRedPacketInfo.Head.SubCmd))] = m_NAtagGCFeastRedPacketInfo + + +#------------------------------------------------------ +# AC 02 通知仙魔之争信息 #tagGCXMZZInfo + +class tagGCXMZZInfo(Structure): + Head = tagHead() + Len = 0 #(WORD Len) + StageRecord = "" #(String StageRecord)// 阶段胜负记录 + Score1 = 0 #(DWORD Score1)// 仙界阵营积分 + Score2 = 0 #(DWORD Score2)// 魔界阵营积分 + TopScore = 0 #(DWORD TopScore)// 积分第1名积分 + TopName = "" #(char TopName[33])// 积分第1名名字 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.StageRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + self.Score1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopName,_pos = CommFunc.ReadString(_lpData, _pos,33) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x02 + self.Len = 0 + self.StageRecord = "" + self.Score1 = 0 + self.Score2 = 0 + self.TopScore = 0 + self.TopName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += len(self.StageRecord) + length += 4 + length += 4 + length += 4 + length += 33 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.StageRecord) + data = CommFunc.WriteDWORD(data, self.Score1) + data = CommFunc.WriteDWORD(data, self.Score2) + data = CommFunc.WriteDWORD(data, self.TopScore) + data = CommFunc.WriteString(data, 33, self.TopName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Len:%d, + StageRecord:%s, + Score1:%d, + Score2:%d, + TopScore:%d, + TopName:%s + '''\ + %( + self.Head.OutputString(), + self.Len, + self.StageRecord, + self.Score1, + self.Score2, + self.TopScore, + self.TopName + ) + return DumpString + + +m_NAtagGCXMZZInfo=tagGCXMZZInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZInfo.Head.Cmd,m_NAtagGCXMZZInfo.Head.SubCmd))] = m_NAtagGCXMZZInfo + + +#------------------------------------------------------ +# AC 03 通知仙魔之争自己信息 #tagGCXMZZSelfInfo + +class tagGCXMZZSelfInfo(Structure): + Head = tagHead() + Faction = 0 #(BYTE Faction)// 所属阵营 + Score = 0 #(DWORD Score)// 积分 + WinCnt = 0 #(BYTE WinCnt)// 胜场数 + WinCntAwardRecord = 0 #(DWORD WinCntAwardRecord)// 胜场奖励领取记录 + Len = 0 #(WORD Len)// 押注记录 + BetRecord = "" #(String BetRecord)// 押注记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WinCntAwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BetRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x03 + self.Faction = 0 + self.Score = 0 + self.WinCnt = 0 + self.WinCntAwardRecord = 0 + self.Len = 0 + self.BetRecord = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + length += 4 + length += 2 + length += len(self.BetRecord) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Faction) + data = CommFunc.WriteDWORD(data, self.Score) + data = CommFunc.WriteBYTE(data, self.WinCnt) + data = CommFunc.WriteDWORD(data, self.WinCntAwardRecord) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.BetRecord) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Faction:%d, + Score:%d, + WinCnt:%d, + WinCntAwardRecord:%d, + Len:%d, + BetRecord:%s + '''\ + %( + self.Head.OutputString(), + self.Faction, + self.Score, + self.WinCnt, + self.WinCntAwardRecord, + self.Len, + self.BetRecord + ) + return DumpString + + +m_NAtagGCXMZZSelfInfo=tagGCXMZZSelfInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZSelfInfo.Head.Cmd,m_NAtagGCXMZZSelfInfo.Head.SubCmd))] = m_NAtagGCXMZZSelfInfo + + +#------------------------------------------------------ +# AC 07 骑宠Boss信息 #tagGCHorsePetBossInfo + +class tagGCHorsePetBossInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsEnd", c_int), # 是否已结束(按位代表对应线路是否结束) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAC + 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 = 0xAC + self.SubCmd = 0x07 + self.IsEnd = 0 + return + + def GetLength(self): + return sizeof(tagGCHorsePetBossInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 07 骑宠Boss信息 //tagGCHorsePetBossInfo: + Cmd:%s, + SubCmd:%s, + IsEnd:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsEnd + ) + return DumpString + + +m_NAtagGCHorsePetBossInfo=tagGCHorsePetBossInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHorsePetBossInfo.Cmd,m_NAtagGCHorsePetBossInfo.SubCmd))] = m_NAtagGCHorsePetBossInfo + + +#------------------------------------------------------ +# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo + +class tagGCMultiExpRateTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s + '''\ + %( + self.StartTime, + self.EndtTime + ) + return DumpString + + +class tagGCMultiExpRateInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + ActivityTimeCount = 0 #(BYTE ActivityTimeCount) + ActivityTime = list() #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AddExpRate = 0 #(DWORD AddExpRate)// 增加的经验倍率,万分率 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x06 + 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.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivityTimeCount): + temActivityTime = tagGCMultiExpRateTime() + _pos = temActivityTime.ReadData(_lpData, _pos) + self.ActivityTime.append(temActivityTime) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x06 + self.StartDate = "" + self.EndtDate = "" + self.ActivityTimeCount = 0 + self.ActivityTime = list() + self.LimitLV = 0 + self.AddExpRate = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + for i in range(self.ActivityTimeCount): + length += self.ActivityTime[i].GetLength() + length += 2 + length += 4 + + 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.ActivityTimeCount) + for i in range(self.ActivityTimeCount): + data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.AddExpRate) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + ActivityTimeCount:%d, + ActivityTime:%s, + LimitLV:%d, + AddExpRate:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.ActivityTimeCount, + "...", + self.LimitLV, + self.AddExpRate + ) + return DumpString + + +m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo + + +#------------------------------------------------------ +# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo + +class tagGCMultiRealmPointInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + Multiple = 0 #(BYTE Multiple)// 倍数 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + LimitPoint = 0 #(DWORD LimitPoint)// 限制获得修行点 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x0A + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x0A + self.StartDate = "" + self.EndtDate = "" + self.Multiple = 0 + self.LimitLV = 0 + self.LimitPoint = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + length += 2 + length += 4 + + 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.Multiple) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.LimitPoint) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + Multiple:%d, + LimitLV:%d, + LimitPoint:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.Multiple, + self.LimitLV, + self.LimitPoint + ) + return DumpString + + +m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo + + +#------------------------------------------------------ +# AC 0B 新仙界盛典活动信息 #tagGCNewFairyCeremonyInfo + +class tagGCNewFairyCeremonyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + WorldLV = 0 #(WORD WorldLV)// 世界等级 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x0B + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x0B + self.StartDate = "" + self.EndtDate = "" + self.WorldLV = 0 + self.LimitLV = 0 + self.ResetType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 2 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.WorldLV) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + WorldLV:%d, + LimitLV:%d, + ResetType:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.WorldLV, + self.LimitLV, + self.ResetType + ) + return DumpString + + +m_NAtagGCNewFairyCeremonyInfo=tagGCNewFairyCeremonyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNewFairyCeremonyInfo.Head.Cmd,m_NAtagGCNewFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCNewFairyCeremonyInfo + + +#------------------------------------------------------ +# AC 05 红包删除 #tagGCRedPacketDel + +class tagGCRedPacketDel(Structure): + Head = tagHead() + Cnt = 0 #(DWORD Cnt)// 个数 + DelRedPacketID = list() #(vector<DWORD> DelRedPacketID)// 红包ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + for i in range(self.Cnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DelRedPacketID.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x05 + self.Cnt = 0 + self.DelRedPacketID = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 * self.Cnt + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + DelRedPacketID:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagGCRedPacketDel=tagGCRedPacketDel() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel + + +#------------------------------------------------------ +# AC 04 通知仙魔之争对战信息 #tagGCXMZZFightInfo + +class tagGCXMZZFightInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//玩家ID + PropDataSize = 0 #(DWORD PropDataSize) + PropData = "" #(String PropData)//属性记录 + ItemDataSize = 0 #(DWORD ItemDataSize) + ItemData = "" #(String ItemData)//物品记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize) + self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x04 + self.PlayerID = 0 + self.PropDataSize = 0 + self.PropData = "" + self.ItemDataSize = 0 + self.ItemData = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += len(self.PropData) + length += 4 + length += len(self.ItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteDWORD(data, self.PropDataSize) + data = CommFunc.WriteString(data, self.PropDataSize, self.PropData) + data = CommFunc.WriteDWORD(data, self.ItemDataSize) + data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + PropDataSize:%d, + PropData:%s, + ItemDataSize:%d, + ItemData:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.PropDataSize, + self.PropData, + self.ItemDataSize, + self.ItemData + ) + return DumpString + + +m_NAtagGCXMZZFightInfo=tagGCXMZZFightInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZFightInfo.Head.Cmd,m_NAtagGCXMZZFightInfo.Head.SubCmd))] = m_NAtagGCXMZZFightInfo + + +#------------------------------------------------------ # AF 02 合服活动奖励状态 #tagMCMixCampaignAwardRecord class tagMCMixCampaignAwardRecord(Structure): @@ -54288,6 +41410,441 @@ #------------------------------------------------------ +# 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)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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) + return _pos + + def Clear(self): + self.AssistGUID = "" + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 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 += 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%d, + MapID:%d, + LineID:%d, + NPCID:%d, + ExDataLen:%d, + ExData:%s + '''\ + %( + self.AssistGUID, + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.Face, + self.FacePic, + 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 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState class tagFamilyArrestAwardReceiveState(Structure): @@ -54340,6 +41897,134 @@ #------------------------------------------------------ +#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo + +class tagFamilyArrestOverState(Structure): + ID = 0 #(DWORD ID)//悬赏任务ID + NameLen = 0 #(WORD NameLen)//名字长度 + Name = "" #(String Name)//size = NameLen + OverState = 0 #(DWORD OverState)//任务完成情况 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ID = 0 + self.NameLen = 0 + self.Name = "" + self.OverState = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 2 + length += len(self.Name) + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteWORD(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.OverState) + return data + + def OutputString(self): + DumpString = ''' + ID:%d, + NameLen:%d, + Name:%s, + OverState:%d + '''\ + %( + self.ID, + self.NameLen, + self.Name, + self.OverState + ) + return DumpString + + +class tagFamilyArrestOverStateInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + 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.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temArrestOverStateInfo = tagFamilyArrestOverState() + _pos = temArrestOverStateInfo.ReadData(_lpData, _pos) + self.ArrestOverStateInfo.append(temArrestOverStateInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x26 + self.Count = 0 + self.ArrestOverStateInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.ArrestOverStateInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ArrestOverStateInfo:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo + + +#------------------------------------------------------ # B0 50 收杆结果 #tagMCFishResult class tagMCFishResult(Structure): @@ -54385,6 +42070,770 @@ m_NAtagMCFishResult=tagMCFishResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult + + +#------------------------------------------------------ +# 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)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.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.Face = 0 + self.FacePic = 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 += 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%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.Face, + self.FacePic, + 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 34 福地结算奖励信息 #tagGCMineAreaAwardInfo + +class tagGCMineAreaAwardInfo(Structure): + Head = tagHead() + AwardType = 0 #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知 + AwardLen = 0 #(BYTE AwardLen) + AwardInfo = "" #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + self.AwardType = 0 + self.AwardLen = 0 + self.AwardInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += len(self.AwardInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AwardType) + data = CommFunc.WriteBYTE(data, self.AwardLen) + data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AwardType:%d, + AwardLen:%d, + AwardInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AwardType, + self.AwardLen, + self.AwardInfo + ) + return DumpString + + +m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo + + +#------------------------------------------------------ +# B0 33 福地详细信息 #tagGCMineAreaInfo + +class tagGCMineItem(Structure): + Index = 0 #(BYTE Index)// 矿物所在福地位置索引,0~n + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物 + MineType = 0 #(BYTE MineType)// 矿物类型:0-常规;1-超级 + UpdTime = 0 #(DWORD UpdTime)// 最后一次更新时间戳 + PosLen = 0 #(BYTE PosLen) + Position = "" #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒 + SpeedLen = 0 #(BYTE SpeedLen) + MoveSpeed = "" #(String MoveSpeed)// 移动速度,x格/秒,支持小数 + EndTime = 0 #(DWORD EndTime)// 拉取结束时间戳 + WorkerCount = 0 #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回 + RobPlayerID = 0 #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺 + RobWorkerCount = 0 #(BYTE RobWorkerCount)// 抢夺工人个数 + RobPlayerName = "" #(char RobPlayerName[33]) + RobJob = 0 #(BYTE RobJob) + RobFace = 0 #(DWORD RobFace) + RobFacePic = 0 #(DWORD RobFacePic) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen) + self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen) + self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Index = 0 + self.MineID = 0 + self.MineType = 0 + self.UpdTime = 0 + self.PosLen = 0 + self.Position = "" + self.SpeedLen = 0 + self.MoveSpeed = "" + self.EndTime = 0 + self.WorkerCount = 0 + self.RobPlayerID = 0 + self.RobWorkerCount = 0 + self.RobPlayerName = "" + self.RobJob = 0 + self.RobFace = 0 + self.RobFacePic = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + length += 4 + length += 1 + length += len(self.Position) + length += 1 + length += len(self.MoveSpeed) + length += 4 + length += 1 + length += 4 + length += 1 + length += 33 + length += 1 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Index) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteBYTE(data, self.MineType) + data = CommFunc.WriteDWORD(data, self.UpdTime) + data = CommFunc.WriteBYTE(data, self.PosLen) + data = CommFunc.WriteString(data, self.PosLen, self.Position) + data = CommFunc.WriteBYTE(data, self.SpeedLen) + data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed) + data = CommFunc.WriteDWORD(data, self.EndTime) + data = CommFunc.WriteBYTE(data, self.WorkerCount) + data = CommFunc.WriteDWORD(data, self.RobPlayerID) + data = CommFunc.WriteBYTE(data, self.RobWorkerCount) + data = CommFunc.WriteString(data, 33, self.RobPlayerName) + data = CommFunc.WriteBYTE(data, self.RobJob) + data = CommFunc.WriteDWORD(data, self.RobFace) + data = CommFunc.WriteDWORD(data, self.RobFacePic) + return data + + def OutputString(self): + DumpString = ''' + Index:%d, + MineID:%d, + MineType:%d, + UpdTime:%d, + PosLen:%d, + Position:%s, + SpeedLen:%d, + MoveSpeed:%s, + EndTime:%d, + WorkerCount:%d, + RobPlayerID:%d, + RobWorkerCount:%d, + RobPlayerName:%s, + RobJob:%d, + RobFace:%d, + RobFacePic:%d + '''\ + %( + self.Index, + self.MineID, + self.MineType, + self.UpdTime, + self.PosLen, + self.Position, + self.SpeedLen, + self.MoveSpeed, + self.EndTime, + self.WorkerCount, + self.RobPlayerID, + self.RobWorkerCount, + self.RobPlayerName, + self.RobJob, + self.RobFace, + self.RobFacePic + ) + return DumpString + + +class tagGCMineArea(Structure): + PlayerID = 0 #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人 + PlayerName = "" #(char PlayerName[33])// 可能为空,如自己或假人 + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face) + FacePic = 0 #(DWORD FacePic) + RobValue = 0 #(DWORD RobValue)// 抢劫敌对值 + MineCount = 0 #(BYTE MineCount) + MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MineCount): + temMineItemList = tagGCMineItem() + _pos = temMineItemList.ReadData(_lpData, _pos) + self.MineItemList.append(temMineItemList) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.RobValue = 0 + self.MineCount = 0 + self.MineItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.MineCount): + length += self.MineItemList[i].GetLength() + + 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.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.RobValue) + data = CommFunc.WriteBYTE(data, self.MineCount) + for i in range(self.MineCount): + data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + Face:%d, + FacePic:%d, + RobValue:%d, + MineCount:%d, + MineItemList:%s + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.Face, + self.FacePic, + self.RobValue, + self.MineCount, + "..." + ) + return DumpString + + +class tagGCMineAreaInfo(Structure): + Head = tagHead() + QueryType = 0 #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表 + QueryValue = 0 #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 + AreaCount = 0 #(BYTE AreaCount) + AreaList = list() #(vector<tagGCMineArea> AreaList)// 福地列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AreaCount): + temAreaList = tagGCMineArea() + _pos = temAreaList.ReadData(_lpData, _pos) + self.AreaList.append(temAreaList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + self.QueryType = 0 + self.QueryValue = 0 + self.AreaCount = 0 + self.AreaList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + for i in range(self.AreaCount): + length += self.AreaList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.QueryType) + data = CommFunc.WriteDWORD(data, self.QueryValue) + data = CommFunc.WriteBYTE(data, self.AreaCount) + for i in range(self.AreaCount): + data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + QueryType:%d, + QueryValue:%d, + AreaCount:%d, + AreaList:%s + '''\ + %( + self.Head.OutputString(), + self.QueryType, + self.QueryValue, + self.AreaCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaInfo=tagGCMineAreaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo + + +#------------------------------------------------------ +# B0 35 福地记录信息 #tagGCMineAreaRecordInfo + +class tagGCMineAreaRecord(Structure): + RecordType = 0 #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢 + TagPlayerID = 0 #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的 + RecordTime = 0 #(DWORD RecordTime)// 记录时间戳 + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID + TagPlayerName = "" #(char TagPlayerName[33]) + TagJob = 0 #(BYTE TagJob) + TagFace = 0 #(DWORD TagFace) + TagFacePic = 0 #(DWORD TagFacePic) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.RecordType = 0 + self.TagPlayerID = 0 + self.RecordTime = 0 + self.MineID = 0 + self.TagPlayerName = "" + self.TagJob = 0 + self.TagFace = 0 + self.TagFacePic = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 4 + length += 2 + length += 33 + length += 1 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordType) + data = CommFunc.WriteDWORD(data, self.TagPlayerID) + data = CommFunc.WriteDWORD(data, self.RecordTime) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteString(data, 33, self.TagPlayerName) + data = CommFunc.WriteBYTE(data, self.TagJob) + data = CommFunc.WriteDWORD(data, self.TagFace) + data = CommFunc.WriteDWORD(data, self.TagFacePic) + return data + + def OutputString(self): + DumpString = ''' + RecordType:%d, + TagPlayerID:%d, + RecordTime:%d, + MineID:%d, + TagPlayerName:%s, + TagJob:%d, + TagFace:%d, + TagFacePic:%d + '''\ + %( + self.RecordType, + self.TagPlayerID, + self.RecordTime, + self.MineID, + self.TagPlayerName, + self.TagJob, + self.TagFace, + self.TagFacePic + ) + return DumpString + + +class tagGCMineAreaRecordInfo(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + AreaRecordList = list() #(vector<tagGCMineAreaRecord> AreaRecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + 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): + temAreaRecordList = tagGCMineAreaRecord() + _pos = temAreaRecordList.ReadData(_lpData, _pos) + self.AreaRecordList.append(temAreaRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + self.RecordCount = 0 + self.AreaRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.AreaRecordList[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.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + AreaRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo + + +#------------------------------------------------------ +# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet + +class tagGCMineItemPullPreviewRet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 + ("ItemIndex", c_ubyte), # 物品所在位置索引0~n + ("WorkerCount", c_ubyte), # 上工人人数 + ("NeedSeconds", c_int), # 预计需要时间,秒 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x32 + 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 = 0x32 + self.PlayerID = 0 + self.ItemIndex = 0 + self.WorkerCount = 0 + self.NeedSeconds = 0 + return + + def GetLength(self): + return sizeof(tagGCMineItemPullPreviewRet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + ItemIndex:%d, + WorkerCount:%d, + NeedSeconds:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.ItemIndex, + self.WorkerCount, + self.NeedSeconds + ) + return DumpString + + +m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet #------------------------------------------------------ @@ -54577,6 +43026,404 @@ m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo + + +#------------------------------------------------------ +# 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)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 1 + 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.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.Face, + self.FacePic + ) + 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 + + +#------------------------------------------------------ +# B0 20 膜拜信息列表 #tagGCWorshipInfoList + +class tagGCWorshipInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID + WorshipType = 0 #(BYTE WorshipType)// 膜拜类型 + WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + InfoLen = 0 #(WORD InfoLen) + PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...} + 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.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.InfoLen = 0 + self.PlayerInfo = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 + length += 2 + length += len(self.PlayerInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.WorshipType) + data = CommFunc.WriteDWORD(data, self.WorshipValue) + data = CommFunc.WriteWORD(data, self.InfoLen) + data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + InfoLen:%d, + PlayerInfo:%s + '''\ + %( + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.InfoLen, + self.PlayerInfo + ) + return DumpString + + +class tagGCWorshipInfoList(Structure): + Head = tagHead() + WorshipCount = 0 #(BYTE WorshipCount) + WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WorshipCount): + temWorshipInfoList = tagGCWorshipInfo() + _pos = temWorshipInfoList.ReadData(_lpData, _pos) + self.WorshipInfoList.append(temWorshipInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + self.WorshipCount = 0 + self.WorshipInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.WorshipCount): + length += self.WorshipInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorshipCount) + for i in range(self.WorshipCount): + data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorshipCount:%d, + WorshipInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.WorshipCount, + "..." + ) + return DumpString + + +m_NAtagGCWorshipInfoList=tagGCWorshipInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList + + +#------------------------------------------------------ +# B0 21 膜拜结果 #tagGCWorshipResult + +class tagGCWorshipResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标; + ("MoneyType", c_ubyte), # 货币类型 + ("MoneyValue", c_int), # 货币奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x21 + 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 = 0x21 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.Result = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagGCWorshipResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + Result:%d, + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.Result, + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +m_NAtagGCWorshipResult=tagGCWorshipResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult #------------------------------------------------------ @@ -58132,6 +46979,551 @@ #------------------------------------------------------ +#B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin + +class tagGCFriendAskIfJoin(Structure): + Head = tagHead() + AskID = 0 #(DWORD AskID)//请求好友的人 + Name = "" #(char Name[33]) + LV = 0 #(WORD LV) + RealmLV = 0 #(WORD RealmLV)//境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AskID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x03 + self.AskID = 0 + self.Name = "" + self.LV = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 2 + length += 2 + 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.AskID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AskID:%d, + Name:%s, + LV:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.Head.OutputString(), + self.AskID, + self.Name, + self.LV, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +m_NAtagGCFriendAskIfJoin=tagGCFriendAskIfJoin() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendAskIfJoin.Head.Cmd,m_NAtagGCFriendAskIfJoin.Head.SubCmd))] = m_NAtagGCFriendAskIfJoin + + +#------------------------------------------------------ +# B3 24 喜糖列表 #tagGCCandyList + +class tagGCCandyInfo(Structure): + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 + NameALen = 0 #(BYTE NameALen) + PlayerNameA = "" #(String PlayerNameA) + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 + NameBLen = 0 #(BYTE NameBLen) + PlayerNameB = "" #(String PlayerNameB) + BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID + MarryTime = 0 #(DWORD MarryTime)// 成亲时间戳,秒 + EndTime = 0 #(DWORD EndTime)// 结束时间戳,秒 + Prosperity = 0 #(DWORD Prosperity)// 当前繁荣度 + FireworksTotalBuyCount = 0 #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数 + FireworksPlayerBuyCount = 0 #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数 + PlayerFreeEatCandyCount = 0 #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) + self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerIDA = 0 + self.NameALen = 0 + self.PlayerNameA = "" + self.PlayerIDB = 0 + self.NameBLen = 0 + self.PlayerNameB = "" + self.BridePriceID = 0 + self.MarryTime = 0 + self.EndTime = 0 + self.Prosperity = 0 + self.FireworksTotalBuyCount = 0 + self.FireworksPlayerBuyCount = 0 + self.PlayerFreeEatCandyCount = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerNameA) + length += 4 + length += 1 + length += len(self.PlayerNameB) + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteBYTE(data, self.NameALen) + data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.NameBLen) + data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) + data = CommFunc.WriteBYTE(data, self.BridePriceID) + data = CommFunc.WriteDWORD(data, self.MarryTime) + data = CommFunc.WriteDWORD(data, self.EndTime) + data = CommFunc.WriteDWORD(data, self.Prosperity) + data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount) + data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount) + data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount) + return data + + def OutputString(self): + DumpString = ''' + PlayerIDA:%d, + NameALen:%d, + PlayerNameA:%s, + PlayerIDB:%d, + NameBLen:%d, + PlayerNameB:%s, + BridePriceID:%d, + MarryTime:%d, + EndTime:%d, + Prosperity:%d, + FireworksTotalBuyCount:%d, + FireworksPlayerBuyCount:%d, + PlayerFreeEatCandyCount:%d + '''\ + %( + self.PlayerIDA, + self.NameALen, + self.PlayerNameA, + self.PlayerIDB, + self.NameBLen, + self.PlayerNameB, + self.BridePriceID, + self.MarryTime, + self.EndTime, + self.Prosperity, + self.FireworksTotalBuyCount, + self.FireworksPlayerBuyCount, + self.PlayerFreeEatCandyCount + ) + return DumpString + + +class tagGCCandyList(Structure): + Head = tagHead() + CandyCount = 0 #(WORD CandyCount) + CandyInfoList = list() #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x24 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.CandyCount): + temCandyInfoList = tagGCCandyInfo() + _pos = temCandyInfoList.ReadData(_lpData, _pos) + self.CandyInfoList.append(temCandyInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x24 + self.CandyCount = 0 + self.CandyInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.CandyCount): + length += self.CandyInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.CandyCount) + for i in range(self.CandyCount): + data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CandyCount:%d, + CandyInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.CandyCount, + "..." + ) + return DumpString + + +m_NAtagGCCandyList=tagGCCandyList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList + + +#------------------------------------------------------ +# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList + +class tagGCCharmOfferBillboardData(Structure): + OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名 + PlayerID = 0 #(DWORD PlayerID)// 玩家ID - 贡献者 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + CharmValue = 0 #(DWORD CharmValue)//贡献魅力值 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.OrderIndex = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.CharmValue = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OrderIndex) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.CharmValue) + return data + + def OutputString(self): + DumpString = ''' + OrderIndex:%d, + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + CharmValue:%d + '''\ + %( + self.OrderIndex, + self.PlayerID, + self.NameLen, + self.PlayerName, + self.CharmValue + ) + return DumpString + + +class tagGCCharmOfferBillboardDataList(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 魅力玩家ID + QueryType = 0 #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜 + DataCount = 0 #(BYTE DataCount) + OfferBillboardDataList = list() #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x19 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DataCount): + temOfferBillboardDataList = tagGCCharmOfferBillboardData() + _pos = temOfferBillboardDataList.ReadData(_lpData, _pos) + self.OfferBillboardDataList.append(temOfferBillboardDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x19 + self.PlayerID = 0 + self.QueryType = 0 + self.DataCount = 0 + self.OfferBillboardDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + for i in range(self.DataCount): + length += self.OfferBillboardDataList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.QueryType) + data = CommFunc.WriteBYTE(data, self.DataCount) + for i in range(self.DataCount): + data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + QueryType:%d, + DataCount:%d, + OfferBillboardDataList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.QueryType, + self.DataCount, + "..." + ) + return DumpString + + +m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList + + +#------------------------------------------------------ +# B3 26 伴侣信息 #tagGCCoupleInfo + +class tagGCCoupleInfo(Structure): + Head = tagHead() + CoupleID = 0 #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取 + NameLen = 0 #(BYTE NameLen) + CoupleName = "" #(String CoupleName) + NewMarryTime = 0 #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算 + MarryTime = 0 #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算 + BridePriceState = 0 #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次 + BreakRequestID = 0 #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求 + BreakRequestTime = 0 #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期 + PlayerBreakRequestTime = 0 #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x26 + self.CoupleID = 0 + self.NameLen = 0 + self.CoupleName = "" + self.NewMarryTime = 0 + self.MarryTime = 0 + self.BridePriceState = 0 + self.BreakRequestID = 0 + self.BreakRequestTime = 0 + self.PlayerBreakRequestTime = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.CoupleName) + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.CoupleID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.CoupleName) + data = CommFunc.WriteDWORD(data, self.NewMarryTime) + data = CommFunc.WriteDWORD(data, self.MarryTime) + data = CommFunc.WriteDWORD(data, self.BridePriceState) + data = CommFunc.WriteDWORD(data, self.BreakRequestID) + data = CommFunc.WriteDWORD(data, self.BreakRequestTime) + data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CoupleID:%d, + NameLen:%d, + CoupleName:%s, + NewMarryTime:%d, + MarryTime:%d, + BridePriceState:%d, + BreakRequestID:%d, + BreakRequestTime:%d, + PlayerBreakRequestTime:%d + '''\ + %( + self.Head.OutputString(), + self.CoupleID, + self.NameLen, + self.CoupleName, + self.NewMarryTime, + self.MarryTime, + self.BridePriceState, + self.BreakRequestID, + self.BreakRequestTime, + self.PlayerBreakRequestTime + ) + return DumpString + + +m_NAtagGCCoupleInfo=tagGCCoupleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo + + +#------------------------------------------------------ # B3 30 情缘相关信息 #tagMCLoveInfo class tagMCLoveInfo(Structure): @@ -58289,6 +47681,1288 @@ m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK + + +#------------------------------------------------------ +# B3 22 收到提亲信息 #tagGCMarryReqInfo + +class tagGCMarryReqInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x22 + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.BridePriceID = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.BridePriceID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + BridePriceID:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.PlayerName, + self.BridePriceID + ) + return DumpString + + +m_NAtagGCMarryReqInfo=tagGCMarryReqInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo + + +#------------------------------------------------------ +# B3 21 提亲发送成功 #tagGCMarryReqOK + +class tagGCMarryReqOK(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x21 + 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 = 0xB3 + self.SubCmd = 0x21 + return + + def GetLength(self): + return sizeof(tagGCMarryReqOK) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagGCMarryReqOK=tagGCMarryReqOK() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK + + +#------------------------------------------------------ +# B3 23 提亲回应结果 #tagGCMarryResponseRet + +class tagGCMarryResponseRet(Structure): + Head = tagHead() + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 + NameALen = 0 #(BYTE NameALen) + PlayerNameA = "" #(String PlayerNameA) + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 + NameBLen = 0 #(BYTE NameBLen) + PlayerNameB = "" #(String PlayerNameB) + IsOK = 0 #(BYTE IsOK)// 是否同意,0-否,1-是; 如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) + self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x23 + self.PlayerIDA = 0 + self.NameALen = 0 + self.PlayerNameA = "" + self.PlayerIDB = 0 + self.NameBLen = 0 + self.PlayerNameB = "" + self.IsOK = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.PlayerNameA) + length += 4 + length += 1 + length += len(self.PlayerNameB) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteBYTE(data, self.NameALen) + data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.NameBLen) + data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) + data = CommFunc.WriteBYTE(data, self.IsOK) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerIDA:%d, + NameALen:%d, + PlayerNameA:%s, + PlayerIDB:%d, + NameBLen:%d, + PlayerNameB:%s, + IsOK:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerIDA, + self.NameALen, + self.PlayerNameA, + self.PlayerIDB, + self.NameBLen, + self.PlayerNameB, + self.IsOK + ) + return DumpString + + +m_NAtagGCMarryResponseRet=tagGCMarryResponseRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet + + +#------------------------------------------------------ +# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo + +class tagGCPlayerCharmValueInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CharmValueTotal", c_int), #当前魅力值 - 总 + ("CharmValueWeek", c_int), #当前魅力值 - 周 + ("CharmValueDay", c_int), #当前魅力值 - 日 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x25 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x25 + self.CharmValueTotal = 0 + self.CharmValueWeek = 0 + self.CharmValueDay = 0 + return + + def GetLength(self): + return sizeof(tagGCPlayerCharmValueInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo: + Cmd:%s, + SubCmd:%s, + CharmValueTotal:%d, + CharmValueWeek:%d, + CharmValueDay:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CharmValueTotal, + self.CharmValueWeek, + self.CharmValueDay + ) + return DumpString + + +m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo + + +#------------------------------------------------------ +# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState + +class tagGCRelatedPlayerOnlineState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 相关玩家ID + ("OfflineValue", c_int), # 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; + ("IsCross", c_ubyte), # 是否跨服同步的,如果是跨服则离线时间计算时要取跨服服务器时间 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x15 + 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 = 0xB3 + self.SubCmd = 0x15 + self.PlayerID = 0 + self.OfflineValue = 0 + self.IsCross = 0 + return + + def GetLength(self): + return sizeof(tagGCRelatedPlayerOnlineState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 15 相关玩家在线状态变更同步 //tagGCRelatedPlayerOnlineState: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + OfflineValue:%d, + IsCross:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.OfflineValue, + self.IsCross + ) + return DumpString + + +m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState + + +#------------------------------------------------------ +# B3 20 送礼物成功通知 #tagGCSendGiftsOKList + +class tagGCSendGiftsOK(Structure): + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 赠送方玩家名 + PlayerID = 0 #(DWORD PlayerID)// 赠送方玩家ID + GiftNum = 0 #(WORD GiftNum)// 赠送礼物编号 + GiftCount = 0 #(DWORD GiftCount)// 赠送礼物数量 + SendTime = 0 #(DWORD SendTime)// 赠送时间戳 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.Name = "" + self.PlayerID = 0 + self.GiftNum = 0 + self.GiftCount = 0 + self.SendTime = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.Name) + length += 4 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteWORD(data, self.GiftNum) + data = CommFunc.WriteDWORD(data, self.GiftCount) + data = CommFunc.WriteDWORD(data, self.SendTime) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + Name:%s, + PlayerID:%d, + GiftNum:%d, + GiftCount:%d, + SendTime:%d + '''\ + %( + self.NameLen, + self.Name, + self.PlayerID, + self.GiftNum, + self.GiftCount, + self.SendTime + ) + return DumpString + + +class tagGCSendGiftsOKList(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + SendGiftsOKList = list() #(vector<tagGCSendGiftsOK> SendGiftsOKList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temSendGiftsOKList = tagGCSendGiftsOK() + _pos = temSendGiftsOKList.ReadData(_lpData, _pos) + self.SendGiftsOKList.append(temSendGiftsOKList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x20 + self.Count = 0 + self.SendGiftsOKList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.SendGiftsOKList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SendGiftsOKList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList + + +#------------------------------------------------------ +# B3 14 社交人群伴侣信息 #tagGCSocialCouples + +class tagGCSocialCouple(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("CoupleID", c_int), #伴侣ID + ] + + 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.PlayerID = 0 + self.CoupleID = 0 + return + + def GetLength(self): + return sizeof(tagGCSocialCouple) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples: + PlayerID:%d, + CoupleID:%d + '''\ + %( + self.PlayerID, + self.CoupleID + ) + return DumpString + + +class tagGCSocialCouples(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + Player = list() #(vector<tagGCSocialCouple> Player)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayer = tagGCSocialCouple() + _pos = temPlayer.ReadData(_lpData, _pos) + self.Player.append(temPlayer) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x14 + self.Count = 0 + self.Player = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.Player[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + Player:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCSocialCouples=tagGCSocialCouples() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples + + +#------------------------------------------------------ +#B3 01 添加社交对象 #tagGCAddSocialPlayer + +class tagGCAddSocialPlayer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 + ("PlayerID", c_int), + ("SortValue", c_int), #最近联系人和仇人按时间排序 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x01 + 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 = 0xB3 + self.SubCmd = 0x01 + self.GroupType = 0 + self.PlayerID = 0 + self.SortValue = 0 + return + + def GetLength(self): + return sizeof(tagGCAddSocialPlayer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//B3 01 添加社交对象 //tagGCAddSocialPlayer: + Cmd:%s, + SubCmd:%s, + GroupType:%d, + PlayerID:%d, + SortValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GroupType, + self.PlayerID, + self.SortValue + ) + return DumpString + + +m_NAtagGCAddSocialPlayer=tagGCAddSocialPlayer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddSocialPlayer.Cmd,m_NAtagGCAddSocialPlayer.SubCmd))] = m_NAtagGCAddSocialPlayer + + +#------------------------------------------------------ +#B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo + +class tagGCAnswerPlayerShortInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线 + IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 + ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.ReadWORD(_lpData, _pos) + self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x09 + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.OnlineType = 0 + self.IsInTeam = 0 + self.ServerGroupID = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 1 + length += 1 + 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.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.WriteBYTE(data, self.OnlineType) + data = CommFunc.WriteBYTE(data, self.IsInTeam) + data = CommFunc.WriteDWORD(data, self.ServerGroupID) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + OnlineType:%d, + IsInTeam:%d, + ServerGroupID:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.OnlineType, + self.IsInTeam, + self.ServerGroupID, + self.Face, + self.FacePic + ) + return DumpString + + +m_NAtagGCAnswerPlayerShortInfo=tagGCAnswerPlayerShortInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAnswerPlayerShortInfo.Head.Cmd,m_NAtagGCAnswerPlayerShortInfo.Head.SubCmd))] = m_NAtagGCAnswerPlayerShortInfo + + +#------------------------------------------------------ +#B3 02 删除社交对象 #tagGCDelSocialPlayer + +class tagGCDelSocialPlayer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 + ("PlayerID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x02 + self.GroupType = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagGCDelSocialPlayer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//B3 02 删除社交对象 //tagGCDelSocialPlayer: + Cmd:%s, + SubCmd:%s, + GroupType:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GroupType, + self.PlayerID + ) + return DumpString + + +m_NAtagGCDelSocialPlayer=tagGCDelSocialPlayer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelSocialPlayer.Cmd,m_NAtagGCDelSocialPlayer.SubCmd))] = m_NAtagGCDelSocialPlayer + + +#------------------------------------------------------ +#B3 04 社交人群基本信息 #tagGCSocialPlayers + +class tagGCSocialPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_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.OnlineType = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 1 + 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.WriteBYTE(data, self.OnlineType) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + OnlineType:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.OnlineType, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCSocialPlayers(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + Player = list() #(vector<tagGCSocialPlayer> Player)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayer = tagGCSocialPlayer() + _pos = temPlayer.ReadData(_lpData, _pos) + self.Player.append(temPlayer) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x04 + self.Count = 0 + self.Player = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.Player[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + Player:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCSocialPlayers=tagGCSocialPlayers() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialPlayers.Head.Cmd,m_NAtagGCSocialPlayers.Head.SubCmd))] = m_NAtagGCSocialPlayers + + +#------------------------------------------------------ +#B3 08 通知玩家分组信息 #tagGCGroupPlayers + +class tagGCGroupPlayer(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("SortValue", c_int), # 亲密组时为亲密度 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PlayerID = 0 + self.SortValue = 0 + return + + def GetLength(self): + return sizeof(tagGCGroupPlayer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//B3 08 通知玩家分组信息 //tagGCGroupPlayers: + PlayerID:%d, + SortValue:%d + '''\ + %( + self.PlayerID, + self.SortValue + ) + return DumpString + + +class tagGCGroupPlayers(Structure): + Head = tagHead() + GroupType = 0 #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组 + Count = 0 #(WORD Count) + Players = list() #(vector<tagGCGroupPlayer> Players)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayers = tagGCGroupPlayer() + _pos = temPlayers.ReadData(_lpData, _pos) + self.Players.append(temPlayers) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x08 + self.GroupType = 0 + self.Count = 0 + self.Players = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.Count): + length += self.Players[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GroupType) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.Players[i].GetLength(), self.Players[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GroupType:%d, + Count:%d, + Players:%s + '''\ + %( + self.Head.OutputString(), + self.GroupType, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCGroupPlayers=tagGCGroupPlayers() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGroupPlayers.Head.Cmd,m_NAtagGCGroupPlayers.Head.SubCmd))] = m_NAtagGCGroupPlayers + + +#------------------------------------------------------ +#B3 05 社交圈内广播玩家名称 #tagGCSocialName + +class tagGCSocialName(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33]) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x05 + self.PlayerID = 0 + self.Name = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + Name:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.Name + ) + return DumpString + + +m_NAtagGCSocialName=tagGCSocialName() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialName.Head.Cmd,m_NAtagGCSocialName.Head.SubCmd))] = m_NAtagGCSocialName + + +#------------------------------------------------------ +#B3 06 社交玩家在线情况 #tagGCSocialOnline + +class tagGCSocialOnline(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), + ("OnlineType", c_ubyte), #0不在线 1在线 2脱机在线 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x06 + self.PlayerID = 0 + self.OnlineType = 0 + return + + def GetLength(self): + return sizeof(tagGCSocialOnline) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//B3 06 社交玩家在线情况 //tagGCSocialOnline: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + OnlineType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.OnlineType + ) + return DumpString + + +m_NAtagGCSocialOnline=tagGCSocialOnline() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialOnline.Cmd,m_NAtagGCSocialOnline.SubCmd))] = m_NAtagGCSocialOnline + + +#------------------------------------------------------ +#B3 07 社交玩家属性广播 #tagGCSocialRefreshType + +class tagGCSocialRefreshType(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), + ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ + ("Value", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x07 + self.PlayerID = 0 + self.RefreshType = 0 + self.Value = 0 + return + + def GetLength(self): + return sizeof(tagGCSocialRefreshType) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//B3 07 社交玩家属性广播 //tagGCSocialRefreshType: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + RefreshType:%d, + Value:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.RefreshType, + self.Value + ) + return DumpString + + +m_NAtagGCSocialRefreshType=tagGCSocialRefreshType() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType #------------------------------------------------------ @@ -60046,6 +50720,1660 @@ #------------------------------------------------------ +# B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo + +class tagGCAddAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + ItemID = 0 #(DWORD ItemID) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.ItemID = 0 + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.ItemID) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + ItemID:%d + '''\ + %( + self.ItemGUID, + self.ItemID + ) + return DumpString + + +class tagGCAddAuctionItemInfo(Structure): + Head = tagHead() + AddCount = 0 #(BYTE AddCount) + AddAuctionItemList = list() #(vector<tagGCAddAuctionItem> AddAuctionItemList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AddCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AddCount): + temAddAuctionItemList = tagGCAddAuctionItem() + _pos = temAddAuctionItemList.ReadData(_lpData, _pos) + self.AddAuctionItemList.append(temAddAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x04 + self.AddCount = 0 + self.AddAuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.AddCount): + length += self.AddAuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AddCount) + for i in range(self.AddCount): + data = CommFunc.WriteString(data, self.AddAuctionItemList[i].GetLength(), self.AddAuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AddCount:%d, + AddAuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.AddCount, + "..." + ) + return DumpString + + +m_NAtagGCAddAuctionItemInfo=tagGCAddAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddAuctionItemInfo.Head.Cmd,m_NAtagGCAddAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAddAuctionItemInfo + + +#------------------------------------------------------ +# B5 07 拍卖行关注的物品ID #tagGCAttentionAuctionItemID + +class tagGCAttentionAuctionItemID(Structure): + Head = tagHead() + AttentionCount = 0 #(BYTE AttentionCount) + AttentionItemIDList = list() #(vector<DWORD> AttentionItemIDList)// 关注的物品ID列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AttentionCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AttentionCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.AttentionItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x07 + self.AttentionCount = 0 + self.AttentionItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.AttentionCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AttentionCount) + for i in range(self.AttentionCount): + data = CommFunc.WriteDWORD(data, self.AttentionItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AttentionCount:%d, + AttentionItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.AttentionCount, + "..." + ) + return DumpString + + +m_NAtagGCAttentionAuctionItemID=tagGCAttentionAuctionItemID() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemID.Head.Cmd,m_NAtagGCAttentionAuctionItemID.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemID + + +#------------------------------------------------------ +# B5 06 拍卖行关注中的拍品信息 #tagGCAttentionAuctionItemInfo + +class tagGCAttentionAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.AddTime = "" + self.BidderPrice = 0 + self.BiddingTime = "" + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 4 + length += 2 + length += 19 + length += 4 + length += 19 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + ItemID:%d, + ItemCount:%d, + AddTime:%s, + BidderPrice:%d, + BiddingTime:%s, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.ItemID, + self.ItemCount, + self.AddTime, + self.BidderPrice, + self.BiddingTime, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCAttentionAuctionItemInfo(Structure): + Head = tagHead() + AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 + AuctionItemList = list() #(vector<tagGCAttentionAuctionItem> AuctionItemList)//拍品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AuctionItemCount): + temAuctionItemList = tagGCAttentionAuctionItem() + _pos = temAuctionItemList.ReadData(_lpData, _pos) + self.AuctionItemList.append(temAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x06 + self.AuctionItemCount = 0 + self.AuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.AuctionItemCount): + length += self.AuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AuctionItemCount) + for i in range(self.AuctionItemCount): + data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AuctionItemCount:%d, + AuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.AuctionItemCount, + "..." + ) + return DumpString + + +m_NAtagGCAttentionAuctionItemInfo=tagGCAttentionAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemInfo.Head.Cmd,m_NAtagGCAttentionAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemInfo + + +#------------------------------------------------------ +# B5 01 拍卖行拍卖中的物品信息 #tagGCAuctionItemInfo + +class tagGCAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.AddTime = "" + self.BidderPrice = 0 + self.BiddingTime = "" + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 4 + length += 2 + length += 19 + length += 4 + length += 19 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + ItemID:%d, + ItemCount:%d, + AddTime:%s, + BidderPrice:%d, + BiddingTime:%s, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.ItemID, + self.ItemCount, + self.AddTime, + self.BidderPrice, + self.BiddingTime, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCAuctionItemInfo(Structure): + Head = tagHead() + Job = 0 #(BYTE Job)//过滤职业,0为不限制 + ItemTypeCount = 0 #(BYTE ItemTypeCount) + ItemTypeList = list() #(vector<DWORD> ItemTypeList)//指定的物品类型 + ClassLV = 0 #(BYTE ClassLV)//过滤阶数,0为不限制 + SpecItemIDCount = 0 #(BYTE SpecItemIDCount)//指定物品ID个数 + SpecItemIDList = list() #(vector<DWORD> SpecItemIDList)//指定物品ID + FromItemGUID = "" #(char FromItemGUID[40])//从哪个物品开始查询 + QueryDir = 0 #(BYTE QueryDir)//查询方向,1-往后查,2-往前查,3-定位查询 + QueryCount = 0 #(BYTE QueryCount)//查询个数,0为全部 + QueryRemainlCount = 0 #(WORD QueryRemainlCount)//查询条件对应查询方向剩余个数 + AuctionItemCount = 0 #(BYTE AuctionItemCount)//返回拍品数量 + AuctionItemList = list() #(vector<tagGCAuctionItem> AuctionItemList)//返回拍品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemTypeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ItemTypeList.append(value) + self.ClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SpecItemIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SpecItemIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SpecItemIDList.append(value) + self.FromItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.QueryDir,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.QueryCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.QueryRemainlCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AuctionItemCount): + temAuctionItemList = tagGCAuctionItem() + _pos = temAuctionItemList.ReadData(_lpData, _pos) + self.AuctionItemList.append(temAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x01 + self.Job = 0 + self.ItemTypeCount = 0 + self.ItemTypeList = list() + self.ClassLV = 0 + self.SpecItemIDCount = 0 + self.SpecItemIDList = list() + self.FromItemGUID = "" + self.QueryDir = 0 + self.QueryCount = 0 + self.QueryRemainlCount = 0 + self.AuctionItemCount = 0 + self.AuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.ItemTypeCount + length += 1 + length += 1 + length += 4 * self.SpecItemIDCount + length += 40 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.AuctionItemCount): + length += self.AuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.ItemTypeCount) + for i in range(self.ItemTypeCount): + data = CommFunc.WriteDWORD(data, self.ItemTypeList[i]) + data = CommFunc.WriteBYTE(data, self.ClassLV) + data = CommFunc.WriteBYTE(data, self.SpecItemIDCount) + for i in range(self.SpecItemIDCount): + data = CommFunc.WriteDWORD(data, self.SpecItemIDList[i]) + data = CommFunc.WriteString(data, 40, self.FromItemGUID) + data = CommFunc.WriteBYTE(data, self.QueryDir) + data = CommFunc.WriteBYTE(data, self.QueryCount) + data = CommFunc.WriteWORD(data, self.QueryRemainlCount) + data = CommFunc.WriteBYTE(data, self.AuctionItemCount) + for i in range(self.AuctionItemCount): + data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Job:%d, + ItemTypeCount:%d, + ItemTypeList:%s, + ClassLV:%d, + SpecItemIDCount:%d, + SpecItemIDList:%s, + FromItemGUID:%s, + QueryDir:%d, + QueryCount:%d, + QueryRemainlCount:%d, + AuctionItemCount:%d, + AuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.Job, + self.ItemTypeCount, + "...", + self.ClassLV, + self.SpecItemIDCount, + "...", + self.FromItemGUID, + self.QueryDir, + self.QueryCount, + self.QueryRemainlCount, + self.AuctionItemCount, + "..." + ) + return DumpString + + +m_NAtagGCAuctionItemInfo=tagGCAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAuctionItemInfo.Head.Cmd,m_NAtagGCAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAuctionItemInfo + + +#------------------------------------------------------ +# B5 10 拍卖行玩家竞价中的物品信息 #tagGCBiddingItemInfo + +class tagGCBiddingItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss + BidderID = 0 #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.AddTime = "" + self.BidderID = 0 + self.BidderPrice = 0 + self.BiddingTime = "" + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 4 + length += 2 + length += 19 + length += 4 + length += 4 + length += 19 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderID) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + ItemID:%d, + ItemCount:%d, + AddTime:%s, + BidderID:%d, + BidderPrice:%d, + BiddingTime:%s, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.ItemID, + self.ItemCount, + self.AddTime, + self.BidderID, + self.BidderPrice, + self.BiddingTime, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCBiddingItemInfo(Structure): + Head = tagHead() + AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 + AuctionItemList = list() #(vector<tagGCBiddingItem> AuctionItemList)//拍品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AuctionItemCount): + temAuctionItemList = tagGCBiddingItem() + _pos = temAuctionItemList.ReadData(_lpData, _pos) + self.AuctionItemList.append(temAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x10 + self.AuctionItemCount = 0 + self.AuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.AuctionItemCount): + length += self.AuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AuctionItemCount) + for i in range(self.AuctionItemCount): + data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AuctionItemCount:%d, + AuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.AuctionItemCount, + "..." + ) + return DumpString + + +m_NAtagGCBiddingItemInfo=tagGCBiddingItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBiddingItemInfo.Head.Cmd,m_NAtagGCBiddingItemInfo.Head.SubCmd))] = m_NAtagGCBiddingItemInfo + + +#------------------------------------------------------ +# B5 09 拍卖行清除拍品 #tagGCClearAuctionItemInfo + +class tagGCClearAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.ItemGUID = "" + return + + def GetLength(self): + length = 0 + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s + '''\ + %( + self.ItemGUID + ) + return DumpString + + +class tagGCClearAuctionItemInfo(Structure): + Head = tagHead() + ClearCount = 0 #(BYTE ClearCount) + ClearAuctionItemList = list() #(vector<tagGCClearAuctionItem> ClearAuctionItemList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ClearCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ClearCount): + temClearAuctionItemList = tagGCClearAuctionItem() + _pos = temClearAuctionItemList.ReadData(_lpData, _pos) + self.ClearAuctionItemList.append(temClearAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x09 + self.ClearCount = 0 + self.ClearAuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.ClearCount): + length += self.ClearAuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ClearCount) + for i in range(self.ClearCount): + data = CommFunc.WriteString(data, self.ClearAuctionItemList[i].GetLength(), self.ClearAuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ClearCount:%d, + ClearAuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ClearCount, + "..." + ) + return DumpString + + +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 + + +#------------------------------------------------------ +# B5 05 拍卖行仙盟拍卖中的物品信息 #tagGCFamilyAuctionItemInfo + +class tagGCFamilyAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + FamilyPlayerIDLen = 0 #(WORD FamilyPlayerIDLen) + FamilyPlayerIDInfo = "" #(String FamilyPlayerIDInfo)//可获得收益的仙盟玩家ID信息 + AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + self.FamilyPlayerIDLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FamilyPlayerIDInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyPlayerIDLen) + self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.AddTime = "" + self.BidderPrice = 0 + self.BiddingTime = "" + self.UserDataLen = 0 + self.UserData = "" + self.FamilyPlayerIDLen = 0 + self.FamilyPlayerIDInfo = "" + self.AuctionType = 0 + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 4 + length += 2 + length += 19 + length += 4 + length += 19 + length += 2 + length += len(self.UserData) + length += 2 + length += len(self.FamilyPlayerIDInfo) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + data = CommFunc.WriteWORD(data, self.FamilyPlayerIDLen) + data = CommFunc.WriteString(data, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo) + data = CommFunc.WriteBYTE(data, self.AuctionType) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + ItemID:%d, + ItemCount:%d, + AddTime:%s, + BidderPrice:%d, + BiddingTime:%s, + UserDataLen:%d, + UserData:%s, + FamilyPlayerIDLen:%d, + FamilyPlayerIDInfo:%s, + AuctionType:%d + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.ItemID, + self.ItemCount, + self.AddTime, + self.BidderPrice, + self.BiddingTime, + self.UserDataLen, + self.UserData, + self.FamilyPlayerIDLen, + self.FamilyPlayerIDInfo, + self.AuctionType + ) + return DumpString + + +class tagGCFamilyAuctionItemInfo(Structure): + Head = tagHead() + AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 + AuctionItemList = list() #(vector<tagGCFamilyAuctionItem> AuctionItemList)//拍品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AuctionItemCount): + temAuctionItemList = tagGCFamilyAuctionItem() + _pos = temAuctionItemList.ReadData(_lpData, _pos) + self.AuctionItemList.append(temAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x05 + self.AuctionItemCount = 0 + self.AuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.AuctionItemCount): + length += self.AuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AuctionItemCount) + for i in range(self.AuctionItemCount): + data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AuctionItemCount:%d, + AuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.AuctionItemCount, + "..." + ) + return DumpString + + +m_NAtagGCFamilyAuctionItemInfo=tagGCFamilyAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyAuctionItemInfo.Head.Cmd,m_NAtagGCFamilyAuctionItemInfo.Head.SubCmd))] = m_NAtagGCFamilyAuctionItemInfo + + +#------------------------------------------------------ +# B5 02 拍卖行玩家拍卖中的物品信息 #tagGCPlayerAuctionItemInfo + +class tagGCPlayerAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.AddTime = "" + self.BidderPrice = 0 + self.BiddingTime = "" + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 4 + length += 2 + length += 19 + length += 4 + length += 19 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + ItemID:%d, + ItemCount:%d, + AddTime:%s, + BidderPrice:%d, + BiddingTime:%s, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.ItemID, + self.ItemCount, + self.AddTime, + self.BidderPrice, + self.BiddingTime, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCPlayerAuctionItemInfo(Structure): + Head = tagHead() + AuctionItemCount = 0 #(BYTE AuctionItemCount)//拍品数量 + AuctionItemList = list() #(vector<tagGCPlayerAuctionItem> AuctionItemList)//拍品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AuctionItemCount): + temAuctionItemList = tagGCPlayerAuctionItem() + _pos = temAuctionItemList.ReadData(_lpData, _pos) + self.AuctionItemList.append(temAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x02 + self.AuctionItemCount = 0 + self.AuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.AuctionItemCount): + length += self.AuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AuctionItemCount) + for i in range(self.AuctionItemCount): + data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AuctionItemCount:%d, + AuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.AuctionItemCount, + "..." + ) + return DumpString + + +m_NAtagGCPlayerAuctionItemInfo=tagGCPlayerAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionItemInfo.Head.Cmd,m_NAtagGCPlayerAuctionItemInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionItemInfo + + +#------------------------------------------------------ +# B5 03 拍卖行玩家拍卖记录 #tagGCPlayerAuctionRecordInfo + +class tagGCPlayerAuctionRecord(Structure): + ItemGUID = "" #(char ItemGUID[40]) + FamilyID = 0 #(DWORD FamilyID)//有值时为仙盟拍品 + RecordType = 0 #(BYTE RecordType)//记录类型 0-我的拍品记录 1-仙盟拍品记录 2-我的竞拍记录 + RecordResult = 0 #(BYTE RecordResult)//记录结果 0-流拍 1-拍卖成交 2-回收 3-竞价成功 4-竞价失败 + RecordTime = "" #(char RecordTime[19])//记录时间 yyyy-MM-dd hh:mm:ss + BidderPrice = 0 #(DWORD BidderPrice)//成交价格 + BidderName = "" #(char BidderName[33])//成交玩家名 + ItemID = 0 #(DWORD ItemID) + ItemCount = 0 #(WORD ItemCount) + UserDataLen = 0 #(WORD UserDataLen) + UserData = "" #(String UserData)//自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordResult,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BidderName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.FamilyID = 0 + self.RecordType = 0 + self.RecordResult = 0 + self.RecordTime = "" + self.BidderPrice = 0 + self.BidderName = "" + self.ItemID = 0 + self.ItemCount = 0 + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 1 + length += 1 + length += 19 + length += 4 + length += 33 + length += 4 + length += 2 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.RecordType) + data = CommFunc.WriteBYTE(data, self.RecordResult) + data = CommFunc.WriteString(data, 19, self.RecordTime) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 33, self.BidderName) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + FamilyID:%d, + RecordType:%d, + RecordResult:%d, + RecordTime:%s, + BidderPrice:%d, + BidderName:%s, + ItemID:%d, + ItemCount:%d, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.ItemGUID, + self.FamilyID, + self.RecordType, + self.RecordResult, + self.RecordTime, + self.BidderPrice, + self.BidderName, + self.ItemID, + self.ItemCount, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCPlayerAuctionRecordInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + AuctionRecordList = list() #(vector<tagGCPlayerAuctionRecord> AuctionRecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAuctionRecordList = tagGCPlayerAuctionRecord() + _pos = temAuctionRecordList.ReadData(_lpData, _pos) + self.AuctionRecordList.append(temAuctionRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x03 + self.Count = 0 + self.AuctionRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.AuctionRecordList[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.AuctionRecordList[i].GetLength(), self.AuctionRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + AuctionRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCPlayerAuctionRecordInfo=tagGCPlayerAuctionRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionRecordInfo.Head.Cmd,m_NAtagGCPlayerAuctionRecordInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionRecordInfo + + +#------------------------------------------------------ +# B5 08 拍卖行刷新拍品 #tagGCRefreshAuctionItemInfo + +class tagGCRefreshAuctionItem(Structure): + ItemGUID = "" #(char ItemGUID[40]) + AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品 + AddTime = "" #(char AddTime[19])//上架时间 + BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID + BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格 + BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + return _pos + + def Clear(self): + self.ItemGUID = "" + self.AuctionType = 0 + self.AddTime = "" + self.BidderID = 0 + self.BidderPrice = 0 + self.BiddingTime = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 1 + length += 19 + length += 4 + length += 4 + length += 19 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.ItemGUID) + data = CommFunc.WriteBYTE(data, self.AuctionType) + data = CommFunc.WriteString(data, 19, self.AddTime) + data = CommFunc.WriteDWORD(data, self.BidderID) + data = CommFunc.WriteDWORD(data, self.BidderPrice) + data = CommFunc.WriteString(data, 19, self.BiddingTime) + return data + + def OutputString(self): + DumpString = ''' + ItemGUID:%s, + AuctionType:%d, + AddTime:%s, + BidderID:%d, + BidderPrice:%d, + BiddingTime:%s + '''\ + %( + self.ItemGUID, + self.AuctionType, + self.AddTime, + self.BidderID, + self.BidderPrice, + self.BiddingTime + ) + return DumpString + + +class tagGCRefreshAuctionItemInfo(Structure): + Head = tagHead() + RefreshCount = 0 #(BYTE RefreshCount) + RefreshAuctionItemList = list() #(vector<tagGCRefreshAuctionItem> RefreshAuctionItemList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RefreshCount): + temRefreshAuctionItemList = tagGCRefreshAuctionItem() + _pos = temRefreshAuctionItemList.ReadData(_lpData, _pos) + self.RefreshAuctionItemList.append(temRefreshAuctionItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x08 + self.RefreshCount = 0 + self.RefreshAuctionItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RefreshCount): + length += self.RefreshAuctionItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RefreshCount) + for i in range(self.RefreshCount): + data = CommFunc.WriteString(data, self.RefreshAuctionItemList[i].GetLength(), self.RefreshAuctionItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RefreshCount:%d, + RefreshAuctionItemList:%s + '''\ + %( + self.Head.OutputString(), + self.RefreshCount, + "..." + ) + return DumpString + + +m_NAtagGCRefreshAuctionItemInfo=tagGCRefreshAuctionItemInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRefreshAuctionItemInfo.Head.Cmd,m_NAtagGCRefreshAuctionItemInfo.Head.SubCmd))] = m_NAtagGCRefreshAuctionItemInfo + + +#------------------------------------------------------ +# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason + +class tagGCEnterTeamFBFailReason(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MapID", c_int), # 请求进入的地图ID + ("AskType", c_ubyte), # 请求类型: 0-匹配请求;1-进入请求 + ("Reason", c_ubyte), # 失败原因:2-次数不足;3-进入CD中;6-门票不足 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x13 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x13 + self.MapID = 0 + self.AskType = 0 + self.Reason = 0 + return + + def GetLength(self): + return sizeof(tagGCEnterTeamFBFailReason) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason: + Cmd:%s, + SubCmd:%s, + MapID:%d, + AskType:%d, + Reason:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MapID, + self.AskType, + self.Reason + ) + return DumpString + + +m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason + + +#------------------------------------------------------ # B9 23 功能队伍解散 #tagMCFuncTeamDissolve class tagMCFuncTeamDissolve(Structure): @@ -60943,6 +53271,317 @@ #------------------------------------------------------ +# B9 01 收到邀请加入队伍信息 #tagGCInviteJoinTeamInfo + +class tagGCInviteJoinTeamInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + TagMapID = 0 #(DWORD TagMapID)// 目标地图 + TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x01 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.TagMapID = 0 + self.TagMapEx = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 1 + length += 2 + length += 4 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.TagMapID) + data = CommFunc.WriteWORD(data, self.TagMapEx) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + TagMapID:%d, + TagMapEx:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.TagMapID, + self.TagMapEx + ) + return DumpString + + +m_NAtagGCInviteJoinTeamInfo=tagGCInviteJoinTeamInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCInviteJoinTeamInfo.Head.Cmd,m_NAtagGCInviteJoinTeamInfo.Head.SubCmd))] = m_NAtagGCInviteJoinTeamInfo + + +#------------------------------------------------------ +# B9 09 组队目标队伍信息列表 #tagGCTagMapTeamList + +class tagGCTagMapTeam(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 队长名称 + LV = 0 #(WORD LV)// 队长等级 + Job = 0 #(BYTE Job)// 队长职业 + JobLevel = 0 #(BYTE JobLevel)// 队长职业阶级 + RealmLV = 0 #(WORD RealmLV)// 队长境界等级 + MemberCount = 0 #(BYTE MemberCount)// 队伍人数 + ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 + ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.MemberCount = 0 + self.ReqMinLV = 0 + self.ReqMaxLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 2 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteBYTE(data, self.MemberCount) + data = CommFunc.WriteWORD(data, self.ReqMinLV) + data = CommFunc.WriteWORD(data, self.ReqMaxLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + MemberCount:%d, + ReqMinLV:%d, + ReqMaxLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.MemberCount, + self.ReqMinLV, + self.ReqMaxLV + ) + return DumpString + + +class tagGCTagMapTeamList(Structure): + Head = tagHead() + TagMapID = 0 #(DWORD TagMapID)// 目标地图 + TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 + IsTagEx = 0 #(BYTE IsTagEx)// 是否对应目标扩展的; 0否1是 + MatchState = 0 #(BYTE MatchState)// 0-全部;1-匹配中的; + TeamCount = 0 #(BYTE TeamCount) + TeamList = list() #(vector<tagGCTagMapTeam> TeamList)// 队伍列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsTagEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TeamCount): + temTeamList = tagGCTagMapTeam() + _pos = temTeamList.ReadData(_lpData, _pos) + self.TeamList.append(temTeamList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x09 + self.TagMapID = 0 + self.TagMapEx = 0 + self.IsTagEx = 0 + self.MatchState = 0 + self.TeamCount = 0 + self.TeamList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + length += 1 + length += 1 + for i in range(self.TeamCount): + length += self.TeamList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TagMapID) + data = CommFunc.WriteWORD(data, self.TagMapEx) + data = CommFunc.WriteBYTE(data, self.IsTagEx) + data = CommFunc.WriteBYTE(data, self.MatchState) + data = CommFunc.WriteBYTE(data, self.TeamCount) + for i in range(self.TeamCount): + data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TagMapID:%d, + TagMapEx:%d, + IsTagEx:%d, + MatchState:%d, + TeamCount:%d, + TeamList:%s + '''\ + %( + self.Head.OutputString(), + self.TagMapID, + self.TagMapEx, + self.IsTagEx, + self.MatchState, + self.TeamCount, + "..." + ) + return DumpString + + +m_NAtagGCTagMapTeamList=tagGCTagMapTeamList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagMapTeamList.Head.Cmd,m_NAtagGCTagMapTeamList.Head.SubCmd))] = m_NAtagGCTagMapTeamList + + +#------------------------------------------------------ # B9 21 查找玩家功能队伍结果 #tagMCQueryPlayerFuncTeamRet class tagMCQueryPlayerFuncTeamRet(Structure): @@ -60999,6 +53638,6414 @@ #------------------------------------------------------ +# B9 08 推荐组队的附近玩家信息 #tagGCRecommendNearbyPlayerList + +class tagGCRecommendNearbyPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 1 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCRecommendNearbyPlayerList(Structure): + Head = tagHead() + PlayerCount = 0 #(BYTE PlayerCount) + PlayerList = list() #(vector<tagGCRecommendNearbyPlayer> PlayerList)// 推荐玩家列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temPlayerList = tagGCRecommendNearbyPlayer() + _pos = temPlayerList.ReadData(_lpData, _pos) + self.PlayerList.append(temPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x08 + self.PlayerCount = 0 + self.PlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.PlayerCount): + length += self.PlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerCount:%d, + PlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCRecommendNearbyPlayerList=tagGCRecommendNearbyPlayerList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendNearbyPlayerList.Head.Cmd,m_NAtagGCRecommendNearbyPlayerList.Head.SubCmd))] = m_NAtagGCRecommendNearbyPlayerList + + +#------------------------------------------------------ +# B9 07 收到请求加入队伍信息 #tagGCRequestJoinTeam + +class tagGCRequestJoinTeam(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 发起请求的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 发起请求的玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x07 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 1 + length += 2 + 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.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +m_NAtagGCRequestJoinTeam=tagGCRequestJoinTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRequestJoinTeam.Head.Cmd,m_NAtagGCRequestJoinTeam.Head.SubCmd))] = m_NAtagGCRequestJoinTeam + + +#------------------------------------------------------ +# B9 04 刷新场景队伍回应包 #tagGCSceneTeamRefresh + +class tagGCSceneTeam(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 队长名称 + LV = 0 #(WORD LV)// 队长等级 + Job = 0 #(BYTE Job)// 队长职业 + JobLevel = 0 #(BYTE JobLevel)// 队长职业阶级 + RealmLV = 0 #(WORD RealmLV)// 队长境界等级 + MemberCount = 0 #(BYTE MemberCount)// 队伍人数 + TagMapID = 0 #(DWORD TagMapID)// 目标地图 + TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 + ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 + ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.MemberCount = 0 + self.TagMapID = 0 + self.TagMapEx = 0 + self.ReqMinLV = 0 + self.ReqMaxLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 4 + length += 2 + length += 2 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteBYTE(data, self.MemberCount) + data = CommFunc.WriteDWORD(data, self.TagMapID) + data = CommFunc.WriteWORD(data, self.TagMapEx) + data = CommFunc.WriteWORD(data, self.ReqMinLV) + data = CommFunc.WriteWORD(data, self.ReqMaxLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + MemberCount:%d, + TagMapID:%d, + TagMapEx:%d, + ReqMinLV:%d, + ReqMaxLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.MemberCount, + self.TagMapID, + self.TagMapEx, + self.ReqMinLV, + self.ReqMaxLV + ) + return DumpString + + +class tagGCSceneTeamRefresh(Structure): + Head = tagHead() + TeamCount = 0 #(BYTE TeamCount) + SceneTeamList = list() #(vector<tagGCSceneTeam> SceneTeamList)// 场景队伍列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TeamCount): + temSceneTeamList = tagGCSceneTeam() + _pos = temSceneTeamList.ReadData(_lpData, _pos) + self.SceneTeamList.append(temSceneTeamList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x04 + self.TeamCount = 0 + self.SceneTeamList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.TeamCount): + length += self.SceneTeamList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TeamCount) + for i in range(self.TeamCount): + data = CommFunc.WriteString(data, self.SceneTeamList[i].GetLength(), self.SceneTeamList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TeamCount:%d, + SceneTeamList:%s + '''\ + %( + self.Head.OutputString(), + self.TeamCount, + "..." + ) + return DumpString + + +m_NAtagGCSceneTeamRefresh=tagGCSceneTeamRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSceneTeamRefresh.Head.Cmd,m_NAtagGCSceneTeamRefresh.Head.SubCmd))] = m_NAtagGCSceneTeamRefresh + + +#------------------------------------------------------ +# B9 11 队员进入副本准备状态刷新 #tagGCTeamEnterFBPrepare + +class tagGCTeamMemPrepareState(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("PrepareState", c_ubyte), # 状态,0-未准备,1-已准备,2-拒绝 + ] + + 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.PlayerID = 0 + self.PrepareState = 0 + return + + def GetLength(self): + return sizeof(tagGCTeamMemPrepareState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 11 队员进入副本准备状态刷新 //tagGCTeamEnterFBPrepare: + PlayerID:%d, + PrepareState:%d + '''\ + %( + self.PlayerID, + self.PrepareState + ) + return DumpString + + +class tagGCTeamEnterFBPrepare(Structure): + Head = tagHead() + TagMapID = 0 #(DWORD TagMapID)// 目标地图,不一定是队伍目标 + TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 + IsPrepareErr = 0 #(BYTE IsPrepareErr)// 是否准备异常(在所有队员都准备好后准备传入副本出现有队员最终不能进入的情况时该值为1) + MemCount = 0 #(BYTE MemCount) + MemStateList = list() #(vector<tagGCTeamMemPrepareState> MemStateList)// 队员状态列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsPrepareErr,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemCount): + temMemStateList = tagGCTeamMemPrepareState() + _pos = temMemStateList.ReadData(_lpData, _pos) + self.MemStateList.append(temMemStateList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x11 + self.TagMapID = 0 + self.TagMapEx = 0 + self.IsPrepareErr = 0 + self.MemCount = 0 + self.MemStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + length += 1 + for i in range(self.MemCount): + length += self.MemStateList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TagMapID) + data = CommFunc.WriteWORD(data, self.TagMapEx) + data = CommFunc.WriteBYTE(data, self.IsPrepareErr) + data = CommFunc.WriteBYTE(data, self.MemCount) + for i in range(self.MemCount): + data = CommFunc.WriteString(data, self.MemStateList[i].GetLength(), self.MemStateList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TagMapID:%d, + TagMapEx:%d, + IsPrepareErr:%d, + MemCount:%d, + MemStateList:%s + '''\ + %( + self.Head.OutputString(), + self.TagMapID, + self.TagMapEx, + self.IsPrepareErr, + self.MemCount, + "..." + ) + return DumpString + + +m_NAtagGCTeamEnterFBPrepare=tagGCTeamEnterFBPrepare() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamEnterFBPrepare.Head.Cmd,m_NAtagGCTeamEnterFBPrepare.Head.SubCmd))] = m_NAtagGCTeamEnterFBPrepare + + +#------------------------------------------------------ +# B9 03 队伍信息变更 #tagGCTeamInfoChange + +class tagGCTeamInfoChange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagMapID", c_int), # 目标地图 + ("TagMapEx", c_ushort), # 目标地图扩展 + ("ReqMinLV", c_ushort), # 队员最低等级限制 + ("ReqMaxLV", c_ushort), # 队员最高等级限制 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x03 + 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 = 0xB9 + self.SubCmd = 0x03 + self.TagMapID = 0 + self.TagMapEx = 0 + self.ReqMinLV = 0 + self.ReqMaxLV = 0 + return + + def GetLength(self): + return sizeof(tagGCTeamInfoChange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 03 队伍信息变更 //tagGCTeamInfoChange: + Cmd:%s, + SubCmd:%s, + TagMapID:%d, + TagMapEx:%d, + ReqMinLV:%d, + ReqMaxLV:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagMapID, + self.TagMapEx, + self.ReqMinLV, + self.ReqMaxLV + ) + return DumpString + + +m_NAtagGCTeamInfoChange=tagGCTeamInfoChange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamInfoChange.Cmd,m_NAtagGCTeamInfoChange.SubCmd))] = m_NAtagGCTeamInfoChange + + +#------------------------------------------------------ +# B9 10 队伍或玩家匹配状态变更 #tagGCTeamMatchState + +class tagGCTeamMatchState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsMatching", c_ubyte), # 是否匹配中, 0否1是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x10 + 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 = 0xB9 + self.SubCmd = 0x10 + self.IsMatching = 0 + return + + def GetLength(self): + return sizeof(tagGCTeamMatchState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 10 队伍或玩家匹配状态变更 //tagGCTeamMatchState: + Cmd:%s, + SubCmd:%s, + IsMatching:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsMatching + ) + return DumpString + + +m_NAtagGCTeamMatchState=tagGCTeamMatchState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMatchState.Cmd,m_NAtagGCTeamMatchState.SubCmd))] = m_NAtagGCTeamMatchState + + +#------------------------------------------------------ +# B9 02 队伍成员信息刷新 #tagGCTeamMemberInfo + +class tagGCTeamMember(Structure): + Index = 0 #(BYTE Index)// 队员编号 + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + MemberLV = 0 #(BYTE MemberLV)// 成员等级, 0-普通成员, 2-队长 + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + PlayerState = 0 #(BYTE PlayerState)// 0: 离线 1:在线 + MapID = 0 #(DWORD MapID)// 地图ID + LineID = 0 #(BYTE LineID)// 线路ID + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MemberLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Index = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.MemberLV = 0 + self.LV = 0 + self.Job = 0 + self.JobLevel = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.PlayerState = 0 + self.MapID = 0 + self.LineID = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + length += len(self.Name) + length += 1 + length += 2 + length += 1 + length += 1 + length += 2 + length += 4 + length += 4 + length += 1 + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Index) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteBYTE(data, self.MemberLV) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteBYTE(data, self.JobLevel) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteBYTE(data, self.PlayerState) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteBYTE(data, self.LineID) + return data + + def OutputString(self): + DumpString = ''' + Index:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + MemberLV:%d, + LV:%d, + Job:%d, + JobLevel:%d, + RealmLV:%d, + Face:%d, + FacePic:%d, + PlayerState:%d, + MapID:%d, + LineID:%d + '''\ + %( + self.Index, + self.PlayerID, + self.NameLen, + self.Name, + self.MemberLV, + self.LV, + self.Job, + self.JobLevel, + self.RealmLV, + self.Face, + self.FacePic, + self.PlayerState, + self.MapID, + self.LineID + ) + return DumpString + + +class tagGCTeamMemberInfo(Structure): + Head = tagHead() + TeamID = 0 #(DWORD TeamID) + TagMapID = 0 #(DWORD TagMapID)// 目标地图 + TagMapEx = 0 #(WORD TagMapEx)// 目标地图扩展 + ReqMinLV = 0 #(WORD ReqMinLV)// 队员最低等级限制 + ReqMaxLV = 0 #(WORD ReqMaxLV)// 队员最高等级限制 + MemberCount = 0 #(BYTE MemberCount) + MemberList = list() #(vector<tagGCTeamMember> MemberList)// 成员列表, size = MemberCount + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemberCount): + temMemberList = tagGCTeamMember() + _pos = temMemberList.ReadData(_lpData, _pos) + self.MemberList.append(temMemberList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x02 + self.TeamID = 0 + self.TagMapID = 0 + self.TagMapEx = 0 + self.ReqMinLV = 0 + self.ReqMaxLV = 0 + self.MemberCount = 0 + self.MemberList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 2 + length += 2 + length += 2 + length += 1 + for i in range(self.MemberCount): + length += self.MemberList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TeamID) + data = CommFunc.WriteDWORD(data, self.TagMapID) + data = CommFunc.WriteWORD(data, self.TagMapEx) + data = CommFunc.WriteWORD(data, self.ReqMinLV) + data = CommFunc.WriteWORD(data, self.ReqMaxLV) + data = CommFunc.WriteBYTE(data, self.MemberCount) + for i in range(self.MemberCount): + data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TeamID:%d, + TagMapID:%d, + TagMapEx:%d, + ReqMinLV:%d, + ReqMaxLV:%d, + MemberCount:%d, + MemberList:%s + '''\ + %( + self.Head.OutputString(), + self.TeamID, + self.TagMapID, + self.TagMapEx, + self.ReqMinLV, + self.ReqMaxLV, + self.MemberCount, + "..." + ) + return DumpString + + +m_NAtagGCTeamMemberInfo=tagGCTeamMemberInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberInfo.Head.Cmd,m_NAtagGCTeamMemberInfo.Head.SubCmd))] = m_NAtagGCTeamMemberInfo + + +#------------------------------------------------------ +# B9 05 队伍成员属性刷新 #tagGCTeamMemberRefreshProperty + +class tagGCTeamMemberRefreshProperty(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), + ("RefreshType", c_ubyte), #刷新类型,同0418属性类型 + ("Value", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x05 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x05 + self.PlayerID = 0 + self.RefreshType = 0 + self.Value = 0 + return + + def GetLength(self): + return sizeof(tagGCTeamMemberRefreshProperty) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 05 队伍成员属性刷新 //tagGCTeamMemberRefreshProperty: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + RefreshType:%d, + Value:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.RefreshType, + self.Value + ) + return DumpString + + +m_NAtagGCTeamMemberRefreshProperty=tagGCTeamMemberRefreshProperty() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberRefreshProperty.Cmd,m_NAtagGCTeamMemberRefreshProperty.SubCmd))] = m_NAtagGCTeamMemberRefreshProperty + + +#------------------------------------------------------ +# B9 12 队员功能数据查询结果 #tagGCTeamMemFuncDataList + +class tagGCTeamMemFuncData(Structure): + PlayerID = 0 #(DWORD PlayerID) + DataLen = 0 #(WORD DataLen) + MemFuncData = "" #(String MemFuncData)// 队员对应功能数据查询结果 + 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.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MemFuncData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.DataLen = 0 + self.MemFuncData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 2 + length += len(self.MemFuncData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.MemFuncData) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + DataLen:%d, + MemFuncData:%s + '''\ + %( + self.PlayerID, + self.DataLen, + self.MemFuncData + ) + return DumpString + + +class tagGCTeamMemFuncDataList(Structure): + Head = tagHead() + TeamMemFuncType = 0 #(BYTE TeamMemFuncType)// 查询队员的功能数据类型 + MemCount = 0 #(BYTE MemCount) + MemFuncDataList = list() #(vector<tagGCTeamMemFuncData> MemFuncDataList)// 数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TeamMemFuncType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemCount): + temMemFuncDataList = tagGCTeamMemFuncData() + _pos = temMemFuncDataList.ReadData(_lpData, _pos) + self.MemFuncDataList.append(temMemFuncDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x12 + self.TeamMemFuncType = 0 + self.MemCount = 0 + self.MemFuncDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.MemCount): + length += self.MemFuncDataList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TeamMemFuncType) + data = CommFunc.WriteBYTE(data, self.MemCount) + for i in range(self.MemCount): + data = CommFunc.WriteString(data, self.MemFuncDataList[i].GetLength(), self.MemFuncDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TeamMemFuncType:%d, + MemCount:%d, + MemFuncDataList:%s + '''\ + %( + self.Head.OutputString(), + self.TeamMemFuncType, + self.MemCount, + "..." + ) + return DumpString + + +m_NAtagGCTeamMemFuncDataList=tagGCTeamMemFuncDataList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemFuncDataList.Head.Cmd,m_NAtagGCTeamMemFuncDataList.Head.SubCmd))] = m_NAtagGCTeamMemFuncDataList + + +#------------------------------------------------------ +# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo + +class tagGCChampionshipGuessPlayerPri(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("MoneyTotal", c_int), # 已投注该玩家货币总数 + ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;1-代表第一名 + ] + + 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.PlayerID = 0 + self.MoneyTotal = 0 + self.GuessRank = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPri) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo: + PlayerID:%d, + MoneyTotal:%d, + GuessRank:%d + '''\ + %( + self.PlayerID, + self.MoneyTotal, + self.GuessRank + ) + return DumpString + + +class tagGCChampionshipGuessPriList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPri() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPriInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPriList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPriList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo + + +#------------------------------------------------------ +# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo + +class tagGCChampionshipGuessPlayerPub(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("SupportCount", c_int), # 支持人数 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PlayerID = 0 + self.SupportCount = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPub) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo: + PlayerID:%d, + SupportCount:%d + '''\ + %( + self.PlayerID, + self.SupportCount + ) + return DumpString + + +class tagGCChampionshipGuessPubList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPub() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPubInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPubList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPubList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo + + +#------------------------------------------------------ +# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet + +class tagGCChampionshipOfficialApplyReplyRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 界主玩家名 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//申请官职ID + IsOK = 0 #(BYTE IsOK)//是否同意;1-是;0-否 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + 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.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.IsOK = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + length += 2 + 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.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.IsOK) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + IsOK:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.IsOK + ) + return DumpString + + +m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet + + +#------------------------------------------------------ +# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo + +class tagGCChampionshipOfficialChallengeRecord(Structure): + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + ChallengeTime = 0 #(DWORD ChallengeTime)//挑战时间戳 + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜; + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.PlayerName = "" + self.ChallengeTime = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.PlayerName) + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.ChallengeTime) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + PlayerName:%s, + ChallengeTime:%d, + Ret:%d + '''\ + %( + self.NameLen, + self.PlayerName, + self.ChallengeTime, + self.Ret + ) + return DumpString + + +class tagGCChampionshipOfficialChallengeRecordInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 分区ID + MainOfficialID = 0 #(WORD MainOfficialID)// 界主官职ID + OfficialID = 0 #(WORD OfficialID)// 记录的官职ID + RecordCount = 0 #(BYTE RecordCount)// 挑战记录数 + RecordList = list() #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temRecordList = tagGCChampionshipOfficialChallengeRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.RecordCount = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.RecordCount): + length += self.RecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + RecordCount:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo + + +#------------------------------------------------------ +# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet + +class tagGCChampionshipOfficialChallengeRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//挑战的官职ID + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + 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.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + length += 2 + 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.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + Ret:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.Ret + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet + + +#------------------------------------------------------ +# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo + +class tagGCChampionshipOfficialPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCChampionshipOfficial(Structure): + OfficialID = 0 #(DWORD OfficialID)// 官职ID + LastDismissJuniorTime = 0 #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD + WorshipCount = 0 #(DWORD WorshipCount)// 被膜拜次数 + WorshipDouble = 0 #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用 + OfficialPlayer=tagGCChampionshipOfficialPlayer() #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有 + ApplyPlayerCount = 0 #(BYTE ApplyPlayerCount)// 申请该仙官玩家数 + ApplyPlayerList = list() #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) + _pos = self.OfficialPlayer.ReadData(_lpData,_pos) + self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ApplyPlayerCount): + temApplyPlayerList = tagGCChampionshipOfficialPlayer() + _pos = temApplyPlayerList.ReadData(_lpData, _pos) + self.ApplyPlayerList.append(temApplyPlayerList) + return _pos + + def Clear(self): + self.OfficialID = 0 + self.LastDismissJuniorTime = 0 + self.WorshipCount = 0 + self.WorshipDouble = 0 + self.OfficialPlayer=tagGCChampionshipOfficialPlayer() + self.OfficialPlayer.Clear() + self.ApplyPlayerCount = 0 + self.ApplyPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += self.OfficialPlayer.GetLength() + length += 1 + for i in range(self.ApplyPlayerCount): + length += self.ApplyPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OfficialID) + data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime) + data = CommFunc.WriteDWORD(data, self.WorshipCount) + data = CommFunc.WriteBYTE(data, self.WorshipDouble) + data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount) + for i in range(self.ApplyPlayerCount): + data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + OfficialID:%d, + LastDismissJuniorTime:%d, + WorshipCount:%d, + WorshipDouble:%d, + OfficialPlayer:%s, + ApplyPlayerCount:%d, + ApplyPlayerList:%s + '''\ + %( + self.OfficialID, + self.LastDismissJuniorTime, + self.WorshipCount, + self.WorshipDouble, + self.OfficialPlayer.OutputString(), + self.ApplyPlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipOfficialInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 官职数据分区ID + OfficialCount = 0 #(BYTE OfficialCount)// 官职数,包含界主及所有仙官 + OfficialList = list() #(vector<tagGCChampionshipOfficial> OfficialList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.OfficialCount): + temOfficialList = tagGCChampionshipOfficial() + _pos = temOfficialList.ReadData(_lpData, _pos) + self.OfficialList.append(temOfficialList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + self.ZoneID = 0 + self.OfficialCount = 0 + self.OfficialList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.OfficialCount): + length += self.OfficialList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.OfficialCount) + for i in range(self.OfficialCount): + data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + OfficialCount:%d, + OfficialList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.OfficialCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo + + +#------------------------------------------------------ +# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo + +class tagGCCrossBattlefieldPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分 + 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.FightPowerEx,_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.FightPowerEx = 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.FightPowerEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx + ) + return DumpString + + +class tagGCCrossBattlefieldBuyPlayer(Structure): + BuyPlayerID = 0 #(DWORD BuyPlayerID)//购买的玩家ID,即召集人 + Faction = 0 #(BYTE Faction)//阵营 1-红;2-蓝 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 + FactionPlayerCount = 0 #(BYTE FactionPlayerCount) + FactionPlayerList = list() #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FactionPlayerCount): + temFactionPlayerList = tagGCCrossBattlefieldPlayer() + _pos = temFactionPlayerList.ReadData(_lpData, _pos) + self.FactionPlayerList.append(temFactionPlayerList) + return _pos + + def Clear(self): + self.BuyPlayerID = 0 + self.Faction = 0 + self.ServerOnly = 0 + self.FactionPlayerCount = 0 + self.FactionPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.FactionPlayerCount): + length += self.FactionPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.BuyPlayerID) + data = CommFunc.WriteBYTE(data, self.Faction) + data = CommFunc.WriteBYTE(data, self.ServerOnly) + data = CommFunc.WriteBYTE(data, self.FactionPlayerCount) + for i in range(self.FactionPlayerCount): + data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BuyPlayerID:%d, + Faction:%d, + ServerOnly:%d, + FactionPlayerCount:%d, + FactionPlayerList:%s + '''\ + %( + self.BuyPlayerID, + self.Faction, + self.ServerOnly, + self.FactionPlayerCount, + "..." + ) + return DumpString + + +class tagGCCrossBattlefieldBuyHM(Structure): + Hour = 0 #(BYTE Hour)//战场开启时 + Minute = 0 #(BYTE Minute)//战场开启分 + BuyPlayerCount = 0 #(BYTE BuyPlayerCount) + BuyPlayerList = list() #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BuyPlayerCount): + temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer() + _pos = temBuyPlayerList.ReadData(_lpData, _pos) + self.BuyPlayerList.append(temBuyPlayerList) + return _pos + + def Clear(self): + self.Hour = 0 + self.Minute = 0 + self.BuyPlayerCount = 0 + self.BuyPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.BuyPlayerCount): + length += self.BuyPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Hour) + data = CommFunc.WriteBYTE(data, self.Minute) + data = CommFunc.WriteBYTE(data, self.BuyPlayerCount) + for i in range(self.BuyPlayerCount): + data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Hour:%d, + Minute:%d, + BuyPlayerCount:%d, + BuyPlayerList:%s + '''\ + %( + self.Hour, + self.Minute, + self.BuyPlayerCount, + "..." + ) + return DumpString + + +class tagGCCrossBattlefieldBuyInfo(Structure): + Head = tagHead() + HMCount = 0 #(BYTE HMCount)// 为0时清空重置,其他为增量更新 + HMBuyList = list() #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HMCount): + temHMBuyList = tagGCCrossBattlefieldBuyHM() + _pos = temHMBuyList.ReadData(_lpData, _pos) + self.HMBuyList.append(temHMBuyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x09 + self.HMCount = 0 + self.HMBuyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.HMCount): + length += self.HMBuyList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.HMCount) + for i in range(self.HMCount): + data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + HMCount:%d, + HMBuyList:%s + '''\ + %( + self.Head.OutputString(), + self.HMCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo + + +#------------------------------------------------------ +# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo + +class tagGCCrossBillboardData(Structure): + OrderIndex = 0 #(WORD OrderIndex)//名次索引,0代表第一名 + ID = 0 #(DWORD ID) + ID2 = 0 #(DWORD ID2) + Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 + Name2 = "" #(char Name2[65])//名字2 + Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 + Value1 = 0 #(DWORD Value1)//自定义值1 + Value2 = 0 #(DWORD Value2)//自定义值2 + Value3 = 0 #(DWORD Value3)//附加值 + Value4 = 0 #(DWORD Value4)//附加值 + Value5 = 0 #(DWORD Value5)//附加值 + Value6 = 0 #(DWORD Value6)//附加值 + Value7 = 0 #(DWORD Value7)//附加值 + Value8 = 0 #(DWORD Value8)//附加值 + CmpValue = 0 #(DWORD CmpValue)// 比较权值 + CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 + CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + DataLen = 0 #(WORD DataLen) + UserData = "" #(String UserData)//附加 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) + self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) + return _pos + + def Clear(self): + self.OrderIndex = 0 + self.ID = 0 + self.ID2 = 0 + self.Name1 = "" + self.Name2 = "" + self.Type2 = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 + self.CmpValue = 0 + self.CmpValue2 = 0 + self.CmpValue3 = 0 + self.DataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 2 + length += 4 + length += 4 + length += 33 + length += 65 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteWORD(data, self.OrderIndex) + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteDWORD(data, self.ID2) + data = CommFunc.WriteString(data, 33, self.Name1) + data = CommFunc.WriteString(data, 65, self.Name2) + data = CommFunc.WriteBYTE(data, self.Type2) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) + data = CommFunc.WriteDWORD(data, self.CmpValue) + data = CommFunc.WriteDWORD(data, self.CmpValue2) + data = CommFunc.WriteDWORD(data, self.CmpValue3) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + OrderIndex:%d, + ID:%d, + ID2:%d, + Name1:%s, + Name2:%s, + Type2:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, + CmpValue:%d, + CmpValue2:%d, + CmpValue3:%d, + DataLen:%d, + UserData:%s + '''\ + %( + self.OrderIndex, + self.ID, + self.ID2, + self.Name1, + self.Name2, + self.Type2, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, + self.CmpValue, + self.CmpValue2, + self.CmpValue3, + self.DataLen, + self.UserData + ) + return DumpString + + +class tagGCCrossBillboardInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//榜单类型 + GroupValue1 = 0 #(DWORD GroupValue1)// 分组值1 + GroupValue2 = 0 #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 + BillboardCount = 0 #(BYTE BillboardCount) + CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillboardCount): + temCrossBillboardDataList = tagGCCrossBillboardData() + _pos = temCrossBillboardDataList.ReadData(_lpData, _pos) + self.CrossBillboardDataList.append(temCrossBillboardDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + self.Type = 0 + self.GroupValue1 = 0 + self.GroupValue2 = 0 + self.WatchID = 0 + self.BillboardCount = 0 + self.CrossBillboardDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.BillboardCount): + length += self.CrossBillboardDataList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteDWORD(data, self.GroupValue1) + data = CommFunc.WriteDWORD(data, self.GroupValue2) + data = CommFunc.WriteDWORD(data, self.WatchID) + data = CommFunc.WriteBYTE(data, self.BillboardCount) + for i in range(self.BillboardCount): + data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + GroupValue1:%d, + GroupValue2:%d, + WatchID:%d, + BillboardCount:%d, + CrossBillboardDataList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.GroupValue1, + self.GroupValue2, + self.WatchID, + self.BillboardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo + + +#------------------------------------------------------ +# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver + +class tagGCCrossChampionshipPKOver(Structure): + Head = tagHead() + GroupMark = 0 #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛 + TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss + OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线 + WinnerID = 0 #(DWORD WinnerID)// 胜方ID + LoserID = 0 #(DWORD LoserID)// 败方ID + RoundCount = 0 #(BYTE RoundCount)// PK回合数 + RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表 + TagNameLen = 0 #(BYTE TagNameLen) + TagName = "" #(String TagName) + Rank = 0 #(BYTE Rank)// 最终名次,决赛才有 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GroupMark,_pos = CommFunc.ReadDWORD(_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.LoserID,_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.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen) + self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + self.GroupMark = 0 + self.TimeStr = "" + self.OverType = 0 + self.WinnerID = 0 + self.LoserID = 0 + self.RoundCount = 0 + self.RoundWinnerID = list() + self.TagNameLen = 0 + self.TagName = "" + self.Rank = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 19 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 * self.RoundCount + length += 1 + length += len(self.TagName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteString(data, 19, self.TimeStr) + data = CommFunc.WriteBYTE(data, self.OverType) + data = CommFunc.WriteDWORD(data, self.WinnerID) + data = CommFunc.WriteDWORD(data, self.LoserID) + data = CommFunc.WriteBYTE(data, self.RoundCount) + for i in range(self.RoundCount): + data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i]) + data = CommFunc.WriteBYTE(data, self.TagNameLen) + data = CommFunc.WriteString(data, self.TagNameLen, self.TagName) + data = CommFunc.WriteBYTE(data, self.Rank) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GroupMark:%d, + TimeStr:%s, + OverType:%d, + WinnerID:%d, + LoserID:%d, + RoundCount:%d, + RoundWinnerID:%s, + TagNameLen:%d, + TagName:%s, + Rank:%d + '''\ + %( + self.Head.OutputString(), + self.GroupMark, + self.TimeStr, + self.OverType, + self.WinnerID, + self.LoserID, + self.RoundCount, + "...", + self.TagNameLen, + self.TagName, + self.Rank + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver + + +#------------------------------------------------------ +# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo + +class tagGCCrossChampionshipPKBattle(Structure): + BattleNum = 0 #(BYTE BattleNum)// 对战组编号 1~n + WinPlayerID = 0 #(DWORD WinPlayerID)// 获胜玩家ID + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家IDA + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家IDB + BattleRetLen = 0 #(BYTE BattleRetLen) + BattleRet = "" #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...} + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen) + return _pos + + def Clear(self): + self.BattleNum = 0 + self.WinPlayerID = 0 + self.PlayerIDA = 0 + self.PlayerIDB = 0 + self.BattleRetLen = 0 + self.BattleRet = "" + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.BattleRet) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BattleNum) + data = CommFunc.WriteDWORD(data, self.WinPlayerID) + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.BattleRetLen) + data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet) + return data + + def OutputString(self): + DumpString = ''' + BattleNum:%d, + WinPlayerID:%d, + PlayerIDA:%d, + PlayerIDB:%d, + BattleRetLen:%d, + BattleRet:%s + '''\ + %( + self.BattleNum, + self.WinPlayerID, + self.PlayerIDA, + self.PlayerIDB, + self.BattleRetLen, + self.BattleRet + ) + return DumpString + + +class tagGCCrossChampionshipPKGroup(Structure): + GroupMark = 0 #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛; + BattleCount = 0 #(BYTE BattleCount)// 对战组数 + BattleList = list() #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BattleCount): + temBattleList = tagGCCrossChampionshipPKBattle() + _pos = temBattleList.ReadData(_lpData, _pos) + self.BattleList.append(temBattleList) + return _pos + + def Clear(self): + self.GroupMark = 0 + self.BattleCount = 0 + self.BattleList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.BattleCount): + length += self.BattleList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteBYTE(data, self.BattleCount) + for i in range(self.BattleCount): + data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GroupMark:%d, + BattleCount:%d, + BattleList:%s + '''\ + %( + self.GroupMark, + self.BattleCount, + "..." + ) + return DumpString + + +class tagGCCrossChampionshipPKPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + ServerID = 0 #(DWORD ServerID) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.ServerID = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.ServerID) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d, + Face:%d, + FacePic:%d, + ServerID:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV, + self.Face, + self.FacePic, + self.ServerID + ) + return DumpString + + +class tagGCCrossChampionshipPKZoneGroupInfo(Structure): + Head = tagHead() + ActID = 0 #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据 + StateError = 0 #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动; + ZoneID = 0 #(BYTE ZoneID)// 排位分区ID + PlayerCount = 0 #(BYTE PlayerCount)// 参赛玩家数 + PlayerList = list() #(vector<tagGCCrossChampionshipPKPlayer> PlayerList) + GroupCount = 0 #(WORD GroupCount) + GroupList = list() #(vector<tagGCCrossChampionshipPKGroup> GroupList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temPlayerList = tagGCCrossChampionshipPKPlayer() + _pos = temPlayerList.ReadData(_lpData, _pos) + self.PlayerList.append(temPlayerList) + self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.GroupCount): + temGroupList = tagGCCrossChampionshipPKGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + self.ActID = 0 + self.StateError = 0 + self.ZoneID = 0 + self.PlayerCount = 0 + self.PlayerList = list() + self.GroupCount = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.PlayerList[i].GetLength() + length += 2 + for i in range(self.GroupCount): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ActID) + data = CommFunc.WriteBYTE(data, self.StateError) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.GroupCount) + for i in range(self.GroupCount): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActID:%d, + StateError:%d, + ZoneID:%d, + PlayerCount:%d, + PlayerList:%s, + GroupCount:%d, + GroupList:%s + '''\ + %( + self.Head.OutputString(), + self.ActID, + self.StateError, + self.ZoneID, + self.PlayerCount, + "...", + self.GroupCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo + + +#------------------------------------------------------ +# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo + +class tagGCCrossRealmPKBillboardData(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + FightPower = 0 #(DWORD FightPower) + RealmLV = 0 #(WORD RealmLV) + PKScore = 0 #(DWORD PKScore) + DanLV = 0 #(BYTE DanLV) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.FightPower = 0 + self.RealmLV = 0 + self.PKScore = 0 + self.DanLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 4 + length += 4 + length += 4 + length += 2 + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.PKScore) + data = CommFunc.WriteBYTE(data, self.DanLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + Face:%d, + FacePic:%d, + FightPower:%d, + RealmLV:%d, + PKScore:%d, + DanLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.Face, + self.FacePic, + self.FightPower, + self.RealmLV, + self.PKScore, + self.DanLV + ) + return DumpString + + +class tagGCCrossRealmPKBillboardInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 赛区ID + SeasonID = 0 #(BYTE SeasonID)// 赛季ID + Count = 0 #(WORD Count) + PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPKBillboardList = tagGCCrossRealmPKBillboardData() + _pos = temPKBillboardList.ReadData(_lpData, _pos) + self.PKBillboardList.append(temPKBillboardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x05 + self.ZoneID = 0 + self.SeasonID = 0 + self.Count = 0 + self.PKBillboardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 2 + for i in range(self.Count): + length += self.PKBillboardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.SeasonID) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + SeasonID:%d, + Count:%d, + PKBillboardList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.SeasonID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo + + +#------------------------------------------------------ +# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK + +class tagGCCrossRealmPKMatchPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 跨服名字 + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 + ServerID = 0 #(DWORD ServerID) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.ServerID = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.ServerID) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d, + ServerID:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.Face, + self.FacePic, + self.FightPower, + self.FightPowerEx, + self.ServerID + ) + return DumpString + + +class tagGCCrossRealmPKMatchOK(Structure): + Head = tagHead() + MatchPlayerCount = 0 #(BYTE MatchPlayerCount) + MatchPlayer = list() #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家 + 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.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MatchPlayerCount): + temMatchPlayer = tagGCCrossRealmPKMatchPlayer() + _pos = temMatchPlayer.ReadData(_lpData, _pos) + self.MatchPlayer.append(temMatchPlayer) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x01 + self.MatchPlayerCount = 0 + self.MatchPlayer = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.MatchPlayerCount): + length += self.MatchPlayer[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.MatchPlayerCount) + for i in range(self.MatchPlayerCount): + data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MatchPlayerCount:%d, + MatchPlayer:%s + '''\ + %( + self.Head.OutputString(), + self.MatchPlayerCount, + "..." + ) + 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 #(DWORD 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.ReadDWORD(_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 += 4 + 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.WriteDWORD(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 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo + +class tagGCCrossRealmPKSeason(Structure): + SeasonID = 0 #(WORD SeasonID)// 当前赛季ID + StartDate = "" #(char StartDate[10])// 开始日期 yyyy-MM-dd + EndDate = "" #(char EndDate[10])// 结束日期 yyyy-MM-dd + EndTime = "" #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.SeasonID = 0 + self.StartDate = "" + self.EndDate = "" + self.EndTime = "" + return + + def GetLength(self): + length = 0 + length += 2 + length += 10 + length += 10 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteWORD(data, self.SeasonID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndDate) + data = CommFunc.WriteString(data, 5, self.EndTime) + return data + + def OutputString(self): + DumpString = ''' + SeasonID:%d, + StartDate:%s, + EndDate:%s, + EndTime:%s + '''\ + %( + self.SeasonID, + self.StartDate, + self.EndDate, + self.EndTime + ) + return DumpString + + +class tagGCCrossRealmPKZone(Structure): + ZoneID = 0 #(BYTE ZoneID)// 赛区ID + ZoneNameLen = 0 #(BYTE ZoneNameLen) + ZoneName = "" #(String ZoneName)// 赛区名 + SeasonCount = 0 #(WORD SeasonCount) + SeasonList = list() #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen) + self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.SeasonCount): + temSeasonList = tagGCCrossRealmPKSeason() + _pos = temSeasonList.ReadData(_lpData, _pos) + self.SeasonList.append(temSeasonList) + return _pos + + def Clear(self): + self.ZoneID = 0 + self.ZoneNameLen = 0 + self.ZoneName = "" + self.SeasonCount = 0 + self.SeasonList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += len(self.ZoneName) + length += 2 + for i in range(self.SeasonCount): + length += self.SeasonList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.ZoneNameLen) + data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName) + data = CommFunc.WriteWORD(data, self.SeasonCount) + for i in range(self.SeasonCount): + data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ZoneID:%d, + ZoneNameLen:%d, + ZoneName:%s, + SeasonCount:%d, + SeasonList:%s + '''\ + %( + self.ZoneID, + self.ZoneNameLen, + self.ZoneName, + self.SeasonCount, + "..." + ) + return DumpString + + +class tagGCCrossRealmPKSeasonInfo(Structure): + Head = tagHead() + ZoneCount = 0 #(BYTE ZoneCount)// 赛区个数 + ZoneList = list() #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ZoneCount): + temZoneList = tagGCCrossRealmPKZone() + _pos = temZoneList.ReadData(_lpData, _pos) + self.ZoneList.append(temZoneList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x04 + self.ZoneCount = 0 + self.ZoneList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.ZoneCount): + length += self.ZoneList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneCount) + for i in range(self.ZoneCount): + data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneCount:%d, + ZoneList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo + + +#------------------------------------------------------ +# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState + +class tagGCCrossRealmPKSeasonState(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 所属赛区ID + SeasonID = 0 #(WORD SeasonID)// 当前赛季ID + SeasonState = 0 #(BYTE SeasonState)// 赛季状态;0-未开启,1-开启中,2-已结束 + MatchState = 0 #(BYTE MatchState)// 匹配状态;0-未开启;1-开启中 + CrossZoneNameLen = 0 #(BYTE CrossZoneNameLen) + CrossZoneName = "" #(String CrossZoneName)// 跨服分区名 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SeasonState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CrossZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CrossZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.CrossZoneNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x06 + self.ZoneID = 0 + self.SeasonID = 0 + self.SeasonState = 0 + self.MatchState = 0 + self.CrossZoneNameLen = 0 + self.CrossZoneName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 1 + length += 1 + length += 1 + length += len(self.CrossZoneName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.SeasonID) + data = CommFunc.WriteBYTE(data, self.SeasonState) + data = CommFunc.WriteBYTE(data, self.MatchState) + data = CommFunc.WriteBYTE(data, self.CrossZoneNameLen) + data = CommFunc.WriteString(data, self.CrossZoneNameLen, self.CrossZoneName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + SeasonID:%d, + SeasonState:%d, + MatchState:%d, + CrossZoneNameLen:%d, + CrossZoneName:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.SeasonID, + self.SeasonState, + self.MatchState, + self.CrossZoneNameLen, + self.CrossZoneName + ) + return DumpString + + +m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Head.Cmd,m_NAtagGCCrossRealmPKSeasonState.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState + + +#------------------------------------------------------ +# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch + +class tagGCCrossRealmPKStartMatch(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsRobot", 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 + self.IsRobot = 0 + 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, + IsRobot:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsRobot + ) + return DumpString + + +m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch + + +#------------------------------------------------------ +# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo + +class tagGCCrossYaomoBossPlayerHurtInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 总伤害值,小于亿部分 + ("HurtTotalEx", c_int), # 总伤害值,整除亿部分 + ("AwardState", c_int), # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + 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 = 0xC0 + self.SubCmd = 0x11 + self.HurtTotal = 0 + self.HurtTotalEx = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossYaomoBossPlayerHurtInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalEx:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalEx, + self.AwardState + ) + return DumpString + + +m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo + + +#------------------------------------------------------ +# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo + +class tagGCCrossZoneInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CommZoneID", c_ubyte), # 所属常规分区ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x10 + 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 = 0x10 + self.CommZoneID = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossZoneInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo: + Cmd:%s, + SubCmd:%s, + CommZoneID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CommZoneID + ) + return DumpString + + +m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo + + +#------------------------------------------------------ +# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo + +class tagGCFamilyGCZActFamily(Structure): + FamilyID = 0 #(DWORD FamilyID) + Name = "" #(char Name[33])//参与仙盟名字 + LV = 0 #(BYTE LV)//仙盟等级 + ServerID = 0 #(DWORD ServerID)//仙盟所属区服ID + EmblemID = 0 #(DWORD EmblemID)//徽章ID + FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 + LeaderID = 0 #(DWORD LeaderID)//盟主ID + LeaderName = "" #(char LeaderName[33])//盟主名 + LeaderFace = 0 #(DWORD LeaderFace) + LeaderFacePic = 0 #(DWORD LeaderFacePic) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.FamilyID = 0 + self.Name = "" + self.LV = 0 + self.ServerID = 0 + self.EmblemID = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.LeaderID = 0 + self.LeaderName = "" + self.LeaderFace = 0 + self.LeaderFacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 33 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.LV) + data = CommFunc.WriteDWORD(data, self.ServerID) + data = CommFunc.WriteDWORD(data, self.EmblemID) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.LeaderID) + data = CommFunc.WriteString(data, 33, self.LeaderName) + data = CommFunc.WriteDWORD(data, self.LeaderFace) + data = CommFunc.WriteDWORD(data, self.LeaderFacePic) + return data + + def OutputString(self): + DumpString = ''' + FamilyID:%d, + Name:%s, + LV:%d, + ServerID:%d, + EmblemID:%d, + FightPower:%d, + FightPowerEx:%d, + LeaderID:%d, + LeaderName:%s, + LeaderFace:%d, + LeaderFacePic:%d + '''\ + %( + self.FamilyID, + self.Name, + self.LV, + self.ServerID, + self.EmblemID, + self.FightPower, + self.FightPowerEx, + self.LeaderID, + self.LeaderName, + self.LeaderFace, + self.LeaderFacePic + ) + return DumpString + + +class tagGCFamilyGCZActInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + ZoneID = 0 #(BYTE ZoneID)// 活动分区ID,公示期为0 + ActID = 0 #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinFamilyCnt = 0 #(BYTE JoinFamilyCnt)// 参与仙盟数 + ActFlowID = 0 #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态 + GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示 + PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 + FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 + StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示 + FamilyCount = 0 #(BYTE FamilyCount) + ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x24 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyCount): + temActFamilyList = tagGCFamilyGCZActFamily() + _pos = temActFamilyList.ReadData(_lpData, _pos) + self.ActFamilyList.append(temActFamilyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x24 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.ZoneID = 0 + self.ActID = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinFamilyCnt = 0 + self.ActFlowID = 0 + self.GuessTemplateID = 0 + self.PersonalTemplateID = 0 + self.FamilyTemplateID = 0 + self.StateError = 0 + self.FamilyCount = 0 + self.ActFamilyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 4 + length += 10 + length += 10 + length += 1 + length += 2 + length += 2 + length += 2 + length += 2 + length += 4 + length += 1 + for i in range(self.FamilyCount): + length += self.ActFamilyList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteDWORD(data, self.ActID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt) + data = CommFunc.WriteWORD(data, self.ActFlowID) + data = CommFunc.WriteWORD(data, self.GuessTemplateID) + data = CommFunc.WriteWORD(data, self.PersonalTemplateID) + data = CommFunc.WriteWORD(data, self.FamilyTemplateID) + data = CommFunc.WriteDWORD(data, self.StateError) + data = CommFunc.WriteBYTE(data, self.FamilyCount) + for i in range(self.FamilyCount): + data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + ZoneID:%d, + ActID:%d, + StartDate:%s, + EndtDate:%s, + JoinFamilyCnt:%d, + ActFlowID:%d, + GuessTemplateID:%d, + PersonalTemplateID:%d, + FamilyTemplateID:%d, + StateError:%d, + FamilyCount:%d, + ActFamilyList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.ZoneID, + self.ActID, + self.StartDate, + self.EndtDate, + self.JoinFamilyCnt, + self.ActFlowID, + self.GuessTemplateID, + self.PersonalTemplateID, + self.FamilyTemplateID, + self.StateError, + self.FamilyCount, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo + + +#------------------------------------------------------ +# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo + +class tagGCFamilyGCZBatCityInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CityID", c_int), #城池ID + ("CityLV", c_ubyte), #城池等级 + ("FamilyID", c_int), #所属仙盟ID,可能为0 + ("GuardID", c_int), #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁 + ("HP", c_int), #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败 + ("HPEx", c_int), #防守成员剩余生命,整除亿部分 + ("HPMax", c_int), #防守成员最大生命,求余亿部分 + ("HPMaxEx", c_int), #防守成员最大生命,整除亿部分 + ("AtkPlayerID", c_int), #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现 + ("AtkRet", c_ubyte), #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他 + ("KillCnt", c_ubyte), #本次攻击击杀防守人员数 + ("HurtValue", c_int), #伤害飘血,求余亿部分 + ("HurtValueEx", c_int), #伤害飘血,整除亿部分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x29 + 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 = 0x29 + self.CityID = 0 + self.CityLV = 0 + self.FamilyID = 0 + self.GuardID = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.AtkPlayerID = 0 + self.AtkRet = 0 + self.KillCnt = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatCityInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo: + Cmd:%s, + SubCmd:%s, + CityID:%d, + CityLV:%d, + FamilyID:%d, + GuardID:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + AtkPlayerID:%d, + AtkRet:%d, + KillCnt:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CityID, + self.CityLV, + self.FamilyID, + self.GuardID, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.AtkPlayerID, + self.AtkRet, + self.KillCnt, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo + + +#------------------------------------------------------ +# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo + +class tagGCFamilyGCZBatGroup(Structure): + GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A + FamilyIDCnt = 0 #(BYTE FamilyIDCnt) + FamilyIDList = list() #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyIDCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FamilyIDList.append(value) + return _pos + + def Clear(self): + self.GroupNum = 0 + self.FamilyIDCnt = 0 + self.FamilyIDList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 4 * self.FamilyIDCnt + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GroupNum) + data = CommFunc.WriteBYTE(data, self.FamilyIDCnt) + for i in range(self.FamilyIDCnt): + data = CommFunc.WriteDWORD(data, self.FamilyIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + GroupNum:%d, + FamilyIDCnt:%d, + FamilyIDList:%s + '''\ + %( + self.GroupNum, + self.FamilyIDCnt, + "..." + ) + return DumpString + + +class tagGCFamilyGCZBat(Structure): + BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; + GroupCnt = 0 #(BYTE GroupCnt)// 分组数 + GroupList = list() #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GroupCnt): + temGroupList = tagGCFamilyGCZBatGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.BatType = 0 + self.GroupCnt = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.GroupCnt): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BatType) + data = CommFunc.WriteBYTE(data, self.GroupCnt) + for i in range(self.GroupCnt): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BatType:%d, + GroupCnt:%d, + GroupList:%s + '''\ + %( + self.BatType, + self.GroupCnt, + "..." + ) + return DumpString + + +class tagGCFamilyGCZBatGroupInfo(Structure): + Head = tagHead() + RoundNum = 0 #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格 + BatTypeCnt = 0 #(BYTE BatTypeCnt)// 战场类型数 + BatList = list() #(vector<tagGCFamilyGCZBat> BatList)//战场列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BatTypeCnt): + temBatList = tagGCFamilyGCZBat() + _pos = temBatList.ReadData(_lpData, _pos) + self.BatList.append(temBatList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x25 + self.RoundNum = 0 + self.BatTypeCnt = 0 + self.BatList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.BatTypeCnt): + length += self.BatList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RoundNum) + data = CommFunc.WriteBYTE(data, self.BatTypeCnt) + for i in range(self.BatTypeCnt): + data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RoundNum:%d, + BatTypeCnt:%d, + BatList:%s + '''\ + %( + self.Head.OutputString(), + self.RoundNum, + self.BatTypeCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo + + +#------------------------------------------------------ +# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport + +class tagGCFamilyGCZBatRepHurt(Structure): + _pack_ = 1 + _fields_ = [ + ("TagFamilyID", c_int), #目标仙盟ID + ("HurtValue", c_int), #输出伤害,求余亿部分 + ("HurtValueEx", c_int), #输出伤害,整除亿部分 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.TagFamilyID = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatRepHurt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport: + TagFamilyID:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.TagFamilyID, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZBatReport(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)// 战报仙盟ID + DefRepCnt = 0 #(BYTE DefRepCnt) + DefRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报 + AtkRepCnt = 0 #(BYTE AtkRepCnt) + AtkRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x30 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DefRepCnt): + temDefRepList = tagGCFamilyGCZBatRepHurt() + _pos = temDefRepList.ReadData(_lpData, _pos) + self.DefRepList.append(temDefRepList) + self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AtkRepCnt): + temAtkRepList = tagGCFamilyGCZBatRepHurt() + _pos = temAtkRepList.ReadData(_lpData, _pos) + self.AtkRepList.append(temAtkRepList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x30 + self.FamilyID = 0 + self.DefRepCnt = 0 + self.DefRepList = list() + self.AtkRepCnt = 0 + self.AtkRepList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.DefRepCnt): + length += self.DefRepList[i].GetLength() + length += 1 + for i in range(self.AtkRepCnt): + length += self.AtkRepList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.DefRepCnt) + for i in range(self.DefRepCnt): + data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AtkRepCnt) + for i in range(self.AtkRepCnt): + data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + DefRepCnt:%d, + DefRepList:%s, + AtkRepCnt:%d, + AtkRepList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.DefRepCnt, + "...", + self.AtkRepCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport + + +#------------------------------------------------------ +# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo + +class tagGCFamilyGCZBatScenePlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33]) + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face) + FacePic = 0 #(DWORD FacePic) + 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.Name = "" + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + Job:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.PlayerID, + self.Name, + self.Job, + self.Face, + self.FacePic + ) + return DumpString + + +class tagGCFamilyGCZBatSceneHurt(Structure): + _pack_ = 1 + _fields_ = [ + ("CityID", c_int), #被攻击的城池ID + ("HurtValue", c_int), #伤害飘血,求余亿部分 + ("HurtValueEx", c_int), #伤害飘血,整除亿部分 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.CityID = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatSceneHurt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: + CityID:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.CityID, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZBatSceneCity(Structure): + _pack_ = 1 + _fields_ = [ + ("CityID", c_int), #城池ID + ("CityLV", c_ubyte), #城池等级 + ("FamilyID", c_int), #所属仙盟ID,可能为0 + ("Rank", c_ubyte), #当前名次,从1开始 + ("HP", c_int), #剩余生命,求余亿部分,剩余生命为0时代表被摧毁 + ("HPEx", c_int), #剩余生命,整除亿部分 + ("HPMax", c_int), #最大生命,求余亿部分 + ("HPMaxEx", c_int), #最大生命,整除亿部分 + ("LastAtkedTime", c_int), #最后一次被攻击时间戳,可能为0 + ] + + 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.CityID = 0 + self.CityLV = 0 + self.FamilyID = 0 + self.Rank = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.LastAtkedTime = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatSceneCity) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: + CityID:%d, + CityLV:%d, + FamilyID:%d, + Rank:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + LastAtkedTime:%d + '''\ + %( + self.CityID, + self.CityLV, + self.FamilyID, + self.Rank, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.LastAtkedTime + ) + return DumpString + + +class tagGCFamilyGCZBatSceneInfo(Structure): + Head = tagHead() + BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; + GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A + TopFamilyID = 0 #(DWORD TopFamilyID)// 伤害第一仙盟ID + TopLeaderID = 0 #(DWORD TopLeaderID)// 伤害第一盟主ID + TopPlayerID = 0 #(DWORD TopPlayerID)// 伤害第一玩家ID + TopPlayerFamilyID = 0 #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID + AtkPlayerID = 0 #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息 + AtkType = 0 #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效 + KillCnt = 0 #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效 + HurtCnt = 0 #(BYTE HurtCnt) + HurtList = list() #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效 + CityCnt = 0 #(BYTE CityCnt) + CityList = list() #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池 + PlayerCnt = 0 #(BYTE PlayerCnt) + PlayerInfoList = list() #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x28 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HurtCnt): + temHurtList = tagGCFamilyGCZBatSceneHurt() + _pos = temHurtList.ReadData(_lpData, _pos) + self.HurtList.append(temHurtList) + self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CityCnt): + temCityList = tagGCFamilyGCZBatSceneCity() + _pos = temCityList.ReadData(_lpData, _pos) + self.CityList.append(temCityList) + self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCnt): + temPlayerInfoList = tagGCFamilyGCZBatScenePlayer() + _pos = temPlayerInfoList.ReadData(_lpData, _pos) + self.PlayerInfoList.append(temPlayerInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x28 + self.BatType = 0 + self.GroupNum = 0 + self.TopFamilyID = 0 + self.TopLeaderID = 0 + self.TopPlayerID = 0 + self.TopPlayerFamilyID = 0 + self.AtkPlayerID = 0 + self.AtkType = 0 + self.KillCnt = 0 + self.HurtCnt = 0 + self.HurtList = list() + self.CityCnt = 0 + self.CityList = list() + self.PlayerCnt = 0 + self.PlayerInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.HurtCnt): + length += self.HurtList[i].GetLength() + length += 1 + for i in range(self.CityCnt): + length += self.CityList[i].GetLength() + length += 1 + for i in range(self.PlayerCnt): + 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.BatType) + data = CommFunc.WriteBYTE(data, self.GroupNum) + data = CommFunc.WriteDWORD(data, self.TopFamilyID) + data = CommFunc.WriteDWORD(data, self.TopLeaderID) + data = CommFunc.WriteDWORD(data, self.TopPlayerID) + data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID) + data = CommFunc.WriteDWORD(data, self.AtkPlayerID) + data = CommFunc.WriteBYTE(data, self.AtkType) + data = CommFunc.WriteBYTE(data, self.KillCnt) + data = CommFunc.WriteBYTE(data, self.HurtCnt) + for i in range(self.HurtCnt): + data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CityCnt) + for i in range(self.CityCnt): + data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PlayerCnt) + for i in range(self.PlayerCnt): + data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BatType:%d, + GroupNum:%d, + TopFamilyID:%d, + TopLeaderID:%d, + TopPlayerID:%d, + TopPlayerFamilyID:%d, + AtkPlayerID:%d, + AtkType:%d, + KillCnt:%d, + HurtCnt:%d, + HurtList:%s, + CityCnt:%d, + CityList:%s, + PlayerCnt:%d, + PlayerInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.BatType, + self.GroupNum, + self.TopFamilyID, + self.TopLeaderID, + self.TopPlayerID, + self.TopPlayerFamilyID, + self.AtkPlayerID, + self.AtkType, + self.KillCnt, + self.HurtCnt, + "...", + self.CityCnt, + "...", + self.PlayerCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo + + +#------------------------------------------------------ +# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo + +class tagGCFamilyGCZCampMem(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33])//参与玩家名字 + FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位 + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 + HP = 0 #(DWORD HP)//剩余生命,求余亿部分 + HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 + HPMax = 0 #(DWORD HPMax)//最大生命,求余亿部分 + HPMaxEx = 0 #(DWORD HPMaxEx)//最大生命,整除亿部分 + TotalHurt = 0 #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值 + TotalHurtEx = 0 #(DWORD TotalHurtEx)//活动总伤害,整除亿部分 + 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.Name = "" + self.FamilyLV = 0 + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.TotalHurt = 0 + self.TotalHurtEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.FamilyLV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteDWORD(data, self.HPMax) + data = CommFunc.WriteDWORD(data, self.HPMaxEx) + data = CommFunc.WriteDWORD(data, self.TotalHurt) + data = CommFunc.WriteDWORD(data, self.TotalHurtEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + FamilyLV:%d, + Job:%d, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + TotalHurt:%d, + TotalHurtEx:%d + '''\ + %( + self.PlayerID, + self.Name, + self.FamilyLV, + self.Job, + self.Face, + self.FacePic, + self.FightPower, + self.FightPowerEx, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.TotalHurt, + self.TotalHurtEx + ) + return DumpString + + +class tagGCFamilyGCZCampRound(Structure): + _pack_ = 1 + _fields_ = [ + ("RoundNum", c_ubyte), #轮次编号,从1开始 + ("BatType", c_ubyte), #所在战场类型 + ("GroupNum", c_ubyte), #所在分组编号 + ("Rank", c_ubyte), #本轮排名 + ("Score", c_ushort), #本轮积分,总积分为所有轮次累加 + ("UpdownState", c_ubyte), #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型 + ] + + 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.RoundNum = 0 + self.BatType = 0 + self.GroupNum = 0 + self.Rank = 0 + self.Score = 0 + self.UpdownState = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZCampRound) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo: + RoundNum:%d, + BatType:%d, + GroupNum:%d, + Rank:%d, + Score:%d, + UpdownState:%d + '''\ + %( + self.RoundNum, + self.BatType, + self.GroupNum, + self.Rank, + self.Score, + self.UpdownState + ) + return DumpString + + +class tagGCFamilyGCZCampInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准 + CampLV = 0 #(WORD CampLV)//大本营当前等级 + CampExp = 0 #(DWORD CampExp)//大本营当前经验 + CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样 + HPBase = 0 #(DWORD HPBase)//基础生命,求余亿部分 + HPBaseEx = 0 #(DWORD HPBaseEx)//基础生命,整除亿部分 + HPMax = 0 #(DWORD HPMax)//总生命,求余亿部分 + HPMaxEx = 0 #(DWORD HPMaxEx)//总大生命,整除亿部分 + HP = 0 #(DWORD HP)//剩余生命,求余亿部分 + HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 + RoundCnt = 0 #(BYTE RoundCnt) + RoundInfoList = list() #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息 + DefMemCnt = 0 #(BYTE DefMemCnt) + DefMemList = list() #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCnt): + temRoundInfoList = tagGCFamilyGCZCampRound() + _pos = temRoundInfoList.ReadData(_lpData, _pos) + self.RoundInfoList.append(temRoundInfoList) + self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DefMemCnt): + temDefMemList = tagGCFamilyGCZCampMem() + _pos = temDefMemList.ReadData(_lpData, _pos) + self.DefMemList.append(temDefMemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x26 + self.FamilyID = 0 + self.CampLV = 0 + self.CampExp = 0 + self.CityLV = 0 + self.HPBase = 0 + self.HPBaseEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.HP = 0 + self.HPEx = 0 + self.RoundCnt = 0 + self.RoundInfoList = list() + self.DefMemCnt = 0 + self.DefMemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 4 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.RoundCnt): + length += self.RoundInfoList[i].GetLength() + length += 1 + for i in range(self.DefMemCnt): + length += self.DefMemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteWORD(data, self.CampLV) + data = CommFunc.WriteDWORD(data, self.CampExp) + data = CommFunc.WriteWORD(data, self.CityLV) + data = CommFunc.WriteDWORD(data, self.HPBase) + data = CommFunc.WriteDWORD(data, self.HPBaseEx) + data = CommFunc.WriteDWORD(data, self.HPMax) + data = CommFunc.WriteDWORD(data, self.HPMaxEx) + data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteBYTE(data, self.RoundCnt) + for i in range(self.RoundCnt): + data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.DefMemCnt) + for i in range(self.DefMemCnt): + data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + CampLV:%d, + CampExp:%d, + CityLV:%d, + HPBase:%d, + HPBaseEx:%d, + HPMax:%d, + HPMaxEx:%d, + HP:%d, + HPEx:%d, + RoundCnt:%d, + RoundInfoList:%s, + DefMemCnt:%d, + DefMemList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.CampLV, + self.CampExp, + self.CityLV, + self.HPBase, + self.HPBaseEx, + self.HPMax, + self.HPMaxEx, + self.HP, + self.HPEx, + self.RoundCnt, + "...", + self.DefMemCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo + + +#------------------------------------------------------ +# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo + +class tagGCFamilyGCZContribution(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("ContributionValue", c_int), #贡献值 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PlayerID = 0 + self.ContributionValue = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZContribution) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo: + PlayerID:%d, + ContributionValue:%d + '''\ + %( + self.PlayerID, + self.ContributionValue + ) + return DumpString + + +class tagGCFamilyGCZContributionInfo(Structure): + Head = tagHead() + ContriCnt = 0 #(BYTE ContriCnt) + ContriList = list() #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ContriCnt): + temContriList = tagGCFamilyGCZContribution() + _pos = temContriList.ReadData(_lpData, _pos) + self.ContriList.append(temContriList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x27 + self.ContriCnt = 0 + self.ContriList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.ContriCnt): + length += self.ContriList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ContriCnt) + for i in range(self.ContriCnt): + data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ContriCnt:%d, + ContriList:%s + '''\ + %( + self.Head.OutputString(), + self.ContriCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo + + +#------------------------------------------------------ +# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo + +class tagGCFamilyGCZGroupFamilyMemHurt(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33])//参与玩家名字 + HurtValue = 0 #(DWORD HurtValue)//伤害,求余亿部分 + HurtValueEx = 0 #(DWORD HurtValueEx)//伤害,整除亿部分 + 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.Name,_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.Name = "" + 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.Name) + data = CommFunc.WriteDWORD(data, self.HurtValue) + data = CommFunc.WriteDWORD(data, self.HurtValueEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.PlayerID, + self.Name, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)//查看的目标仙盟ID + HurtMemCnt = 0 #(BYTE HurtMemCnt) + HurtMemList = list() #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HurtMemCnt): + temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt() + _pos = temHurtMemList.ReadData(_lpData, _pos) + self.HurtMemList.append(temHurtMemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x31 + self.FamilyID = 0 + self.HurtMemCnt = 0 + self.HurtMemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.HurtMemCnt): + length += self.HurtMemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.HurtMemCnt) + for i in range(self.HurtMemCnt): + data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + HurtMemCnt:%d, + HurtMemList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.HurtMemCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo + + +#------------------------------------------------------ +# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo + +class tagGCFamilyGCZGuessFamily(Structure): + _pack_ = 1 + _fields_ = [ + ("FamilyID", c_int), #备选仙盟ID + ("GuessValue", c_ushort), #竞猜热度值,玩家每次选择则加1,重复选择也算 + ] + + 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.FamilyID = 0 + self.GuessValue = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZGuessFamily) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: + FamilyID:%d, + GuessValue:%d + '''\ + %( + self.FamilyID, + self.GuessValue + ) + return DumpString + + +class tagGCFamilyGCZGuessRight(Structure): + _pack_ = 1 + _fields_ = [ + ("AwardID", c_ubyte), #奖励ID + ("RightPlayerCnt", 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.AwardID = 0 + self.RightPlayerCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZGuessRight) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: + AwardID:%d, + RightPlayerCnt:%d + '''\ + %( + self.AwardID, + self.RightPlayerCnt + ) + return DumpString + + +class tagGCFamilyGCZGuessInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视 + SelectCnt = 0 #(BYTE SelectCnt) + SelectFamilyIDList = list() #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序 + FinalCnt = 0 #(BYTE FinalCnt) + FinalFamilyIDList = list() #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值 + RightCnt = 0 #(BYTE RightCnt) + RightInfoList = list() #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表 + FamilyCnt = 0 #(BYTE FamilyCnt) + GuessFamilyList = list() #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x32 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SelectCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SelectFamilyIDList.append(value) + self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FinalCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FinalFamilyIDList.append(value) + self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RightCnt): + temRightInfoList = tagGCFamilyGCZGuessRight() + _pos = temRightInfoList.ReadData(_lpData, _pos) + self.RightInfoList.append(temRightInfoList) + self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyCnt): + temGuessFamilyList = tagGCFamilyGCZGuessFamily() + _pos = temGuessFamilyList.ReadData(_lpData, _pos) + self.GuessFamilyList.append(temGuessFamilyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x32 + self.PlayerID = 0 + self.SelectCnt = 0 + self.SelectFamilyIDList = list() + self.FinalCnt = 0 + self.FinalFamilyIDList = list() + self.RightCnt = 0 + self.RightInfoList = list() + self.FamilyCnt = 0 + self.GuessFamilyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 4 * self.SelectCnt + length += 1 + length += 4 * self.FinalCnt + length += 1 + for i in range(self.RightCnt): + length += self.RightInfoList[i].GetLength() + length += 1 + for i in range(self.FamilyCnt): + length += self.GuessFamilyList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.SelectCnt) + for i in range(self.SelectCnt): + data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i]) + data = CommFunc.WriteBYTE(data, self.FinalCnt) + for i in range(self.FinalCnt): + data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i]) + data = CommFunc.WriteBYTE(data, self.RightCnt) + for i in range(self.RightCnt): + data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.FamilyCnt) + for i in range(self.FamilyCnt): + data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + SelectCnt:%d, + SelectFamilyIDList:%s, + FinalCnt:%d, + FinalFamilyIDList:%s, + RightCnt:%d, + RightInfoList:%s, + FamilyCnt:%d, + GuessFamilyList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.SelectCnt, + "...", + self.FinalCnt, + "...", + self.RightCnt, + "...", + self.FamilyCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo + + +#------------------------------------------------------ +# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo + +class tagGCLuckyCloudBuyLotteryRec(Structure): + SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID + SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 中奖玩家名 + LotteryNum = 0 #(WORD LotteryNum)// 开奖号码 + LotteryTime = 0 #(DWORD LotteryTime)// 开奖时间戳,秒 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.SuperItemID = 0 + self.SuperItemCount = 0 + self.NameLen = 0 + self.PlayerName = "" + self.LotteryNum = 0 + self.LotteryTime = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += len(self.PlayerName) + length += 2 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.SuperItemID) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.LotteryNum) + data = CommFunc.WriteDWORD(data, self.LotteryTime) + return data + + def OutputString(self): + DumpString = ''' + SuperItemID:%d, + SuperItemCount:%d, + NameLen:%d, + PlayerName:%s, + LotteryNum:%d, + LotteryTime:%d + '''\ + %( + self.SuperItemID, + self.SuperItemCount, + self.NameLen, + self.PlayerName, + self.LotteryNum, + self.LotteryTime + ) + return DumpString + + +class tagGCLuckyCloudBuyLotteryRecInfo(Structure): + Head = tagHead() + ZoneCount = 0 #(BYTE ZoneCount)// 分区数 + ZoneIDList = list() #(vector<BYTE> ZoneIDList)// 所有分区ID列表 + ZoneID = 0 #(BYTE ZoneID)// 返回记录分区ID + Count = 0 #(WORD Count) + LotteryRecList = list() #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ZoneCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ZoneIDList.append(value) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temLotteryRecList = tagGCLuckyCloudBuyLotteryRec() + _pos = temLotteryRecList.ReadData(_lpData, _pos) + self.LotteryRecList.append(temLotteryRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x14 + self.ZoneCount = 0 + self.ZoneIDList = list() + self.ZoneID = 0 + self.Count = 0 + self.LotteryRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.ZoneCount + length += 1 + length += 2 + for i in range(self.Count): + length += self.LotteryRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneCount) + for i in range(self.ZoneCount): + data = CommFunc.WriteBYTE(data, self.ZoneIDList[i]) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneCount:%d, + ZoneIDList:%s, + ZoneID:%d, + Count:%d, + LotteryRecList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneCount, + "...", + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo + + +#------------------------------------------------------ +# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo + +class tagGCLuckyCloudBuyNumRec(Structure): + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + BuyNum = 0 #(WORD BuyNum) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.PlayerName = "" + self.BuyNum = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.PlayerName) + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.BuyNum) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + PlayerName:%s, + BuyNum:%d + '''\ + %( + self.NameLen, + self.PlayerName, + self.BuyNum + ) + return DumpString + + +class tagGCLuckyCloudBuyNumRecInfo(Structure): + Head = tagHead() + RemainCount = 0 #(WORD RemainCount)// 开奖剩余份数 + Count = 0 #(WORD Count) + BuyNumRecList = list() #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temBuyNumRecList = tagGCLuckyCloudBuyNumRec() + _pos = temBuyNumRecList.ReadData(_lpData, _pos) + self.BuyNumRecList.append(temBuyNumRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x13 + self.RemainCount = 0 + self.Count = 0 + self.BuyNumRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + for i in range(self.Count): + length += self.BuyNumRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.RemainCount) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RemainCount:%d, + Count:%d, + BuyNumRecList:%s + '''\ + %( + self.Head.OutputString(), + self.RemainCount, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo + + +#------------------------------------------------------ +# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo + +class tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagGCLuckyCloudBuyRoundTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + RoundMax = 0 #(BYTE RoundMax)// 本时段最大轮次 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + self.RoundMax = 0 + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + data = CommFunc.WriteBYTE(data, self.RoundMax) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s, + RoundMax:%d + '''\ + %( + self.StartTime, + self.EndtTime, + self.RoundMax + ) + return DumpString + + +class tagGCLuckyCloudBuyRoundInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 所属分区ID + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + RoundTimeCount = 0 #(BYTE RoundTimeCount) + RoundTimeList = list() #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段 + RoundID = 0 #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存 + RoundNum = 0 #(BYTE RoundNum)// 当前时段第几轮 + SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID + SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 + SuperItemMoneyType = 0 #(BYTE SuperItemMoneyType)// 大奖价值货币类型 + SuperItemMoneyValue = 0 #(DWORD SuperItemMoneyValue)// 大奖价值 + LVLimit = 0 #(WORD LVLimit)//开启等级 + BaseItemCount = 0 #(BYTE BaseItemCount)// 每次购买固定奖励物品数 + BaseItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息 + RandItemCount = 0 #(BYTE RandItemCount)// 每次购买随机奖励物品数 + RandItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundTimeCount): + temRoundTimeList = tagGCLuckyCloudBuyRoundTime() + _pos = temRoundTimeList.ReadData(_lpData, _pos) + self.RoundTimeList.append(temRoundTimeList) + self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BaseItemCount): + temBaseItemList = tagGCLuckyCloudBuyRoundItem() + _pos = temBaseItemList.ReadData(_lpData, _pos) + self.BaseItemList.append(temBaseItemList) + self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RandItemCount): + temRandItemList = tagGCLuckyCloudBuyRoundItem() + _pos = temRandItemList.ReadData(_lpData, _pos) + self.RandItemList.append(temRandItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x12 + self.ZoneID = 0 + self.StartDate = "" + self.EndtDate = "" + self.RoundTimeCount = 0 + self.RoundTimeList = list() + self.RoundID = 0 + self.RoundNum = 0 + self.SuperItemID = 0 + self.SuperItemCount = 0 + self.SuperItemMoneyType = 0 + self.SuperItemMoneyValue = 0 + self.LVLimit = 0 + self.BaseItemCount = 0 + self.BaseItemList = list() + self.RandItemCount = 0 + self.RandItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + for i in range(self.RoundTimeCount): + length += self.RoundTimeList[i].GetLength() + length += 4 + length += 1 + length += 4 + length += 1 + length += 1 + length += 4 + length += 2 + length += 1 + for i in range(self.BaseItemCount): + length += self.BaseItemList[i].GetLength() + length += 1 + for i in range(self.RandItemCount): + length += self.RandItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.RoundTimeCount) + for i in range(self.RoundTimeCount): + data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.RoundID) + data = CommFunc.WriteBYTE(data, self.RoundNum) + data = CommFunc.WriteDWORD(data, self.SuperItemID) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType) + data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue) + data = CommFunc.WriteWORD(data, self.LVLimit) + data = CommFunc.WriteBYTE(data, self.BaseItemCount) + for i in range(self.BaseItemCount): + data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RandItemCount) + for i in range(self.RandItemCount): + data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + StartDate:%s, + EndtDate:%s, + RoundTimeCount:%d, + RoundTimeList:%s, + RoundID:%d, + RoundNum:%d, + SuperItemID:%d, + SuperItemCount:%d, + SuperItemMoneyType:%d, + SuperItemMoneyValue:%d, + LVLimit:%d, + BaseItemCount:%d, + BaseItemList:%s, + RandItemCount:%d, + RandItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.StartDate, + self.EndtDate, + self.RoundTimeCount, + "...", + self.RoundID, + self.RoundNum, + self.SuperItemID, + self.SuperItemCount, + self.SuperItemMoneyType, + self.SuperItemMoneyValue, + self.LVLimit, + self.BaseItemCount, + "...", + self.RandItemCount, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo + + +#------------------------------------------------------ # C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo class tagMCChampionshipPlayerInfo(Structure): -- Gitblit v1.8.0