| | |
| | | LuckValue = 0 #(WORD LuckValue)//当前幸运值
|
| | | TreasureCount = 0 #(DWORD TreasureCount)//已寻宝总次数
|
| | | TreasureCountToday = 0 #(DWORD TreasureCountToday)//今日已寻宝总次数
|
| | | TreasureCountTodayGold = 0 #(DWORD TreasureCountTodayGold)//今日消耗货币已寻宝总次数
|
| | | FreeCountToday = 0 #(WORD FreeCountToday)//今日已免费寻宝次数
|
| | | TreasureCntAward = 0 #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
|
| | | GridLimitCnt = 0 #(BYTE GridLimitCnt)
|
| | |
| | | self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TreasureCountToday,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TreasureCountTodayGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | |
| | | self.LuckValue = 0
|
| | | self.TreasureCount = 0
|
| | | self.TreasureCountToday = 0
|
| | | self.TreasureCountTodayGold = 0
|
| | | self.FreeCountToday = 0
|
| | | self.TreasureCntAward = 0
|
| | | self.GridLimitCnt = 0
|
| | |
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | |
| | | data = CommFunc.WriteWORD(data, self.LuckValue)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCount)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCountToday)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCountTodayGold)
|
| | | data = CommFunc.WriteWORD(data, self.FreeCountToday)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
|
| | | data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
|
| | |
| | | LuckValue:%d,
|
| | | TreasureCount:%d,
|
| | | TreasureCountToday:%d,
|
| | | TreasureCountTodayGold:%d,
|
| | | FreeCountToday:%d,
|
| | | TreasureCntAward:%d,
|
| | | GridLimitCnt:%d,
|
| | |
| | | self.LuckValue,
|
| | | self.TreasureCount,
|
| | | self.TreasureCountToday,
|
| | | self.TreasureCountTodayGold,
|
| | | self.FreeCountToday,
|
| | | self.TreasureCntAward,
|
| | | self.GridLimitCnt,
|
| | |
| | | TreasureType = 0 #(BYTE TreasureType)//寻宝类型
|
| | | TreasureIndex = 0 #(BYTE TreasureIndex)//寻宝索引
|
| | | CostType = 0 #(BYTE CostType)//消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
|
| | | AddMoneyType = 0 #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
|
| | | AddMoneyValue = 0 #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
|
| | | AddMoneyType = 0 #(BYTE AddMoneyType)// 本次寻宝额外增加的积分货币类型,可能为0
|
| | | AddMoneyValue = 0 #(WORD AddMoneyValue)// 本次寻宝额外增加的积分货币值,可能为0
|
| | | AddItemID = 0 #(DWORD AddItemID)// 本次寻宝额外赠送的物品ID,可能为0
|
| | | AddItemCount = 0 #(DWORD AddItemCount)// 本次寻宝额外赠送的物品ID个数,可能为0
|
| | | AddTreasureLuck = 0 #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
|
| | | TreasureResultLen = 0 #(WORD TreasureResultLen)
|
| | | TreasureResult = "" #(String TreasureResult)// 获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
|
| | |
| | | self.CostType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AddItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AddItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
|
| | |
| | | self.CostType = 0
|
| | | self.AddMoneyType = 0
|
| | | self.AddMoneyValue = 0
|
| | | self.AddItemID = 0
|
| | | self.AddItemCount = 0
|
| | | self.AddTreasureLuck = 0
|
| | | self.TreasureResultLen = 0
|
| | | self.TreasureResult = ""
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += 2
|
| | | length += len(self.TreasureResult)
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.CostType)
|
| | | data = CommFunc.WriteBYTE(data, self.AddMoneyType)
|
| | | data = CommFunc.WriteWORD(data, self.AddMoneyValue)
|
| | | data = CommFunc.WriteDWORD(data, self.AddItemID)
|
| | | data = CommFunc.WriteDWORD(data, self.AddItemCount)
|
| | | data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
|
| | | data = CommFunc.WriteWORD(data, self.TreasureResultLen)
|
| | | data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
|
| | |
| | | CostType:%d,
|
| | | AddMoneyType:%d,
|
| | | AddMoneyValue:%d,
|
| | | AddItemID:%d,
|
| | | AddItemCount:%d,
|
| | | AddTreasureLuck:%d,
|
| | | TreasureResultLen:%d,
|
| | | TreasureResult:%s
|
| | |
| | | self.CostType,
|
| | | self.AddMoneyType,
|
| | | self.AddMoneyValue,
|
| | | self.AddItemID,
|
| | | self.AddItemCount,
|
| | | self.AddTreasureLuck,
|
| | | self.TreasureResultLen,
|
| | | self.TreasureResult
|
| | |
| | | _fields_ = [
|
| | | ("MoneyType", c_ubyte),
|
| | | ("MoneyValue", c_int),
|
| | | ("IsBind", c_ubyte), # 同物品IsBind标记逻辑
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.MoneyType = 0
|
| | | self.MoneyValue = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
|
| | | MoneyType:%d,
|
| | | MoneyValue:%d
|
| | | MoneyValue:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.MoneyType,
|
| | | self.MoneyValue
|
| | | self.MoneyValue,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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 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 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 A2 排行榜信息#tagPYBillboardData
|
| | |
|
| | | class tagPYBillboardInfo(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent
|
| | | # A9 24 群英榜匹配玩家列表 #tagSCQunyingMatchList
|
| | |
|
| | | 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)//境界 |
| | | class tagSCQunyingMatchInfo(Structure):
|
| | | Rank = 0 #(WORD Rank)//排名,从1开始
|
| | | PlayerID = 0 #(DWORD PlayerID)//目标玩家ID
|
| | | PlayerName = "" #(char PlayerName[33])
|
| | | LV = 0 #(WORD LV)// 玩家等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | TitleID = 0 #(DWORD TitleID)//称号
|
| | | ModelMark = 0 #(DWORD ModelMark)//变形模型mark
|
| | | EquipShowSwitch = 0 #(DWORD EquipShowSwitch)//其他外观信息
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | 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.Rank,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.ID = 0
|
| | | self.Name = ""
|
| | | self.Rank = 0
|
| | | self.PlayerID = 0
|
| | | self.PlayerName = ""
|
| | | self.LV = 0
|
| | | self.Job = 0
|
| | | self.RealmLV = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.TitleID = 0
|
| | | self.ModelMark = 0
|
| | | self.EquipShowSwitch = 0
|
| | | self.ServerID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 2
|
| | | length += 4
|
| | | length += 33
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | |
| | |
|
| | | 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.Rank)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.PlayerName)
|
| | | 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.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.TitleID)
|
| | | data = CommFunc.WriteDWORD(data, self.ModelMark)
|
| | | data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | ID:%d,
|
| | | Name:%s,
|
| | | Rank:%d,
|
| | | PlayerID:%d,
|
| | | PlayerName:%s,
|
| | | LV:%d,
|
| | | Job:%d,
|
| | | RealmLV:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | FacePic:%d,
|
| | | TitleID:%d,
|
| | | ModelMark:%d,
|
| | | EquipShowSwitch:%d,
|
| | | ServerID:%d
|
| | | '''\
|
| | | %(
|
| | | self.ID,
|
| | | self.Name,
|
| | | self.Rank,
|
| | | self.PlayerID,
|
| | | self.PlayerName,
|
| | | self.LV,
|
| | | self.Job,
|
| | | self.RealmLV,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | self.FacePic,
|
| | | self.TitleID,
|
| | | self.ModelMark,
|
| | | self.EquipShowSwitch,
|
| | | self.ServerID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCRecommendFriendsInfo(Structure):
|
| | | class tagSCQunyingMatchList(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)//信息数
|
| | | FriendsList = list() #(vector<tagRecommendFriendsData> FriendsList)//成员信息
|
| | | MatchCount = 0 #(BYTE MatchCount)
|
| | | MatchList = list() #(vector<tagSCQunyingMatchInfo> MatchList)// 匹配列表,从高分到低分
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA9
|
| | | self.Head.SubCmd = 0xA8
|
| | | self.Head.SubCmd = 0x24
|
| | | 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)
|
| | | self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MatchCount):
|
| | | temMatchList = tagSCQunyingMatchInfo()
|
| | | _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 = 0xA8
|
| | | self.Cnt = 0
|
| | | self.FriendsList = list()
|
| | | self.Head.SubCmd = 0x24
|
| | | self.MatchCount = 0
|
| | | self.MatchList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.FriendsList[i].GetLength()
|
| | | 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.Cnt)
|
| | | for i in range(self.Cnt):
|
| | | data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].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,
|
| | | Cnt:%d,
|
| | | FriendsList:%s
|
| | | MatchCount:%d,
|
| | | MatchList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | self.MatchCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo
|
| | | m_NAtagSCQunyingMatchList=tagSCQunyingMatchList()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCQunyingMatchList.Head.Cmd,m_NAtagSCQunyingMatchList.Head.SubCmd))] = m_NAtagSCQunyingMatchList
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 25 群英榜玩家信息 #tagSCQunyingPlayerInfo
|
| | |
|
| | | class tagSCQunyingPlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("RefreshCnt", c_int), # 本周已刷新匹配次数
|
| | | ("LastRecoverTime", c_int), # 上次免费恢复挑战令时间戳,为0时可不用倒计时
|
| | | ("RankHighest", c_ushort), # 历史最高名次,第1名为最高
|
| | | ("RankSuccAward", c_int), # 历史最高名次成就领奖记录,按奖励记录索引位运算记录是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA9
|
| | | 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 = 0xA9
|
| | | self.SubCmd = 0x25
|
| | | self.RefreshCnt = 0
|
| | | self.LastRecoverTime = 0
|
| | | self.RankHighest = 0
|
| | | self.RankSuccAward = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagSCQunyingPlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A9 25 群英榜玩家信息 //tagSCQunyingPlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | RefreshCnt:%d,
|
| | | LastRecoverTime:%d,
|
| | | RankHighest:%d,
|
| | | RankSuccAward:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.RefreshCnt,
|
| | | self.LastRecoverTime,
|
| | | self.RankHighest,
|
| | | self.RankSuccAward
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCQunyingPlayerInfo=tagSCQunyingPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCQunyingPlayerInfo.Cmd,m_NAtagSCQunyingPlayerInfo.SubCmd))] = m_NAtagSCQunyingPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | m_NAtagSCRenameResult=tagSCRenameResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCRenameResult.Head.Cmd,m_NAtagSCRenameResult.Head.SubCmd))] = m_NAtagSCRenameResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 69 登录活动信息新 #tagMCActLoginNew
|
| | | # AA 21 武将登场活动信息 #tagSCActHeroAppearInfo
|
| | |
|
| | | class tagMCActLoginNewItem(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(tagMCActLoginNewItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 69 登录活动信息新 //tagMCActLoginNew:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActLoginNewDay(Structure):
|
| | | DayNum = 0 #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
|
| | | Count = 0 #(BYTE Count)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
|
| | | CountEx = 0 #(BYTE CountEx)// 额外奖励物品数
|
| | | AwardItemListEx = list() #(vector<tagMCActLoginNewItem> AwardItemListEx)// 额外奖励物品列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temAwardItemList = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CountEx):
|
| | | temAwardItemListEx = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemListEx.ReadData(_lpData, _pos)
|
| | | self.AwardItemListEx.append(temAwardItemListEx)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.DayNum = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | self.CountEx = 0
|
| | | self.AwardItemListEx = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.CountEx):
|
| | | length += self.AwardItemListEx[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.DayNum)
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.CountEx)
|
| | | for i in range(self.CountEx):
|
| | | data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | DayNum:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s,
|
| | | CountEx:%d,
|
| | | AwardItemListEx:%s
|
| | | '''\
|
| | | %(
|
| | | self.DayNum,
|
| | | self.Count,
|
| | | "...",
|
| | | self.CountEx,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActLoginNew(Structure):
|
| | | class tagSCActHeroAppearInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActType = 0 #(BYTE ActType)// 活动类型,用于关联活动相关模块用,如签到、任务等
|
| | | ActNum = 0 #(BYTE ActNum)// 活动编号
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | RepSignMoneyType = 0 #(BYTE RepSignMoneyType)// 补签消耗货币类型
|
| | | RepSignMoneyValue = 0 #(DWORD RepSignMoneyValue)// 补签消耗货币值
|
| | | AwardExCTGID = 0 #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
|
| | | DayCount = 0 #(BYTE DayCount)
|
| | | AwardDayList = list() #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
|
| | | CfgID = 0 #(WORD CfgID)// 活动时间表配置ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x69
|
| | | self.Head.SubCmd = 0x21
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.DayCount):
|
| | | temAwardDayList = tagMCActLoginNewDay()
|
| | | _pos = temAwardDayList.ReadData(_lpData, _pos)
|
| | | self.AwardDayList.append(temAwardDayList)
|
| | | self.CfgID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x69
|
| | | self.Head.SubCmd = 0x21
|
| | | self.ActType = 0
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.LimitLV = 0
|
| | | self.RepSignMoneyType = 0
|
| | | self.RepSignMoneyValue = 0
|
| | | self.AwardExCTGID = 0
|
| | | self.DayCount = 0
|
| | | self.AwardDayList = list()
|
| | | self.CfgID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.DayCount):
|
| | | length += self.AwardDayList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActType)
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
|
| | | data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
|
| | | data = CommFunc.WriteWORD(data, self.AwardExCTGID)
|
| | | data = CommFunc.WriteBYTE(data, self.DayCount)
|
| | | for i in range(self.DayCount):
|
| | | data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.CfgID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActType:%d,
|
| | | ActNum:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | LimitLV:%d,
|
| | | RepSignMoneyType:%d,
|
| | | RepSignMoneyValue:%d,
|
| | | AwardExCTGID:%d,
|
| | | DayCount:%d,
|
| | | AwardDayList:%s
|
| | | CfgID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActType,
|
| | | self.ActNum,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.LimitLV,
|
| | | self.RepSignMoneyType,
|
| | | self.RepSignMoneyValue,
|
| | | self.AwardExCTGID,
|
| | | self.DayCount,
|
| | | "..."
|
| | | self.CfgID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActLoginNew=tagMCActLoginNew()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginNew.Head.Cmd,m_NAtagMCActLoginNew.Head.SubCmd))] = m_NAtagMCActLoginNew
|
| | | m_NAtagSCActHeroAppearInfo=tagSCActHeroAppearInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearInfo.Head.Cmd,m_NAtagSCActHeroAppearInfo.Head.SubCmd))] = m_NAtagSCActHeroAppearInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 70 登录活动玩家信息新 #tagMCActLoginPlayerInfoNew
|
| | | # AA 22 武将登场活动玩家信息 #tagSCActHeroAppearPlayerInfo
|
| | |
|
| | | class tagMCActLoginPlayerInfoNew(Structure):
|
| | | class tagSCActHeroAppearPlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActNum", c_ubyte), # 活动编号
|
| | | ("LoginAward", c_int), # 普通奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ("LoginAwardEx", c_int), # 额外奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ("StarHeroIndex", c_ubyte), # 升星计划选择的武将ID索引
|
| | | ("StarFreeAward", c_int), # 升星计划免费奖励记录,按奖励记录索引二进制位运算记录是否已领取
|
| | | ("CallHeroIndex", c_ubyte), # 招募选择的武将ID索引
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x70
|
| | | self.SubCmd = 0x22
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x70
|
| | | self.SubCmd = 0x22
|
| | | self.ActNum = 0
|
| | | self.LoginAward = 0
|
| | | self.LoginAwardEx = 0
|
| | | self.StarHeroIndex = 0
|
| | | self.StarFreeAward = 0
|
| | | self.CallHeroIndex = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCActLoginPlayerInfoNew)
|
| | | return sizeof(tagSCActHeroAppearPlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 70 登录活动玩家信息新 //tagMCActLoginPlayerInfoNew:
|
| | | DumpString = '''// AA 22 武将登场活动玩家信息 //tagSCActHeroAppearPlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActNum:%d,
|
| | | LoginAward:%d,
|
| | | LoginAwardEx:%d
|
| | | StarHeroIndex:%d,
|
| | | StarFreeAward:%d,
|
| | | CallHeroIndex:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActNum,
|
| | | self.LoginAward,
|
| | | self.LoginAwardEx
|
| | | self.StarHeroIndex,
|
| | | self.StarFreeAward,
|
| | | self.CallHeroIndex
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew
|
| | | m_NAtagSCActHeroAppearPlayerInfo=tagSCActHeroAppearPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearPlayerInfo.Cmd,m_NAtagSCActHeroAppearPlayerInfo.SubCmd))] = m_NAtagSCActHeroAppearPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 20 活动签到奖励信息 #tagSCActSignPlayerInfo
|
| | |
|
| | | class tagSCActSignPlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActType", c_ubyte), # 活动类型
|
| | | ("ActNum", c_ubyte), # 活动编号
|
| | | ("SignAward", c_int), # 奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x20
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x20
|
| | | self.ActType = 0
|
| | | self.ActNum = 0
|
| | | self.SignAward = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagSCActSignPlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 20 活动签到奖励信息 //tagSCActSignPlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActType:%d,
|
| | | ActNum:%d,
|
| | | SignAward:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActType,
|
| | | self.ActNum,
|
| | | self.SignAward
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCActSignPlayerInfo=tagSCActSignPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActSignPlayerInfo.Cmd,m_NAtagSCActSignPlayerInfo.SubCmd))] = m_NAtagSCActSignPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | #------------------------------------------------------
|
| | | # B1 22 武将信息 #tagSCHeroInfo
|
| | |
|
| | | class tagSCHero(Structure):
|
| | | class tagSCHeroSkin(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("HeroID", c_int), # 武将ID
|
| | | ("SkinState", c_int), # 武将皮肤已解锁状态信息,按皮肤所在索引二进制位运算判断是否解锁,0索引位默认皮肤,不用验证
|
| | | ("BookInitState", c_ubyte), # 图鉴激活状态:0-未激活;1-可激活;2-已激活
|
| | | ("BookStarLV", c_ushort), # 图鉴星级等级
|
| | | ("BookBreakLV", c_ushort), # 图鉴突破等级
|
| | | ("BookStarLVH", c_ushort), # 图鉴星级历史最高等级
|
| | | ("BookBreakLVH", c_ushort), # 图鉴突破历史最高等级
|
| | | ("SkinID", c_int), #皮肤ID,只通知非默认皮肤
|
| | | ("State", c_ubyte), #是否已激活
|
| | | ("Star", c_ubyte), #星级
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.HeroID = 0
|
| | | self.SkinState = 0
|
| | | self.BookInitState = 0
|
| | | self.BookStarLV = 0
|
| | | self.BookBreakLV = 0
|
| | | self.BookStarLVH = 0
|
| | | self.BookBreakLVH = 0
|
| | | self.SkinID = 0
|
| | | self.State = 0
|
| | | self.Star = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagSCHero)
|
| | | return sizeof(tagSCHeroSkin)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 22 武将信息 //tagSCHeroInfo:
|
| | | SkinID:%d,
|
| | | State:%d,
|
| | | Star:%d
|
| | | '''\
|
| | | %(
|
| | | self.SkinID,
|
| | | self.State,
|
| | | self.Star
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagSCHero(Structure):
|
| | | HeroID = 0 #(DWORD HeroID)// 武将ID
|
| | | BookInitState = 0 #(BYTE BookInitState)// 图鉴激活状态:0-未激活;1-可激活;2-已激活
|
| | | SkinCnt = 0 #(BYTE SkinCnt)
|
| | | SkinList = list() #(vector<tagSCHeroSkin> SkinList)// 非默认皮肤信息列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.HeroID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.BookInitState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SkinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SkinCnt):
|
| | | temSkinList = tagSCHeroSkin()
|
| | | _pos = temSkinList.ReadData(_lpData, _pos)
|
| | | self.SkinList.append(temSkinList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.HeroID = 0
|
| | | self.BookInitState = 0
|
| | | self.SkinCnt = 0
|
| | | self.SkinList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.SkinCnt):
|
| | | length += self.SkinList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.HeroID)
|
| | | data = CommFunc.WriteBYTE(data, self.BookInitState)
|
| | | data = CommFunc.WriteBYTE(data, self.SkinCnt)
|
| | | for i in range(self.SkinCnt):
|
| | | data = CommFunc.WriteString(data, self.SkinList[i].GetLength(), self.SkinList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | HeroID:%d,
|
| | | SkinState:%d,
|
| | | BookInitState:%d,
|
| | | BookStarLV:%d,
|
| | | BookBreakLV:%d,
|
| | | BookStarLVH:%d,
|
| | | BookBreakLVH:%d
|
| | | SkinCnt:%d,
|
| | | SkinList:%s
|
| | | '''\
|
| | | %(
|
| | | self.HeroID,
|
| | | self.SkinState,
|
| | | self.BookInitState,
|
| | | self.BookStarLV,
|
| | | self.BookBreakLV,
|
| | | self.BookStarLVH,
|
| | | self.BookBreakLVH
|
| | | self.SkinCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|