| | |
| | | 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):
|
| | |
| | | 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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<WORD> 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.ReadWORD(_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 += 2 * 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.WriteWORD(data, self.WashValueList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.StoneIDCount)
|
| | | for i in range(self.StoneIDCount):
|
| | | data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
|
| | | for i in range(self.ClassEquipCount):
|
| | | data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ItemGUID:%s,
|
| | | ItemID:%d,
|
| | | Star:%d,
|
| | | PlusLV:%d,
|
| | | EvolveLV:%d,
|
| | | WashLV:%d,
|
| | | WashValueCount:%d,
|
| | | WashValueList:%s,
|
| | | StoneIDCount:%d,
|
| | | StoneIDList:%s,
|
| | | ClassEquipCount:%d,
|
| | | ClassEquipList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ItemGUID,
|
| | | self.ItemID,
|
| | | self.Star,
|
| | | self.PlusLV,
|
| | | self.EvolveLV,
|
| | | self.WashLV,
|
| | | self.WashValueCount,
|
| | | "...",
|
| | | self.StoneIDCount,
|
| | | "...",
|
| | | self.ClassEquipCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
|
| | |
|
| | | class tagGCOpenServerCampaignAwardCount(Structure):
|
| | |
| | | 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):
|
| | |
| | | _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)
|
| | |
| | | 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
|
| | |
| | | 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):
|
| | |
| | | _fields_ = [
|
| | | ("ItemID", c_int), #果实物品ID
|
| | | ("EatCnt", c_ushort), #已使用个数
|
| | | ("ItemAddCnt", c_int), #增幅丹增加上限
|
| | | ("ItemBreakCnt", c_int), #增幅丹突破次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.EatCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.ItemBreakCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList:
|
| | | ItemID:%d,
|
| | | EatCnt:%d
|
| | | EatCnt:%d,
|
| | | ItemAddCnt:%d,
|
| | | ItemBreakCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.EatCnt
|
| | | self.EatCnt,
|
| | | self.ItemAddCnt,
|
| | | self.ItemBreakCnt
|
| | | )
|
| | | 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):
|
| | |
| | | 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 25 NPC已攻击次数信息 #tagMCNPCAttackCountInfo
|
| | |
|
| | | class tagMCNPCAttackCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int),
|
| | | ("AttackCount", 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.NPCID = 0
|
| | | self.AttackCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCNPCAttackCount)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 25 NPC已攻击次数信息 //tagMCNPCAttackCountInfo:
|
| | | NPCID:%d,
|
| | | AttackCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.NPCID,
|
| | | self.AttackCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCNPCAttackCountInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | NPCAttackCountList = list() #(vector<tagMCNPCAttackCount> NPCAttackCountList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x25
|
| | | 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):
|
| | | temNPCAttackCountList = tagMCNPCAttackCount()
|
| | | _pos = temNPCAttackCountList.ReadData(_lpData, _pos)
|
| | | self.NPCAttackCountList.append(temNPCAttackCountList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x25
|
| | | self.Count = 0
|
| | | self.NPCAttackCountList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.NPCAttackCountList[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.NPCAttackCountList[i].GetLength(), self.NPCAttackCountList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | NPCAttackCountList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCNPCAttackCountInfo=tagMCNPCAttackCountInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCAttackCountInfo.Head.Cmd,m_NAtagMCNPCAttackCountInfo.Head.SubCmd))] = m_NAtagMCNPCAttackCountInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 26 NPCID已采集次数信息 #tagMCNPCIDCollectionCntInfo
|
| | |
|
| | | class tagMCNPCIDCollectionCnt(Structure):
|
| | |
| | | _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)//在线奖励类型
|
| | |
| | | #------------------------------------------------------
|
| | | # A3 BF 通知客户端炼丹炉信息 #tagMCPlayerStoveMsg
|
| | |
|
| | | class tagMCPlayerStoveMsg(Structure):
|
| | | class tagMCPlayerStoveInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StoveLV", c_ubyte), # 炼丹炉等级
|
| | | ("StoveExp", c_int), # 炼丹炉经验 |
| | | ("ItemID", c_int), # 合成物品id
|
| | | ("AlchemyID", c_int), # 丹 ID
|
| | | ("StartTime", c_int), # 开始炼的时间
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0xBF
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0xBF
|
| | | self.StoveLV = 0
|
| | | self.StoveExp = 0
|
| | | self.ItemID = 0
|
| | | self.AlchemyID = 0
|
| | | self.StartTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCPlayerStoveMsg)
|
| | | return sizeof(tagMCPlayerStoveInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | StoveLV:%d,
|
| | | StoveExp:%d,
|
| | | ItemID:%d
|
| | | AlchemyID:%d,
|
| | | StartTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.AlchemyID,
|
| | | self.StartTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCPlayerStoveMsg(Structure):
|
| | | Head = tagHead()
|
| | | StoveLV = 0 #(BYTE StoveLV)// 炼丹炉等级
|
| | | StoveExp = 0 #(DWORD StoveExp)// 炼丹炉经验
|
| | | ItemID = 0 #(DWORD ItemID)// 合成物品id
|
| | | ItemCnt = 0 #(BYTE ItemCnt)// 丹药数量
|
| | | StoveCnt = 0 #(WORD StoveCnt)// 丹药数量
|
| | | InfoList = list() #(vector<tagMCPlayerStoveInfo> InfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xBF
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.StoveCnt):
|
| | | temInfoList = tagMCPlayerStoveInfo()
|
| | | _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 = 0xBF
|
| | | self.StoveLV = 0
|
| | | self.StoveExp = 0
|
| | | self.ItemID = 0
|
| | | self.ItemCnt = 0
|
| | | self.StoveCnt = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | for i in range(self.StoveCnt):
|
| | | 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.StoveLV)
|
| | | data = CommFunc.WriteDWORD(data, self.StoveExp)
|
| | | data = CommFunc.WriteDWORD(data, self.ItemID)
|
| | | data = CommFunc.WriteBYTE(data, self.ItemCnt)
|
| | | data = CommFunc.WriteWORD(data, self.StoveCnt)
|
| | | for i in range(self.StoveCnt):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StoveLV:%d,
|
| | | StoveExp:%d,
|
| | | ItemID:%d,
|
| | | ItemCnt:%d,
|
| | | StoveCnt:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StoveLV,
|
| | | self.StoveExp,
|
| | | self.ItemID
|
| | | self.ItemID,
|
| | | self.ItemCnt,
|
| | | self.StoveCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCPlayerStoveMsg=tagMCPlayerStoveMsg()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Cmd,m_NAtagMCPlayerStoveMsg.SubCmd))] = m_NAtagMCPlayerStoveMsg
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Head.Cmd,m_NAtagMCPlayerStoveMsg.Head.SubCmd))] = m_NAtagMCPlayerStoveMsg
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("BeginTime", c_int), #开始计时时间
|
| | | ("BuffTime", c_int), #buff剩余时间
|
| | | ("BuffAddRate", c_int), #buff加成万分率
|
| | | ("CurExp", c_int), #当前总经验
|
| | | ("CurExpPoint", c_int), #当前总经验点
|
| | | ]
|
| | |
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x27
|
| | | self.BeginTime = 0
|
| | | self.BuffTime = 0
|
| | | self.BuffAddRate = 0
|
| | | self.CurExp = 0
|
| | | self.CurExpPoint = 0
|
| | | return
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | BeginTime:%d,
|
| | | BuffTime:%d,
|
| | | BuffAddRate:%d,
|
| | | CurExp:%d,
|
| | | CurExpPoint:%d
|
| | | '''\
|
| | |
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.BeginTime,
|
| | | self.BuffTime,
|
| | | self.BuffAddRate,
|
| | | self.CurExp,
|
| | | self.CurExpPoint
|
| | | )
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 09 技能五行专精信息 #tagMCSkillElementInfo
|
| | |
|
| | | class tagMCSkillElementActiveData(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("SkillID", c_int), # 技能ID
|
| | | ("ActiveLV", 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.SkillID = 0
|
| | | self.ActiveLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSkillElementActiveData)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 09 技能五行专精信息 //tagMCSkillElementInfo:
|
| | | SkillID:%d,
|
| | | ActiveLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.SkillID,
|
| | | self.ActiveLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSkillElementData(Structure):
|
| | | MainSkillID = 0 #(DWORD MainSkillID)// 主技能ID
|
| | | ElementSkillID = 0 #(DWORD ElementSkillID)// 选择的专精技能ID
|
| | | SkillCnt = 0 #(BYTE SkillCnt)// 数量
|
| | | ActiveSkill = list() #(vector<tagMCSkillElementActiveData> ActiveSkill)// 激活的技能ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.MainSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ElementSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.SkillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SkillCnt):
|
| | | temActiveSkill = tagMCSkillElementActiveData()
|
| | | _pos = temActiveSkill.ReadData(_lpData, _pos)
|
| | | self.ActiveSkill.append(temActiveSkill)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.MainSkillID = 0
|
| | | self.ElementSkillID = 0
|
| | | self.SkillCnt = 0
|
| | | self.ActiveSkill = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.SkillCnt):
|
| | | length += self.ActiveSkill[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.MainSkillID)
|
| | | data = CommFunc.WriteDWORD(data, self.ElementSkillID)
|
| | | data = CommFunc.WriteBYTE(data, self.SkillCnt)
|
| | | for i in range(self.SkillCnt):
|
| | | data = CommFunc.WriteString(data, self.ActiveSkill[i].GetLength(), self.ActiveSkill[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | MainSkillID:%d,
|
| | | ElementSkillID:%d,
|
| | | SkillCnt:%d,
|
| | | ActiveSkill:%s
|
| | | '''\
|
| | | %(
|
| | | self.MainSkillID,
|
| | | self.ElementSkillID,
|
| | | self.SkillCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSkillElementInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)// 数量
|
| | | InfoList = list() #(vector<tagMCSkillElementData> InfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x09
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Cnt):
|
| | | temInfoList = tagMCSkillElementData()
|
| | | _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 = 0x09
|
| | | self.Cnt = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Cnt)
|
| | | for i in range(self.Cnt):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Cnt:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSkillElementInfo=tagMCSkillElementInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkillElementInfo.Head.Cmd,m_NAtagMCSkillElementInfo.Head.SubCmd))] = m_NAtagMCSkillElementInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Exp", c_int), # 当前VIP等级经验
|
| | | ("VIPLV", c_int), #vip等级 |
| | | ("VIPLV", c_int), #vip等级
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A7 18 采集奖励物品通知 #tagMCCollectAwardItemInfo
|
| | |
|
| | | class tagMCCollectAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int),
|
| | | ("Count", c_ubyte),
|
| | | ("IsAuctionItem", 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.Count = 0
|
| | | self.IsAuctionItem = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCCollectAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A7 18 采集奖励物品通知 //tagMCCollectAwardItemInfo:
|
| | | ItemID:%d,
|
| | | Count:%d,
|
| | | IsAuctionItem:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.Count,
|
| | | self.IsAuctionItem
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCCollectAwardItemInfo(Structure):
|
| | | Head = tagHead()
|
| | | CollectNPCID = 0 #(DWORD CollectNPCID)//采集的NPCID
|
| | | Count = 0 #(BYTE Count)
|
| | | AwardItemList = list() #(vector<tagMCCollectAwardItem> AwardItemList)//奖励物品信息列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x18
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.CollectNPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temAwardItemList = tagMCCollectAwardItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x18
|
| | | self.CollectNPCID = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.CollectNPCID)
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | CollectNPCID:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.CollectNPCID,
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
|
| | |
|
| | | 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):
|
| | |
| | |
|
| | | m_NAtagMCNPCShow=tagMCNPCShow()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCShow.Cmd,m_NAtagMCNPCShow.SubCmd))] = m_NAtagMCNPCShow
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
|
| | |
|
| | | class tagSCPlayerEquipCacheResult(Structure):
|
| | | Head = tagHead()
|
| | | PlayerID = 0 #(DWORD PlayerID)//玩家ID
|
| | | EquipClassLV = 0 #(BYTE EquipClassLV)
|
| | | ItemDataSize = 0 #(WORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x19
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x19
|
| | | self.PlayerID = 0
|
| | | self.EquipClassLV = 0
|
| | | self.ItemDataSize = 0
|
| | | self.ItemData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | length += len(self.ItemData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.EquipClassLV)
|
| | | data = CommFunc.WriteWORD(data, self.ItemDataSize)
|
| | | data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | PlayerID:%d,
|
| | | EquipClassLV:%d,
|
| | | ItemDataSize:%d,
|
| | | ItemData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.PlayerID,
|
| | | self.EquipClassLV,
|
| | | self.ItemDataSize,
|
| | | self.ItemData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | 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), # 今日已使用次数
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("Result", c_ubyte), #是否成功
|
| | | ("MakeItemID", c_int), #合成的物品ID
|
| | | ]
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B1 08 开始印记流失时间 #tagMCYinjiStartTime
|
| | |
|
| | | class tagMCYinjiStartTime(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCYinjiStartTime)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
|
| | |
|
| | | class tagMCAddXianyuanCoinMsg(Structure):
|
| | |
| | |
|
| | | m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 14 自定义副本奖励信息 #tagMCCuntomFBPrizeInfo
|
| | |
|
| | | class tagMCCuntomFBPrizeItem(Structure):
|
| | | ItemID = 0 #(DWORD ItemID)
|
| | | Count = 0 #(WORD Count)
|
| | | IsAuctionItem = 0 #(BYTE IsAuctionItem)//是否拍品
|
| | | UserDataLen = 0 #(WORD UserDataLen)//附加属性长度
|
| | | UserData = "" #(String UserData)//附加属性 size = UserDataLen
|
| | | 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.ReadWORD(_lpData, _pos)
|
| | | self.IsAuctionItem,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.Count = 0
|
| | | self.IsAuctionItem = 0
|
| | | self.UserDataLen = 0
|
| | | self.UserData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2
|
| | | length += len(self.UserData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.ItemID)
|
| | | data = CommFunc.WriteWORD(data, self.Count)
|
| | | data = CommFunc.WriteBYTE(data, self.IsAuctionItem)
|
| | | data = CommFunc.WriteWORD(data, self.UserDataLen)
|
| | | data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | ItemID:%d,
|
| | | Count:%d,
|
| | | IsAuctionItem:%d,
|
| | | UserDataLen:%d,
|
| | | UserData:%s
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.Count,
|
| | | self.IsAuctionItem,
|
| | | self.UserDataLen,
|
| | | self.UserData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCCuntomFBPrizeInfo(Structure):
|
| | | Head = tagHead()
|
| | | MapID = 0 #(DWORD MapID)
|
| | | FuncLineID = 0 #(WORD FuncLineID)
|
| | | PrizeItemCount = 0 #(BYTE PrizeItemCount)
|
| | | PrizeItemList = list() #(vector<tagMCCuntomFBPrizeItem> PrizeItemList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x14
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.PrizeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.PrizeItemCount):
|
| | | temPrizeItemList = tagMCCuntomFBPrizeItem()
|
| | | _pos = temPrizeItemList.ReadData(_lpData, _pos)
|
| | | self.PrizeItemList.append(temPrizeItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x14
|
| | | self.MapID = 0
|
| | | self.FuncLineID = 0
|
| | | self.PrizeItemCount = 0
|
| | | self.PrizeItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.PrizeItemCount):
|
| | | length += self.PrizeItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.MapID)
|
| | | data = CommFunc.WriteWORD(data, self.FuncLineID)
|
| | | data = CommFunc.WriteBYTE(data, self.PrizeItemCount)
|
| | | for i in range(self.PrizeItemCount):
|
| | | data = CommFunc.WriteString(data, self.PrizeItemList[i].GetLength(), self.PrizeItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | MapID:%d,
|
| | | FuncLineID:%d,
|
| | | PrizeItemCount:%d,
|
| | | PrizeItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.MapID,
|
| | | self.FuncLineID,
|
| | | self.PrizeItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCCuntomFBPrizeInfo=tagMCCuntomFBPrizeInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCuntomFBPrizeInfo.Head.Cmd,m_NAtagMCCuntomFBPrizeInfo.Head.SubCmd))] = m_NAtagMCCuntomFBPrizeInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | m_NAtagMCFamilyWarBillboard=tagMCFamilyWarBillboard()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyWarBillboard.Head.Cmd,m_NAtagMCFamilyWarBillboard.Head.SubCmd))] = m_NAtagMCFamilyWarBillboard
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 15 副本买buff信息通知 #tagMCFBBuyBuffInfo
|
| | |
|
| | | class tagMCFBBuyBuffTime(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MapID", c_int), |
| | | ("MoneyCnt", c_ushort), |
| | | ("BuyTime", 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.MapID = 0
|
| | | self.MoneyCnt = 0
|
| | | self.BuyTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFBBuyBuffTime)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 15 副本买buff信息通知 //tagMCFBBuyBuffInfo:
|
| | | MapID:%d,
|
| | | MoneyCnt:%d,
|
| | | BuyTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.MapID,
|
| | | self.MoneyCnt,
|
| | | self.BuyTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCFBBuyBuffInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)
|
| | | InfoList = list() #(vector<tagMCFBBuyBuffTime> InfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | 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):
|
| | | temInfoList = tagMCFBBuyBuffTime()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x15
|
| | | self.Cnt = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Cnt)
|
| | | for i in range(self.Cnt):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Cnt:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFBBuyBuffInfo=tagMCFBBuyBuffInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBBuyBuffInfo.Head.Cmd,m_NAtagMCFBBuyBuffInfo.Head.SubCmd))] = m_NAtagMCFBBuyBuffInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 13 天星塔通关层数 #tagMCSkyTowerInfo
|
| | |
|
| | | class tagMCSkyTowerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Floor", c_int), # 已通关层
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | self.Floor = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSkyTowerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Floor:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Floor
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 16 开始自定义场景结果 #tagMCStartCustomSceneResult
|
| | |
|
| | | class tagMCStartCustomSceneResult(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_int), |
| | | ("FuncLineID", c_ushort), |
| | | ("Result", c_ubyte), #是否允许
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x16
|
| | | 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 = 0xB2
|
| | | self.SubCmd = 0x16
|
| | | self.MapID = 0
|
| | | self.FuncLineID = 0
|
| | | self.Result = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCStartCustomSceneResult)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 16 开始自定义场景结果 //tagMCStartCustomSceneResult:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MapID:%d,
|
| | | FuncLineID:%d,
|
| | | Result:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MapID,
|
| | | self.FuncLineID,
|
| | | self.Result
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCStartCustomSceneResult=tagMCStartCustomSceneResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartCustomSceneResult.Cmd,m_NAtagMCStartCustomSceneResult.SubCmd))] = m_NAtagMCStartCustomSceneResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
|
| | |
|
| | | class tagMCPushNotificationsSetting(Structure):
|
| | |
| | |
|
| | | m_NAtagMCZhuXianBossCnt=tagMCZhuXianBossCnt()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianBossCnt.Cmd,m_NAtagMCZhuXianBossCnt.SubCmd))] = m_NAtagMCZhuXianBossCnt
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
|
| | |
|
| | | class tagMCZhuXianTowerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Floor", c_int), # 已通关层
|
| | | ("LastFloor", c_int), # 上次挑战层
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | self.Floor = 0
|
| | | self.LastFloor = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCZhuXianTowerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 13 诛仙塔通关层数 //tagMCZhuXianTowerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Floor:%d,
|
| | | LastFloor:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Floor,
|
| | | self.LastFloor
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCZhuXianTowerInfo=tagMCZhuXianTowerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianTowerInfo.Cmd,m_NAtagMCZhuXianTowerInfo.SubCmd))] = m_NAtagMCZhuXianTowerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|