| | |
| | | Head = tagHead()
|
| | | Type = 0 #(BYTE Type)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
|
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | FamilyID = 0 #(DWORD FamilyID)//家族ID
|
| | | ActionType = 0 #(BYTE ActionType)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
|
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
|
| | |
|
| | | class tagtMemberInfo(Structure):
|
| | |
| | | IsAlive = 0 #(BYTE IsAlive)// 是否存活
|
| | | RecordLen = 0 #(WORD RecordLen)// 长度
|
| | | KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
|
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒
|
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒
|
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 |
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagGCNotifyEquipClassEquip(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int),
|
| | | ("Star", c_ubyte),
|
| | | ("ItemID", c_int), |
| | | ("Star", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名
|
| | | ID = 0 #(DWORD ID)
|
| | | ID2 = 0 #(DWORD ID2)
|
| | | Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字
|
| | | Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 |
| | | Name2 = "" #(char Name2[33])//名字2
|
| | | Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
|
| | | Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级
|
| | |
| | | Count = 0 #(DWORD Count)//数量
|
| | | IsBind = 0 #(BYTE IsBind)//是否绑定
|
| | | UserDataLen = 0 #(DWORD UserDataLen)
|
| | | UserData = "" #(String UserData)//自定义数据
|
| | | UserData = "" #(String UserData)//自定义数据 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | Name = "" #(char Name[33])
|
| | | LV = 0 #(DWORD LV)//等级
|
| | | Job = 0 #(BYTE Job)
|
| | | RealmLV = 0 #(WORD RealmLV)//境界
|
| | | RealmLV = 0 #(WORD RealmLV)//境界 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StartTime", c_int),
|
| | | ("StartTime", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagFamilyArrestOverStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
|
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
|
| | | ("PlayerID", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("SortValue", c_int), #最近联系人和仇人按时间排序
|
| | | ]
|
| | |
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
|
| | | ("PlayerID", c_int),
|
| | | ("PlayerID", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagGCGroupPlayer(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PlayerID", c_int),
|
| | | ("SortValue", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("SortValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("OnlineType", c_ubyte), #0不在线 1在线 2脱机在线
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int),
|
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__
|
| | | ("Value", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ |
| | | ("Value", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | class tagGCVoiceChat(Structure):
|
| | | Head = tagHead()
|
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
|
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 |
| | | SrcNameLen = 0 #(BYTE SrcNameLen)
|
| | | SrcName = "" #(String SrcName)//size = SrcNameLen
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | |
| | |
|
| | | m_NAtagGCVoiceChat=tagGCVoiceChat()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCVoiceChat.Head.Cmd,m_NAtagGCVoiceChat.Head.SubCmd))] = m_NAtagGCVoiceChat
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 11 聊天缓存通知 #tagGCTalkCache
|
| | |
|
| | | class tagGCTalkCacheInfo(Structure):
|
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | Name = "" #(String Name)//size = SrcNameLen
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Time = 0 #(DWORD Time)
|
| | | Len = 0 #(WORD Len)
|
| | | Content = "" #(String Content)//size = Len
|
| | | Extras = "" #(char Extras[256])//附加值列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Content,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
|
| | | self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.ChannelType = 0
|
| | | self.NameLen = 0
|
| | | self.Name = ""
|
| | | self.PlayerID = 0
|
| | | self.Time = 0
|
| | | self.Len = 0
|
| | | self.Content = ""
|
| | | self.Extras = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += len(self.Name)
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.Content)
|
| | | length += 256
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.ChannelType)
|
| | | data = CommFunc.WriteBYTE(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.Name)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteDWORD(data, self.Time)
|
| | | data = CommFunc.WriteWORD(data, self.Len)
|
| | | data = CommFunc.WriteString(data, self.Len, self.Content)
|
| | | data = CommFunc.WriteString(data, 256, self.Extras)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | ChannelType:%d,
|
| | | NameLen:%d,
|
| | | Name:%s,
|
| | | PlayerID:%d,
|
| | | Time:%d,
|
| | | Len:%d,
|
| | | Content:%s,
|
| | | Extras:%s
|
| | | '''\
|
| | | %(
|
| | | self.ChannelType,
|
| | | self.NameLen,
|
| | | self.Name,
|
| | | self.PlayerID,
|
| | | self.Time,
|
| | | self.Len,
|
| | | self.Content,
|
| | | self.Extras
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCTalkCache(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | InfoList = list() #(vector<tagGCTalkCacheInfo> InfoList)//size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB3
|
| | | self.Head.SubCmd = 0x11
|
| | | 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 = tagGCTalkCacheInfo()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB3
|
| | | self.Head.SubCmd = 0x11
|
| | | 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_NAtagGCTalkCache=tagGCTalkCache()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTalkCache.Head.Cmd,m_NAtagGCTalkCache.Head.SubCmd))] = m_NAtagGCTalkCache
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ItemGUID = "" #(char ItemGUID[40])
|
| | | AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
|
| | | AddTime = "" #(char AddTime[19])//上架时间
|
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
|
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID |
| | | BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格
|
| | | BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
|
| | | data = None
|
| | |
| | | class tagGCTeamMemPrepareState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PlayerID", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("PrepareState", c_ubyte), # 状态,0-未准备,1-已准备,2-拒绝
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int),
|
| | | ("PlayerID", c_int), |
| | | ("RefreshType", c_ubyte), #刷新类型,同0418属性类型
|
| | | ("Value", c_int),
|
| | | ("Value", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | class tagGCCrossRealmPKBillboardInfo(Structure):
|
| | | Head = tagHead()
|
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID
|
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID
|
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID |
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID |
| | | Count = 0 #(WORD Count)
|
| | | PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
|
| | | data = None
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsRobot", c_ubyte), # 是否匹配机器人
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.Cmd = 0xC0
|
| | | self.SubCmd = 0x02
|
| | | self.IsRobot = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | SubCmd:%s,
|
| | | IsRobot:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | self.SubCmd,
|
| | | self.IsRobot
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | class tagMCCoinToGoldCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RecordID", c_ubyte),
|
| | | ("RecordID", c_ubyte), |
| | | ("TodayPayCount", c_ushort), # 今日已购买次数
|
| | | ("TotalPayCount", c_int), # 累计总购买次数
|
| | | ]
|
| | |
| | | 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)//上周在线时间
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_ushort),
|
| | | ("MapID", c_ushort), |
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_int),
|
| | | ("MapID", c_int), |
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Mode", c_ubyte),
|
| | | ("Mode", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("LockState", c_ubyte),
|
| | | ("LockState", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("BossType", c_ubyte), #编号类型0-世界boss 1-boss之家
|
| | | ("KillCnt", c_int), #击杀次数
|
| | | ("ItemAddCnt", c_int), #物品增加次数
|
| | | ("BuyCnt", c_ubyte), #购买次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BossType = 0
|
| | | self.KillCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.BuyCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
|
| | | BossType:%d,
|
| | | KillCnt:%d,
|
| | | ItemAddCnt:%d
|
| | | ItemAddCnt:%d,
|
| | | BuyCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.BossType,
|
| | | self.KillCnt,
|
| | | self.ItemAddCnt
|
| | | self.ItemAddCnt,
|
| | | self.BuyCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | Seting = 0 #(DWORD Seting)// 操作数据记录
|
| | | DecomposeCnt = 0 #(BYTE DecomposeCnt)// 分解件数进度
|
| | | GetItemLen = 0 #(WORD GetItemLen)
|
| | | GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
|
| | | GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCEquipPartStar(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EquipPackIndex", c_ushort),
|
| | | ("Star", c_ubyte),
|
| | | ("EquipPackIndex", c_ushort), |
| | | ("Star", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | |
|
| | | class tagMCEquipPartXLAttr(Structure):
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | XLAttrLV = 0 #(BYTE XLAttrLV)// 洗练等级
|
| | | XLAttrCnt = 0 #(BYTE XLAttrCnt)// 属性条数
|
| | | XLAttrList = list() #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
|
| | |
| | | class tagMCFairyAdventuresData(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EventID", c_ubyte),
|
| | | ("EventID", c_ubyte), |
| | | ("Gear", c_ubyte), #第几档
|
| | | ("Condition", c_int), #条件
|
| | | ]
|
| | |
| | |
|
| | | class tagMCFBEncourageInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)//
|
| | | Cnt = 0 #(BYTE Cnt)// |
| | | InfoList = list() #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
|
| | | data = None
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Cnt", c_int),
|
| | | ("Cnt", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
|
| | |
|
| | | class tagMCHistoryReChargeAwardRecord(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("AwardGetRecord", c_int), # 按二进制位标示领取记录 配置奖励ID代表第几位
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x28
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x28
|
| | | self.AwardGetRecord = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCHistoryReChargeAwardRecord)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 28 历史累积充值奖励领取记录 //tagMCHistoryReChargeAwardRecord:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | AwardGetRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.AwardGetRecord
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCHistoryReChargeAwardRecord=tagMCHistoryReChargeAwardRecord()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHistoryReChargeAwardRecord.Cmd,m_NAtagMCHistoryReChargeAwardRecord.SubCmd))] = m_NAtagMCHistoryReChargeAwardRecord
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 12 通知骑宠觉醒信息 #tagMCHorsePetSkinData
|
| | |
|
| | | class tagMCHorsePetSkinInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Type", c_ubyte), # 1-坐骑 2-灵宠
|
| | | ("ID", c_int), # 对应坐骑表灵宠表ID
|
| | | ("Exp", c_int), #经验
|
| | | ("SkinLV", c_ubyte), #觉醒等级
|
| | | ("SkinIndex", 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.Type = 0
|
| | | self.ID = 0
|
| | | self.Exp = 0
|
| | | self.SkinLV = 0
|
| | | self.SkinIndex = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCHorsePetSkinInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 12 通知骑宠觉醒信息 //tagMCHorsePetSkinData:
|
| | | Type:%d,
|
| | | ID:%d,
|
| | | Exp:%d,
|
| | | SkinLV:%d,
|
| | | SkinIndex:%d
|
| | | '''\
|
| | | %(
|
| | | self.Type,
|
| | | self.ID,
|
| | | self.Exp,
|
| | | self.SkinLV,
|
| | | self.SkinIndex
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCHorsePetSkinData(Structure):
|
| | | Head = tagHead()
|
| | | Num = 0 #(BYTE Num)//个数
|
| | | InfoList = list() #(vector<tagMCHorsePetSkinInfo> InfoList)// 数据列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Num):
|
| | | temInfoList = tagMCHorsePetSkinInfo()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | self.Num = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Num):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Num)
|
| | | for i in range(self.Num):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Num:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Num,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCHorsePetSkinData=tagMCHorsePetSkinData()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorsePetSkinData.Head.Cmd,m_NAtagMCHorsePetSkinData.Head.SubCmd))] = m_NAtagMCHorsePetSkinData
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
|
| | |
|
| | | class tagMCMagicWeaponInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MWID", c_int),
|
| | | ("LV", c_ubyte),
|
| | | ("Exp", c_int),
|
| | | ("MWID", c_int), |
| | | ("LV", c_ubyte), |
| | | ("Exp", c_int), |
| | | ("FBPassLV", c_ubyte), #副本关卡
|
| | | ("IsWear", c_ubyte), #是否佩戴(仅适用王者法宝)
|
| | | ]
|
| | |
| | | class tagMCEquipPartPlusLV(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PackType", c_ubyte),
|
| | | ("EquipIndex", c_ubyte),
|
| | | ("EquipPartStarLV", c_ushort),
|
| | | ("Proficiency", c_int),
|
| | | ("EvolveLV", c_ubyte),
|
| | | ("PackType", c_ubyte), |
| | | ("EquipIndex", c_ubyte), |
| | | ("EquipPartStarLV", c_ushort), |
| | | ("Proficiency", c_int), |
| | | ("EvolveLV", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCAttackCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int),
|
| | | ("NPCID", c_int), |
| | | ("AttackCount", c_ubyte), #已攻击次数
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Record", c_ubyte), #0-未领取 1-已领取
|
| | | ("Record", c_ubyte), #0-未领取 1-已领取 |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PrizeItem", c_int),
|
| | | ("ItemCount", c_ubyte),
|
| | | ("PrizeItem", c_int), |
| | | ("ItemCount", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCPlayerOnlinePrizeInfo(Structure):
|
| | | Head = tagHead()
|
| | | RemaindTime = 0 #(DWORD RemaindTime)//产生奖励剩余时间
|
| | | HasPrize = 0 #(BYTE HasPrize)//是否可以领取
|
| | | HasPrize = 0 #(BYTE HasPrize)//是否可以领取 |
| | | PrizeType = 0 #(BYTE PrizeType)//在线奖励类型
|
| | | PrizeCnt = 0 #(BYTE PrizeCnt)//在线奖励类型
|
| | | PrizeInfo = list() #(vector<tagMCOnlinePrizeItem> PrizeInfo)//在线奖励类型
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("AlchemyID", c_int), # 丹 ID
|
| | | ("StartTime", c_int), # 开始炼的时间
|
| | | ("StartTime", c_int), # 开始炼的时间 |
| | | ("AlchemyTimes", c_ushort), # 炼的次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.AlchemyID = 0
|
| | | self.StartTime = 0
|
| | | self.AlchemyTimes = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
|
| | | AlchemyID:%d,
|
| | | StartTime:%d
|
| | | StartTime:%d,
|
| | | AlchemyTimes:%d
|
| | | '''\
|
| | | %(
|
| | | self.AlchemyID,
|
| | | self.StartTime
|
| | | self.StartTime,
|
| | | self.AlchemyTimes
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("ExtraCnt", c_ubyte), # VIP额外次数
|
| | | ("ExtraData", c_ubyte), # 额外参数1
|
| | | ("ExtraData2", c_ubyte), # 额外参数2
|
| | | ("HaveRecover", c_ubyte), # 已找回 1-全部已找回 2-非VIP已找回
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.ExtraCnt = 0
|
| | | self.ExtraData = 0
|
| | | self.ExtraData2 = 0
|
| | | self.HaveRecover = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | RecoverCnt:%d,
|
| | | ExtraCnt:%d,
|
| | | ExtraData:%d,
|
| | | ExtraData2:%d
|
| | | ExtraData2:%d,
|
| | | HaveRecover:%d
|
| | | '''\
|
| | | %(
|
| | | self.Index,
|
| | | self.RecoverCnt,
|
| | | self.ExtraCnt,
|
| | | self.ExtraData,
|
| | | self.ExtraData2
|
| | | self.ExtraData2,
|
| | | self.HaveRecover
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
|
| | |
|
| | | class tagMCStoneMsg(Structure):
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | MaxStoneCount = 0 #(BYTE MaxStoneCount)// 最大孔数
|
| | | StoneInfo = list() #(vector<DWORD> StoneInfo)// 孔内宝石信息
|
| | | StoneBind = list() #(vector<BYTE> StoneBind)// 孔内宝石是否绑定
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PassLV", c_int),
|
| | | ("YesterDayPassLV", c_int),
|
| | | ("PassLV", c_int), |
| | | ("YesterDayPassLV", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | m_NAtagMCChampionFamilyDailyReward=tagMCChampionFamilyDailyReward()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionFamilyDailyReward.Cmd,m_NAtagMCChampionFamilyDailyReward.SubCmd))] = m_NAtagMCChampionFamilyDailyReward
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult
|
| | |
|
| | | class tagMCFamilyActivityExchangeResult(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Point", c_int), # 活跃令
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0x02
|
| | | self.Point = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFamilyActivityExchangeResult)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 02 家族活跃令兑换结果 //tagMCFamilyActivityExchangeResult:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Point:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Point
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFamilyActivityExchangeResult=tagMCFamilyActivityExchangeResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityExchangeResult.Cmd,m_NAtagMCFamilyActivityExchangeResult.SubCmd))] = m_NAtagMCFamilyActivityExchangeResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Exp", c_int), # 当前VIP等级经验
|
| | | ("VIPLV", c_int), #vip等级
|
| | | ("VIPLV", c_int), #vip等级 |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCCollectAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int),
|
| | | ("Count", c_ubyte),
|
| | | ("ItemID", c_int), |
| | | ("Count", c_ubyte), |
| | | ("IsAuctionItem", c_ubyte), #是否拍品
|
| | | ]
|
| | |
|
| | |
| | | class tagMCDynamicBarrier(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("APosX", c_ushort),
|
| | | ("APosY", c_ushort),
|
| | | ("BPosX", c_ushort),
|
| | | ("BPosY", c_ushort),
|
| | | ("Angle", c_ushort),
|
| | | ("APosX", c_ushort), |
| | | ("APosY", c_ushort), |
| | | ("BPosX", c_ushort), |
| | | ("BPosY", c_ushort), |
| | | ("Angle", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCCntInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int),
|
| | | ("Cnt", c_int),
|
| | | ("NPCID", c_int), |
| | | ("Cnt", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ObjID", c_int),
|
| | | ("NPCID", c_int),
|
| | | ("NPCHP", c_int),
|
| | | ("MaxHP", c_int),
|
| | | ("ObjID", c_int), |
| | | ("NPCID", c_int), |
| | | ("NPCHP", c_int), |
| | | ("MaxHP", c_int), |
| | | ("IsActive", c_ubyte), #这个NPC是否活着
|
| | | ("PosX", c_ushort),
|
| | | ("PosY", c_ushort),
|
| | | ("PosX", c_ushort), |
| | | ("PosY", c_ushort), |
| | | ("RefreshSecond", c_int), # 剩余多少秒刷新
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("NPCID", c_int),
|
| | | ("PosX", c_ushort),
|
| | | ("PosY", c_ushort),
|
| | | ("NPCID", c_int), |
| | | ("PosX", c_ushort), |
| | | ("PosY", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("NPCID", c_int),
|
| | | ("NPCID", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | PlayerID = 0 #(DWORD PlayerID)//玩家ID
|
| | | EquipClassLV = 0 #(BYTE EquipClassLV)
|
| | | ItemDataSize = 0 #(WORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | ItemData = "" #(String ItemData)//物品记录 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCRunTaskAwardRecord(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Type", c_ubyte),
|
| | | ("Num", c_int),
|
| | | ("AwardState", c_ubyte),
|
| | | ("Type", c_ubyte), |
| | | ("Num", c_int), |
| | | ("AwardState", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ItemDataSize = 0 #(DWORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | PlusDataSize = 0 #(DWORD PlusDataSize)
|
| | | PlusData = "" #(String PlusData)//扩展记录
|
| | | PlusData = "" #(String PlusData)//扩展记录 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GuideID", c_ushort),
|
| | | ("GuideID", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagRefreshType(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RefreshType", c_ubyte),
|
| | | ("Value", c_int),
|
| | | ("RefreshType", c_ubyte), |
| | | ("Value", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCItemDayUseCnt(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int),
|
| | | ("ItemID", c_int), |
| | | ("UseCnt", c_ushort), # 今日已使用次数
|
| | | ]
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 15 灵器突破结果 #tagMCLingQiEquipBreakResult
|
| | |
|
| | | class tagMCLingQiEquipBreakResult(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MakeItemID", c_int), #突破后的物品ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA8
|
| | | 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 = 0xA8
|
| | | self.SubCmd = 0x15
|
| | | self.MakeItemID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCLingQiEquipBreakResult)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 15 灵器突破结果 //tagMCLingQiEquipBreakResult:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MakeItemID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MakeItemID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCLingQiEquipBreakResult=tagMCLingQiEquipBreakResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiEquipBreakResult.Cmd,m_NAtagMCLingQiEquipBreakResult.SubCmd))] = m_NAtagMCLingQiEquipBreakResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 14 合成结果通知 #tagMCMakeItemAnswer
|
| | |
|
| | | class tagMCMakeItemAnswer(Structure):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("Result", c_ubyte), #是否成功
|
| | | ("MakeItemID", c_int), #合成的物品ID
|
| | | ]
|
| | |
| | |
|
| | | m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult
|
| | |
|
| | | class tagMCZhuXianDecomposeItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), #物品ID
|
| | | ("ItemCnt", c_ubyte), #物品数量
|
| | | ("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.ItemCnt = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCZhuXianDecomposeItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult:
|
| | | ItemID:%d,
|
| | | ItemCnt:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCnt,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCZhuXianDecomposeResult(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)//数量
|
| | | ItemList = list() #(vector<tagMCZhuXianDecomposeItem> ItemList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x15
|
| | | 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):
|
| | | temItemList = tagMCZhuXianDecomposeItem()
|
| | | _pos = temItemList.ReadData(_lpData, _pos)
|
| | | self.ItemList.append(temItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x15
|
| | | self.Cnt = 0
|
| | | self.ItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.ItemList[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.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Cnt:%d,
|
| | | ItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("State", c_ubyte), #0-不可领 1-可领 2-已领取
|
| | | ("CTGTotal", c_int), #本次活动已累计充值,单位元
|
| | | ("FireworksBuyCount", c_ushort), #已购买高级烟花数
|
| | | ("FirewordsScore", c_int), #当前累计所有烟花总积分
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x14
|
| | | self.State = 0
|
| | | self.CTGTotal = 0
|
| | | self.FireworksBuyCount = 0
|
| | | self.FirewordsScore = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | State:%d
|
| | | State:%d,
|
| | | CTGTotal:%d,
|
| | | FireworksBuyCount:%d,
|
| | | FirewordsScore:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.State
|
| | | self.State,
|
| | | self.CTGTotal,
|
| | | self.FireworksBuyCount,
|
| | | self.FirewordsScore
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCXJSDRecharge=tagMCXJSDRecharge()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
|
| | |
|
| | | class tagMCBossFirstKillState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int), |
| | | ("FKState", c_int), # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.NPCID = 0
|
| | | self.FKState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCBossFirstKillState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
|
| | | NPCID:%d,
|
| | | FKState:%d
|
| | | '''\
|
| | | %(
|
| | | self.NPCID,
|
| | | self.FKState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossFirstKillStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | BossCount = 0 #(BYTE BossCount)
|
| | | FirstKillStateList = list() #(vector<tagMCBossFirstKillState> FirstKillStateList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.BossCount):
|
| | | temFirstKillStateList = tagMCBossFirstKillState()
|
| | | _pos = temFirstKillStateList.ReadData(_lpData, _pos)
|
| | | self.FirstKillStateList.append(temFirstKillStateList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x01
|
| | | self.BossCount = 0
|
| | | self.FirstKillStateList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.BossCount):
|
| | | length += self.FirstKillStateList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.BossCount)
|
| | | for i in range(self.BossCount):
|
| | | data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | BossCount:%d,
|
| | | FirstKillStateList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.BossCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | Head = tagHead()
|
| | | PointAttrIDCount = 0 #(BYTE PointAttrIDCount)// 点类型个数
|
| | | PointAttrIDList = list() #(vector<BYTE> PointAttrIDList)// 点类型列表
|
| | | PointValueList = list() #(vector<WORD> PointValueList)// 点类型对应已加自由点数列表
|
| | | PointValueList = list() #(vector<DWORD> PointValueList)// 点类型对应已加自由点数列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.PointAttrIDList.append(value)
|
| | | for i in range(self.PointAttrIDCount):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.PointValueList.append(value)
|
| | | return _pos
|
| | |
|
| | |
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1 * self.PointAttrIDCount
|
| | | length += 2 * self.PointAttrIDCount
|
| | | length += 4 * self.PointAttrIDCount
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | for i in range(self.PointAttrIDCount):
|
| | | data = CommFunc.WriteBYTE(data, self.PointAttrIDList[i])
|
| | | for i in range(self.PointAttrIDCount):
|
| | | data = CommFunc.WriteWORD(data, self.PointValueList[i])
|
| | | data = CommFunc.WriteDWORD(data, self.PointValueList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|