|  |  | 
 |  |  |     LV = 0    #(WORD LV)//等级
 | 
 |  |  |     LVEx = 0    #(WORD LVEx)//玩家等级副本,用于转生
 | 
 |  |  |     LV2 = 0    #(WORD LV2)//大师等级
 | 
 |  |  |     ExpPoint = 0    #(WORD ExpPoint)//扩充经验点数
 | 
 |  |  |     ExpPoint = 0    #(DWORD ExpPoint)//扩充经验点数
 | 
 |  |  |     TotalExp = 0    #(DWORD TotalExp)//总经验
 | 
 |  |  |     Family = 0    #(DWORD Family)//家族
 | 
 |  |  |     FamilyName = ""    #(char FamilyName[33])//家族名称
 | 
 |  |  | 
 |  |  |     BackpackLV = 0    #(BYTE BackpackLV)//背包等级
 | 
 |  |  |     WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
 | 
 |  |  |     TeamID = 0    #(DWORD TeamID)//队伍ID
 | 
 |  |  |     UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
 | 
 |  |  |     UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票      类型为MoneyType
 | 
 |  |  |     UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
 | 
 |  |  |     AttackMode = 0    #(BYTE AttackMode)//攻击模式
 | 
 |  |  |     LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
 | 
 |  |  | 
 |  |  |     OperateInfo = 0    #(DWORD OperateInfo)//玩家附加运营商信息
 | 
 |  |  |     Operate = ""    #(char Operate[15])//所属运营商平台名
 | 
 |  |  |     ServerID = 0    #(DWORD ServerID)//所属区服ID
 | 
 |  |  |     ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExpPoint,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.TotalExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Family,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  | 
 |  |  |         self.OperateInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Operate,_pos = CommFunc.ReadString(_lpData, _pos,15)
 | 
 |  |  |         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.OperateInfo = 0
 | 
 |  |  |         self.Operate = ""
 | 
 |  |  |         self.ServerID = 0
 | 
 |  |  |         self.ExAttr15 = 0
 | 
 |  |  |         self.ExAttr16 = 0
 | 
 |  |  |         self.ExAttr17 = 0
 | 
 |  |  |         self.ExAttr18 = 0
 | 
 |  |  |         self.ExAttr19 = 0
 | 
 |  |  |         self.ExAttr20 = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  | 
 |  |  |         length += 4
 | 
 |  |  |         length += 15
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LVEx)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV2)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ExpPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExpPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TotalExp)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Family)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.FamilyName)
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.OperateInfo)
 | 
 |  |  |         data = CommFunc.WriteString(data, 15, self.Operate)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ServerID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr15)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr16)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr17)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr18)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr19)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr20)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 ExAttr14:%d,
 | 
 |  |  |                                 OperateInfo:%d,
 | 
 |  |  |                                 Operate:%s,
 | 
 |  |  |                                 ServerID:%d
 | 
 |  |  |                                 ServerID:%d,
 | 
 |  |  |                                 ExAttr15:%d,
 | 
 |  |  |                                 ExAttr16:%d,
 | 
 |  |  |                                 ExAttr17:%d,
 | 
 |  |  |                                 ExAttr18:%d,
 | 
 |  |  |                                 ExAttr19:%d,
 | 
 |  |  |                                 ExAttr20:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  | 
 |  |  |                                 self.ExAttr14,
 | 
 |  |  |                                 self.OperateInfo,
 | 
 |  |  |                                 self.Operate,
 | 
 |  |  |                                 self.ServerID
 | 
 |  |  |                                 self.ServerID,
 | 
 |  |  |                                 self.ExAttr15,
 | 
 |  |  |                                 self.ExAttr16,
 | 
 |  |  |                                 self.ExAttr17,
 | 
 |  |  |                                 self.ExAttr18,
 | 
 |  |  |                                 self.ExAttr19,
 | 
 |  |  |                                 self.ExAttr20
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCheckSecurityCardResult=tagCheckSecurityCardResult()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCheckSecurityCardResult.Cmd,m_NAtagCheckSecurityCardResult.SubCmd))] = m_NAtagCheckSecurityCardResult
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #01 32 创角成功 #tagCreateRoleSucess
 | 
 |  |  | 
 | 
 |  |  | class  tagCreateRoleSucess(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0x01
 | 
 |  |  |         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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0x01
 | 
 |  |  |         self.Head.SubCmd = 0x32
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         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.PlayerName)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCreateRoleSucess=tagCreateRoleSucess()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCreateRoleSucess.Head.Cmd,m_NAtagCreateRoleSucess.Head.SubCmd))] = m_NAtagCreateRoleSucess
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("StartYear", c_ushort),    #年,    如果填写0, 就隐藏此窗口
 | 
 |  |  |                   ("StartYear", c_ushort),    #年,   如果填写0, 就隐藏此窗口
 | 
 |  |  |                   ("StartMonth", c_ushort),    #月
 | 
 |  |  |                   ("StartDate", c_ubyte),    #日
 | 
 |  |  |                   ("EndYear", c_ushort),    
 | 
 |  |  | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     FamilyNameLen = 0    #(BYTE FamilyNameLen)
 | 
 |  |  |     FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
 | 
 |  |  |     FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位     | 
 |  |  |     FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     GradID = 0    #(DWORD GradID)//头衔ID
 | 
 |  |  |     State = 0    #(BYTE State)//装备和使用状态 按位判定,第一位0未装备1已装备 第二位0未使用 1使用
 | 
 |  |  |     CreateTime = ""    #(char CreateTime[30])//获得时间
 | 
 |  |  |     ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
 | 
 |  |  |         self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.GradID = 0
 | 
 |  |  |         self.State = 0
 | 
 |  |  |         self.CreateTime = ""
 | 
 |  |  |         self.ExpireTime = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 30
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.GradID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.State)
 | 
 |  |  |         data = CommFunc.WriteString(data, 30, self.CreateTime)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExpireTime)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 GradID:%d,
 | 
 |  |  |                                 State:%d,
 | 
 |  |  |                                 CreateTime:%s
 | 
 |  |  |                                 CreateTime:%s,
 | 
 |  |  |                                 ExpireTime:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.GradID,
 | 
 |  |  |                                 self.State,
 | 
 |  |  |                                 self.CreateTime
 | 
 |  |  |                                 self.CreateTime,
 | 
 |  |  |                                 self.ExpireTime
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     GradID = 0    #(DWORD GradID)//头衔ID
 | 
 |  |  |     CreateTime = ""    #(char CreateTime[30])//获得时间
 | 
 |  |  |     ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
 | 
 |  |  |         self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.Head.SubCmd = 0x36
 | 
 |  |  |         self.GradID = 0
 | 
 |  |  |         self.CreateTime = ""
 | 
 |  |  |         self.ExpireTime = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 30
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.GradID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 30, self.CreateTime)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExpireTime)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 GradID:%d,
 | 
 |  |  |                                 CreateTime:%s
 | 
 |  |  |                                 CreateTime:%s,
 | 
 |  |  |                                 ExpireTime:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.GradID,
 | 
 |  |  |                                 self.CreateTime
 | 
 |  |  |                                 self.CreateTime,
 | 
 |  |  |                                 self.ExpireTime
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | #03 09 主角登录时候的简短信息#tagPlayerLoginInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagLoginInfoEquip(Structure):
 | 
 |  |  |     ItemPlace = 0    #(BYTE ItemPlace)
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)
 | 
 |  |  |     IsSuite = 0    #(BYTE IsSuite)//是否已经套装化
 | 
 |  |  |     UserDataLen = 0    #(DWORD UserDataLen)
 | 
 |  |  |     UserData = ""    #(String UserData)//size = UserDataLen
 | 
 |  |  |     data = None
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ItemPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.IsSuite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
 | 
 |  |  |         return _pos
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ItemPlace = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.IsSuite = 0
 | 
 |  |  |         self.UserDataLen = 0
 | 
 |  |  |         self.UserData = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += len(self.UserData)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  |         return sizeof(tagLoginInfoEquip)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ItemPlace)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsSuite)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.UserDataLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
 | 
 |  |  |         return data
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ItemPlace:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 IsSuite:%d,
 | 
 |  |  |                                 UserDataLen:%d,
 | 
 |  |  |                                 UserData:%s
 | 
 |  |  |         DumpString = '''//03 09 主角登录时候的简短信息//tagPlayerLoginInfo:
 | 
 |  |  |                                 ItemID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemPlace,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.IsSuite,
 | 
 |  |  |                                 self.UserDataLen,
 | 
 |  |  |                                 self.UserData
 | 
 |  |  |                                 self.ItemID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     EquipCount = 0    #(BYTE EquipCount)
 | 
 |  |  |     EquipInfo = list()    #(vector<tagLoginInfoEquip> EquipInfo)//size = EquipCount
 | 
 |  |  |     EquipShowSwitch = 0    #(DWORD EquipShowSwitch)//玩家装备显示开关
 | 
 |  |  |     ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     IPLen = 0    #(BYTE IPLen)
 | 
 |  |  |     IP = ""    #(String IP)// 跨服IP
 | 
 |  |  |     Port = 0    #(WORD Port)// 跨服端口
 | 
 |  |  |     CrossState = 0    #(BYTE CrossState)// 跨服状态0-非跨服状态,1-跨服状态,2-跨服状态异常
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |             _pos = temEquipInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.EquipInfo.append(temEquipInfo)
 | 
 |  |  |         self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.IPLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.IP,_pos = CommFunc.ReadString(_lpData, _pos,self.IPLen)
 | 
 |  |  |         self.Port,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.CrossState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.EquipCount = 0
 | 
 |  |  |         self.EquipInfo = list()
 | 
 |  |  |         self.EquipShowSwitch = 0
 | 
 |  |  |         self.ExAttr15 = 0
 | 
 |  |  |         self.ExAttr16 = 0
 | 
 |  |  |         self.ExAttr17 = 0
 | 
 |  |  |         self.ExAttr18 = 0
 | 
 |  |  |         self.ExAttr19 = 0
 | 
 |  |  |         self.ExAttr20 = 0
 | 
 |  |  |         self.IPLen = 0
 | 
 |  |  |         self.IP = ""
 | 
 |  |  |         self.Port = 0
 | 
 |  |  |         self.CrossState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         for i in range(self.EquipCount):
 | 
 |  |  |             length += self.EquipInfo[i].GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.IP)
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         for i in range(self.EquipCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.EquipInfo[i].GetLength(), self.EquipInfo[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr15)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr16)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr17)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr18)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr19)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr20)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IPLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.IPLen, self.IP)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.Port)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.CrossState)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 HavePswLV2:%d,
 | 
 |  |  |                                 EquipCount:%d,
 | 
 |  |  |                                 EquipInfo:%s,
 | 
 |  |  |                                 EquipShowSwitch:%d
 | 
 |  |  |                                 EquipShowSwitch:%d,
 | 
 |  |  |                                 ExAttr15:%d,
 | 
 |  |  |                                 ExAttr16:%d,
 | 
 |  |  |                                 ExAttr17:%d,
 | 
 |  |  |                                 ExAttr18:%d,
 | 
 |  |  |                                 ExAttr19:%d,
 | 
 |  |  |                                 ExAttr20:%d,
 | 
 |  |  |                                 IPLen:%d,
 | 
 |  |  |                                 IP:%s,
 | 
 |  |  |                                 Port:%d,
 | 
 |  |  |                                 CrossState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  | 
 |  |  |                                 self.HavePswLV2,
 | 
 |  |  |                                 self.EquipCount,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.EquipShowSwitch
 | 
 |  |  |                                 self.EquipShowSwitch,
 | 
 |  |  |                                 self.ExAttr15,
 | 
 |  |  |                                 self.ExAttr16,
 | 
 |  |  |                                 self.ExAttr17,
 | 
 |  |  |                                 self.ExAttr18,
 | 
 |  |  |                                 self.ExAttr19,
 | 
 |  |  |                                 self.ExAttr20,
 | 
 |  |  |                                 self.IPLen,
 | 
 |  |  |                                 self.IP,
 | 
 |  |  |                                 self.Port,
 | 
 |  |  |                                 self.CrossState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | class  tagFBEventList(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     EventCount = 0    #(BYTE EventCount)//副本活动数
 | 
 |  |  |     EventList = list()    #(vector<tagFBEventDetail> EventList)//副本活动列表     | 
 |  |  |     EventList = list()    #(vector<tagFBEventDetail> EventList)//副本活动列表	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | #04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx
 | 
 |  |  | 
 | 
 |  |  | class  tagEquipInfo(Structure):
 | 
 |  |  |     Place = 0    #(BYTE Place)//装备位置
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)//物品ID
 | 
 |  |  |     IsSuite = 0    #(BYTE IsSuite)//是否已经套装化
 | 
 |  |  |     UserDataLen = 0    #(DWORD UserDataLen)
 | 
 |  |  |     UserData = ""    #(String UserData)// 附加数据
 | 
 |  |  |     data = None
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),    #物品ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Place,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.IsSuite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
 | 
 |  |  |         return _pos
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Place = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.IsSuite = 0
 | 
 |  |  |         self.UserDataLen = 0
 | 
 |  |  |         self.UserData = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += len(self.UserData)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  |         return sizeof(tagEquipInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Place)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsSuite)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.UserDataLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
 | 
 |  |  |         return data
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Place:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 IsSuite:%d,
 | 
 |  |  |                                 UserDataLen:%d,
 | 
 |  |  |                                 UserData:%s
 | 
 |  |  |         DumpString = '''//04 34 周围玩家出现合并封包//tagAreaPlayerAppearEx:
 | 
 |  |  |                                 ItemID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Place,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.IsSuite,
 | 
 |  |  |                                 self.UserDataLen,
 | 
 |  |  |                                 self.UserData
 | 
 |  |  |                                 self.ItemID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     TeamID = 0    #(DWORD TeamID)//组队ID
 | 
 |  |  |     HP = 0    #(DWORD HP)
 | 
 |  |  |     MaxHP = 0    #(DWORD MaxHP)
 | 
 |  |  |     PlayerState = 0    #(BYTE PlayerState)//TClientPlayerState    玩家状态 打坐/马上/人镖合一
 | 
 |  |  |     PlayerState = 0    #(BYTE PlayerState)//TClientPlayerState   玩家状态 打坐/马上/人镖合一
 | 
 |  |  |     IsHideMask = 0    #(BYTE IsHideMask)
 | 
 |  |  |     Country = 0    #(BYTE Country)//玩家国家
 | 
 |  |  |     FamilyID = 0    #(DWORD FamilyID)//家族ID
 | 
 |  |  | 
 |  |  |     ExAttr5 = 0    #(DWORD ExAttr5)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ServerID = 0    #(DWORD ServerID)//所属区服ID
 | 
 |  |  |     State = 0    #(BYTE State)// 0.正常在线1.脱机挂在线 2脱机挂死亡
 | 
 |  |  |     ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.ExAttr5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.ExAttr5 = 0
 | 
 |  |  |         self.ServerID = 0
 | 
 |  |  |         self.State = 0
 | 
 |  |  |         self.ExAttr15 = 0
 | 
 |  |  |         self.ExAttr16 = 0
 | 
 |  |  |         self.ExAttr17 = 0
 | 
 |  |  |         self.ExAttr18 = 0
 | 
 |  |  |         self.ExAttr19 = 0
 | 
 |  |  |         self.ExAttr20 = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr5)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ServerID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.State)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr15)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr16)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr17)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr18)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr19)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr20)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 ExAttr4:%d,
 | 
 |  |  |                                 ExAttr5:%d,
 | 
 |  |  |                                 ServerID:%d,
 | 
 |  |  |                                 State:%d
 | 
 |  |  |                                 State:%d,
 | 
 |  |  |                                 ExAttr15:%d,
 | 
 |  |  |                                 ExAttr16:%d,
 | 
 |  |  |                                 ExAttr17:%d,
 | 
 |  |  |                                 ExAttr18:%d,
 | 
 |  |  |                                 ExAttr19:%d,
 | 
 |  |  |                                 ExAttr20:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  | 
 |  |  |                                 self.ExAttr4,
 | 
 |  |  |                                 self.ExAttr5,
 | 
 |  |  |                                 self.ServerID,
 | 
 |  |  |                                 self.State
 | 
 |  |  |                                 self.State,
 | 
 |  |  |                                 self.ExAttr15,
 | 
 |  |  |                                 self.ExAttr16,
 | 
 |  |  |                                 self.ExAttr17,
 | 
 |  |  |                                 self.ExAttr18,
 | 
 |  |  |                                 self.ExAttr19,
 | 
 |  |  |                                 self.ExAttr20
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                   ("ObjType", c_ubyte),    #对象类型
 | 
 |  |  |                   ("PosX", c_ushort),    
 | 
 |  |  |                   ("PosY", c_ushort),    
 | 
 |  |  |                   ("Reason", c_int),    # 0为游戏通用,其他未决定的为技能ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.ObjType = 0
 | 
 |  |  |         self.PosX = 0
 | 
 |  |  |         self.PosY = 0
 | 
 |  |  |         self.Reason = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 ObjID:%d,
 | 
 |  |  |                                 ObjType:%d,
 | 
 |  |  |                                 PosX:%d,
 | 
 |  |  |                                 PosY:%d
 | 
 |  |  |                                 PosY:%d,
 | 
 |  |  |                                 Reason:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  | 
 |  |  |                                 self.ObjID,
 | 
 |  |  |                                 self.ObjType,
 | 
 |  |  |                                 self.PosX,
 | 
 |  |  |                                 self.PosY
 | 
 |  |  |                                 self.PosY,
 | 
 |  |  |                                 self.Reason
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PlayerID", c_int),    
 | 
 |  |  |                   ("FamilyMemberLV", c_ubyte),    #玩家在家族中的职位     | 
 |  |  |                   ("FamilyMemberLV", c_ubyte),    #玩家在家族中的职位	 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #04 36    周围玩家家族名刷新#tagPlayerFamilyNameRefresh
 | 
 |  |  | #04 36   周围玩家家族名刷新#tagPlayerFamilyNameRefresh
 | 
 |  |  | 
 | 
 |  |  | class  tagPlayerFamilyNameRefresh(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     FamilyNameLen = 0    #(BYTE FamilyNameLen)
 | 
 |  |  |     FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
 | 
 |  |  |     FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位     | 
 |  |  |     FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PlayerID", c_int),    
 | 
 |  |  |                   ("KillerID", c_int),     | 
 |  |  |                   ("KillerType", c_ubyte),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Cmd = 0x06
 | 
 |  |  |         self.SubCmd = 0x09
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.KillerID = 0
 | 
 |  |  |         self.KillerType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''//06 09 玩家死亡//tagPlayerDie:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 PlayerID:%d
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 KillerID:%d,
 | 
 |  |  |                                 KillerType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.PlayerID
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.KillerID,
 | 
 |  |  |                                 self.KillerType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     ByObjID = 0    #(DWORD ByObjID)//物品原本在哪个对象身上
 | 
 |  |  |     DropTick = 0    #(DWORD DropTick)//物品掉落Tick
 | 
 |  |  |     UserDataLen = 0    #(WORD UserDataLen)//附加属性长度
 | 
 |  |  |     UserData = ""    #(String UserData)//附加属性  size = UserDataLen     | 
 |  |  |     UserData = ""    #(String UserData)//附加属性  size = UserDataLen	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("MakeType", c_ubyte),    #类型        TMakeItemType
 | 
 |  |  |                   ("MakeType", c_ubyte),    #类型      TMakeItemType
 | 
 |  |  |                   ("Result", c_ubyte),    #是否成功
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PlayerID", c_int),    
 | 
 |  |  |                   ("PrepareState", c_ubyte),    #准备类型,    TPreparingState
 | 
 |  |  |                   ("PrepareState", c_ubyte),    #准备类型,   TPreparingState
 | 
 |  |  |                   ("MaxTime", c_int),    #最大时间
 | 
 |  |  |                   ("PrepareID", c_int),    #准备ID, 如果是技能, 则是技能ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 |  |  |     FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
 | 
 |  |  |     Job = 0    #(BYTE Job)//ְҵ
 | 
 |  |  |     FamilyActiveValue = 0    #(DWORD FamilyActiveValue)//本周家族活跃度
 | 
 |  |  |     LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度     | 
 |  |  |     LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度	 | 
 |  |  |     OfficialRank = 0    #(BYTE OfficialRank)//境界
 | 
 |  |  |     Exattr1 = 0    #(DWORD Exattr1)//扩展属性
 | 
 |  |  |     Exattr2 = 0    #(DWORD Exattr2)//扩展属性
 | 
 |  |  | 
 |  |  |     Point = 0    #(DWORD Point)//家族战积分
 | 
 |  |  |     Broadcast = ""    #(String Broadcast)//size = BroadcastLen
 | 
 |  |  |     FamilyActiveValue = 0    #(DWORD FamilyActiveValue)//本周家族活跃度
 | 
 |  |  |     LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度     | 
 |  |  |     LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度	 | 
 |  |  |     Member = list()    #(vector<tagRoleFamilyMember> Member)//size = MemberCount
 | 
 |  |  |     Extra1 = 0    #(DWORD Extra1)//附加字段1
 | 
 |  |  |     Extra2 = 0    #(DWORD Extra2)//附加字段2
 | 
 |  |  | 
 |  |  | class  tagFamilyTechInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     TechCount = 0    #(WORD TechCount)//帮会科技数量 
 | 
 |  |  |     TechInfoList = list()    #(vector<tagTechInfo> TechInfoList)//科技信息列表      | 
 |  |  |     TechInfoList = list()    #(vector<tagTechInfo> TechInfoList)//科技信息列表 	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | #10 01 排行榜信息#tagBillboard 对性能影响比较大, 需要限制tick
 | 
 |  |  | 
 | 
 |  |  | class  tagBillboardList(Structure):
 | 
 |  |  |     ID = 0    #(DWORD ID)// 不一定都能用上,目前用于保存宠物NPCID     | 
 |  |  |     ID = 0    #(DWORD ID)// 不一定都能用上,目前用于保存宠物NPCID	 | 
 |  |  |     Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
 | 
 |  |  |     Name2 = ""    #(char Name2[33])//名字2
 | 
 |  |  |     Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
 | 
 |  |  | 
 |  |  |     MakerNameLen = 0    #(BYTE MakerNameLen)//制造者名字
 | 
 |  |  |     MakerName = ""    #(String MakerName)//size = MakerNameLen
 | 
 |  |  |     UserDataLen = 0    #(DWORD UserDataLen)
 | 
 |  |  |     UserData = ""    #(String UserData)//自定义数据     | 
 |  |  |     UserData = ""    #(String UserData)//自定义数据	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Type", c_ubyte),    #答题类型
 | 
 |  |  |                   ("QuestionNO", c_ushort),    # 答题号
 | 
 |  |  |                   ("FunctionNO", c_ubyte),    # 功能号     | 
 |  |  |                   ("FunctionNO", c_ubyte),    # 功能号	 | 
 |  |  |                   ("FunctionOpt1", c_ubyte),    #功能选项1
 | 
 |  |  |                   ("FunctionOpt2", c_ubyte),    #功能选项2
 | 
 |  |  |                   ("FunctionOpt3", c_ubyte),    #功能选项3
 | 
 |  |  | 
 |  |  |                   ("PlayerID", c_int),    #挂单玩家的id
 | 
 |  |  |                   ("FormID", c_int),    # 挂单ID
 | 
 |  |  |                   ("UnitPrice", c_int),    #该单购买元宝的银两单价(每组)
 | 
 |  |  |                   ("LefGold", c_int),    #该单的剩余购买元宝组数     | 
 |  |  |                   ("LeftTime", c_ushort),    #该单的剩余在架时间     | 
 |  |  |                   ("LefGold", c_int),    #该单的剩余购买元宝组数	 | 
 |  |  |                   ("LeftTime", c_ushort),    #该单的剩余在架时间	 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("FormID", c_int),    # 挂单ID
 | 
 |  |  |                   ("UnitPrice", c_int),    #该单购买元宝的银两单价(每组)
 | 
 |  |  |                   ("LefGold", c_int),    #该单的剩余购买元宝组数     | 
 |  |  |                   ("LefGold", c_int),    #该单的剩余购买元宝组数	 | 
 |  |  |                   ("LeftTime", c_ushort),    #该单的剩余在架时间
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("LabelID", c_int),    # 删除标签     | 
 |  |  |                   ("LabelID", c_int),    # 删除标签	 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | class  tagHightLadderTopPlayerList(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Size = 0    #(BYTE Size)
 | 
 |  |  |     PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表     | 
 |  |  |     PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | class  tagVsTeam(Structure):
 | 
 |  |  |     TeamIndex = 0    #(BYTE TeamIndex)// 竞技队Index
 | 
 |  |  |     MemberCount = 0    #(WORD MemberCount)// 成员人数
 | 
 |  |  |     Members = list()    #(vector<tagVsMemberInfo> Members)// 成员列表     | 
 |  |  |     Members = list()    #(vector<tagVsMemberInfo> Members)// 成员列表	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     MyOrder = 0    #(WORD MyOrder)//自身排名
 | 
 |  |  |     Size = 0    #(BYTE Size)
 | 
 |  |  |     PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表     | 
 |  |  |     PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表	 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | class  tagBourseItem(Structure):
 | 
 |  |  |     ItemGUID = ""    #(char ItemGUID[40])
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)//挂单玩家ID     | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)//挂单玩家ID	 | 
 |  |  |     ItemTypeID = 0    #(DWORD ItemTypeID)//物品ID
 | 
 |  |  |     PriceType = 0    #(BYTE PriceType)//出售价格类型
 | 
 |  |  |     PriceCount = 0    #(DWORD PriceCount)//出售价格
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGMCmdAnswer=tagGMCmdAnswer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGMCmdAnswer.Head.Cmd,m_NAtagGMCmdAnswer.Head.SubCmd))] = m_NAtagGMCmdAnswer | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGMCmdAnswer.Head.Cmd,m_NAtagGMCmdAnswer.Head.SubCmd))] = m_NAtagGMCmdAnswer
 |