| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 09 玩家挂机系统信息 #tagMCGuajiInfo
|
| | |
|
| | | class tagMCGuajiMoney(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MoneyType", c_ubyte), |
| | | ("MoneyValue", 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.MoneyType = 0
|
| | | self.MoneyValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGuajiMoney)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo:
|
| | | MoneyType:%d,
|
| | | MoneyValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.MoneyType,
|
| | | self.MoneyValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGuajiItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("Count", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.Count = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGuajiItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo:
|
| | | ItemID:%d,
|
| | | Count:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.Count
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGuajiInfo(Structure):
|
| | | Head = tagHead()
|
| | | QuickAwardCount = 0 #(BYTE QuickAwardCount)// 今日已快速挂机收益次数
|
| | | AwardType = 0 #(BYTE AwardType)// 收益类型: 0-已累计预览;1-领取结算结果(包含常规领取跟快速领取)
|
| | | AwardSeconds = 0 #(DWORD AwardSeconds)// 已累计收益时长,秒
|
| | | Exp = 0 #(DWORD Exp)// 已累计经验,求余亿部分
|
| | | ExpPoint = 0 #(DWORD ExpPoint)// 已累计经验,整除亿部分
|
| | | MoneyLen = 0 #(BYTE MoneyLen)
|
| | | MoneyList = list() #(vector<tagMCGuajiMoney> MoneyList)// 已累计货币
|
| | | ItemLen = 0 #(BYTE ItemLen)
|
| | | ItemList = list() #(vector<tagMCGuajiItem> ItemList)// 已累计物品
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x09
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.QuickAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AwardSeconds,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MoneyLen):
|
| | | temMoneyList = tagMCGuajiMoney()
|
| | | _pos = temMoneyList.ReadData(_lpData, _pos)
|
| | | self.MoneyList.append(temMoneyList)
|
| | | self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.ItemLen):
|
| | | temItemList = tagMCGuajiItem()
|
| | | _pos = temItemList.ReadData(_lpData, _pos)
|
| | | self.ItemList.append(temItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x09
|
| | | self.QuickAwardCount = 0
|
| | | self.AwardType = 0
|
| | | self.AwardSeconds = 0
|
| | | self.Exp = 0
|
| | | self.ExpPoint = 0
|
| | | self.MoneyLen = 0
|
| | | self.MoneyList = list()
|
| | | self.ItemLen = 0
|
| | | self.ItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.MoneyLen):
|
| | | length += self.MoneyList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.ItemLen):
|
| | | length += self.ItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.QuickAwardCount)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardType)
|
| | | data = CommFunc.WriteDWORD(data, self.AwardSeconds)
|
| | | data = CommFunc.WriteDWORD(data, self.Exp)
|
| | | data = CommFunc.WriteDWORD(data, self.ExpPoint)
|
| | | data = CommFunc.WriteBYTE(data, self.MoneyLen)
|
| | | for i in range(self.MoneyLen):
|
| | | data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ItemLen)
|
| | | for i in range(self.ItemLen):
|
| | | data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | QuickAwardCount:%d,
|
| | | AwardType:%d,
|
| | | AwardSeconds:%d,
|
| | | Exp:%d,
|
| | | ExpPoint:%d,
|
| | | MoneyLen:%d,
|
| | | MoneyList:%s,
|
| | | ItemLen:%d,
|
| | | ItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.QuickAwardCount,
|
| | | self.AwardType,
|
| | | self.AwardSeconds,
|
| | | self.Exp,
|
| | | self.ExpPoint,
|
| | | self.MoneyLen,
|
| | | "...",
|
| | | self.ItemLen,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGuajiInfo=tagMCGuajiInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuajiInfo.Head.Cmd,m_NAtagMCGuajiInfo.Head.SubCmd))] = m_NAtagMCGuajiInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 22 武将信息 #tagSCHeroInfo
|
| | |
|
| | | class tagSCHero(Structure):
|
| | |
| | | ("Value1", c_int),
|
| | | ("Value2", c_int),
|
| | | ("Value3", c_int),
|
| | | ("IsAdd", c_ubyte), # 是否是添加/覆盖的,1-是;0-否一般为buff的数据刷新
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Value1 = 0
|
| | | self.Value2 = 0
|
| | | self.Value3 = 0
|
| | | self.IsAdd = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | OwnerID:%d,
|
| | | Value1:%d,
|
| | | Value2:%d,
|
| | | Value3:%d
|
| | | Value3:%d,
|
| | | IsAdd:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | |
| | | self.OwnerID,
|
| | | self.Value1,
|
| | | self.Value2,
|
| | | self.Value3
|
| | | self.Value3,
|
| | | self.IsAdd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("ObjID", c_int), # 战斗单位唯一ID
|
| | | ("NPCID", c_int), # 战斗NPCID,不同的实例ID对应的NPCID可能一样
|
| | | ("HeroID", c_int), # 玩家武将ID,仅玩家阵容有
|
| | | ("SkinID", c_int), # 玩家武将皮肤ID,仅玩家阵容有
|
| | | ("HeroID", c_int), # 武将ID,玩家或NPC均可能有,如果有值则外观相关以该武将为准,否则以NPCID为准
|
| | | ("SkinID", c_int), # 武将皮肤ID,玩家或NPC均可能有,如果有值则皮肤以该值为准,否则取NPCID对应的皮肤ID
|
| | | ("HP", c_int), # 当前血量,求余20亿部分
|
| | | ("HPEx", c_int), # 当前血量,整除20亿部分
|
| | | ("MaxHP", c_int), # 最大血量,求余20亿部分
|
| | | ("MaxHPEx", c_int), # 最大血量,整除20亿部分
|
| | | ("LV", c_ushort), # 等级
|
| | | ("LV", c_ushort), # 等级,玩家的武将等级或NPC成长等级,等级显示以该值为准
|
| | | ("PosNum", c_ubyte), # 在本阵容中的站位,从1开始,非主战斗武将为0,如红颜
|
| | | ("AngreXP", c_ushort), # 当前怒气值
|
| | | ]
|