| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo
|
| | |
|
| | | class tagGCTagFamilyMember(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | Name = "" #(String Name)//size = NameLen
|
| | | FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级
|
| | | LV = 0 #(WORD LV)
|
| | | Job = 0 #(BYTE Job)//ְҵ
|
| | | Face = 0 #(DWORD Face)//头像
|
| | | FacePic = 0 #(DWORD FacePic)//头像外框
|
| | | OfficialRank = 0 #(BYTE OfficialRank)//境界
|
| | | FightPower = 0 #(DWORD FightPower)//成员战力,求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//成员战力,整除亿部分
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.NameLen = 0
|
| | | self.Name = ""
|
| | | self.FamilyLV = 0
|
| | | self.LV = 0
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.OfficialRank = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.Name)
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | 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.FamilyLV)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteBYTE(data, self.OfficialRank)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | NameLen:%d,
|
| | | Name:%s,
|
| | | FamilyLV:%d,
|
| | | LV:%d,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | OfficialRank:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.NameLen,
|
| | | self.Name,
|
| | | self.FamilyLV,
|
| | | self.LV,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.OfficialRank,
|
| | | self.FightPower,
|
| | | self.FightPowerEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCTagFamilyInfo(Structure):
|
| | | Head = tagHead()
|
| | | FamilyID = 0 #(DWORD FamilyID)
|
| | | FamilyName = "" #(char FamilyName[33])//家族名称
|
| | | FamilyLV = 0 #(WORD FamilyLV)//家族等级
|
| | | BroadcastLen = 0 #(WORD BroadcastLen)//公告
|
| | | Broadcast = "" #(String Broadcast)//size = BroadcastLen
|
| | | MemberCount = 0 #(WORD MemberCount)//人数
|
| | | Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount
|
| | | FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
|
| | | EmblemID = 0 #(DWORD EmblemID)//徽章ID
|
| | | ServerID = 0 #(DWORD ServerID)//仙盟区服ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen)
|
| | | self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.MemberCount):
|
| | | temMember = tagGCTagFamilyMember()
|
| | | _pos = temMember.ReadData(_lpData, _pos)
|
| | | self.Member.append(temMember)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x13
|
| | | self.FamilyID = 0
|
| | | self.FamilyName = ""
|
| | | self.FamilyLV = 0
|
| | | self.BroadcastLen = 0
|
| | | self.Broadcast = ""
|
| | | self.MemberCount = 0
|
| | | self.Member = list()
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.EmblemID = 0
|
| | | self.ServerID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 33
|
| | | length += 2
|
| | | length += 2
|
| | | length += len(self.Broadcast)
|
| | | length += 2
|
| | | for i in range(self.MemberCount):
|
| | | length += self.Member[i].GetLength()
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteString(data, 33, self.FamilyName)
|
| | | data = CommFunc.WriteWORD(data, self.FamilyLV)
|
| | | data = CommFunc.WriteWORD(data, self.BroadcastLen)
|
| | | data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast)
|
| | | data = CommFunc.WriteWORD(data, self.MemberCount)
|
| | | for i in range(self.MemberCount):
|
| | | data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.EmblemID)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | FamilyID:%d,
|
| | | FamilyName:%s,
|
| | | FamilyLV:%d,
|
| | | BroadcastLen:%d,
|
| | | Broadcast:%s,
|
| | | MemberCount:%d,
|
| | | Member:%s,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | EmblemID:%d,
|
| | | ServerID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.FamilyID,
|
| | | self.FamilyName,
|
| | | self.FamilyLV,
|
| | | self.BroadcastLen,
|
| | | self.Broadcast,
|
| | | self.MemberCount,
|
| | | "...",
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.EmblemID,
|
| | | self.ServerID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
|
| | |
|
| | | class tagtMemberInfo(Structure):
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)
|
| | | FacePic = 0 #(DWORD FacePic)
|
| | | RobValue = 0 #(DWORD RobValue)// 抢劫敌对值
|
| | | MineCount = 0 #(BYTE MineCount)
|
| | | MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表
|
| | | data = None
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MineCount):
|
| | | temMineItemList = tagGCMineItem()
|
| | |
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.RobValue = 0
|
| | | self.MineCount = 0
|
| | | self.MineItemList = list()
|
| | | return
|
| | |
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.RobValue)
|
| | | data = CommFunc.WriteBYTE(data, self.MineCount)
|
| | | for i in range(self.MineCount):
|
| | | data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
|
| | |
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | RobValue:%d,
|
| | | MineCount:%d,
|
| | | MineItemList:%s
|
| | | '''\
|
| | |
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.RobValue,
|
| | | self.MineCount,
|
| | | "..."
|
| | | )
|
| | |
| | | class tagGCCrossBillboardInfo(Structure):
|
| | | Head = tagHead()
|
| | | Type = 0 #(BYTE Type)//榜单类型
|
| | | GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1
|
| | | GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
|
| | | GroupValue1 = 0 #(DWORD GroupValue1)// 分组值1
|
| | | GroupValue2 = 0 #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
|
| | | WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
|
| | | BillboardCount = 0 #(BYTE BillboardCount)
|
| | | CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList)
|
| | |
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.BillboardCount):
|
| | |
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.BillboardCount):
|
| | |
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Type)
|
| | | data = CommFunc.WriteBYTE(data, self.GroupValue1)
|
| | | data = CommFunc.WriteBYTE(data, self.GroupValue2)
|
| | | data = CommFunc.WriteDWORD(data, self.GroupValue1)
|
| | | data = CommFunc.WriteDWORD(data, self.GroupValue2)
|
| | | data = CommFunc.WriteDWORD(data, self.WatchID)
|
| | | data = CommFunc.WriteBYTE(data, self.BillboardCount)
|
| | | for i in range(self.BillboardCount):
|
| | |
| | | # C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
|
| | |
|
| | | class tagGCCrossChampionshipPKBattle(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("BattleNum", c_ubyte), # 对战组编号 1~n
|
| | | ("WinPlayerID", c_int), # 获胜玩家ID
|
| | | ("PlayerIDA", c_int), # 玩家IDA
|
| | | ("PlayerIDB", c_int), # 玩家IDB
|
| | | ]
|
| | | BattleNum = 0 #(BYTE BattleNum)// 对战组编号 1~n
|
| | | WinPlayerID = 0 #(DWORD WinPlayerID)// 获胜玩家ID
|
| | | PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家IDA
|
| | | PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家IDB
|
| | | BattleRetLen = 0 #(BYTE BattleRetLen)
|
| | | BattleRet = "" #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...}
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | | self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.BattleNum = 0
|
| | | self.WinPlayerID = 0
|
| | | self.PlayerIDA = 0
|
| | | self.PlayerIDB = 0
|
| | | self.BattleRetLen = 0
|
| | | self.BattleRet = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCCrossChampionshipPKBattle)
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.BattleRet)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.BattleNum)
|
| | | data = CommFunc.WriteDWORD(data, self.WinPlayerID)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerIDA)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerIDB)
|
| | | data = CommFunc.WriteBYTE(data, self.BattleRetLen)
|
| | | data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo:
|
| | | DumpString = '''
|
| | | BattleNum:%d,
|
| | | WinPlayerID:%d,
|
| | | PlayerIDA:%d,
|
| | | PlayerIDB:%d
|
| | | PlayerIDB:%d,
|
| | | BattleRetLen:%d,
|
| | | BattleRet:%s
|
| | | '''\
|
| | | %(
|
| | | self.BattleNum,
|
| | | self.WinPlayerID,
|
| | | self.PlayerIDA,
|
| | | self.PlayerIDB
|
| | | self.PlayerIDB,
|
| | | self.BattleRetLen,
|
| | | self.BattleRet
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | RealmLV = 0 #(WORD RealmLV)
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.ServerID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | |
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | FightPowerEx:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | FacePic:%d,
|
| | | ServerID:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | |
| | | self.FightPowerEx,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | self.FacePic,
|
| | | self.ServerID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | FightPower = 0 #(DWORD FightPower)//战力,求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.FacePic = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.ServerID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | length += 2
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d
|
| | | FightPowerEx:%d,
|
| | | ServerID:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | |
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.FightPower,
|
| | | self.FightPowerEx
|
| | | self.FightPowerEx,
|
| | | self.ServerID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | | m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo
|
| | |
|
| | | class tagGCFamilyGCZActFamily(Structure):
|
| | | FamilyID = 0 #(DWORD FamilyID)
|
| | | Name = "" #(char Name[33])//参与仙盟名字
|
| | | LV = 0 #(BYTE LV)//仙盟等级
|
| | | ServerID = 0 #(DWORD ServerID)//仙盟所属区服ID
|
| | | EmblemID = 0 #(DWORD EmblemID)//徽章ID
|
| | | FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
|
| | | LeaderID = 0 #(DWORD LeaderID)//盟主ID
|
| | | LeaderName = "" #(char LeaderName[33])//盟主名
|
| | | LeaderFace = 0 #(DWORD LeaderFace)
|
| | | LeaderFacePic = 0 #(DWORD LeaderFacePic)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.FamilyID = 0
|
| | | self.Name = ""
|
| | | self.LV = 0
|
| | | self.ServerID = 0
|
| | | self.EmblemID = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.LeaderID = 0
|
| | | self.LeaderName = ""
|
| | | self.LeaderFace = 0
|
| | | self.LeaderFacePic = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 33
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.LV)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | data = CommFunc.WriteDWORD(data, self.EmblemID)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.LeaderID)
|
| | | data = CommFunc.WriteString(data, 33, self.LeaderName)
|
| | | data = CommFunc.WriteDWORD(data, self.LeaderFace)
|
| | | data = CommFunc.WriteDWORD(data, self.LeaderFacePic)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | FamilyID:%d,
|
| | | Name:%s,
|
| | | LV:%d,
|
| | | ServerID:%d,
|
| | | EmblemID:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | LeaderID:%d,
|
| | | LeaderName:%s,
|
| | | LeaderFace:%d,
|
| | | LeaderFacePic:%d
|
| | | '''\
|
| | | %(
|
| | | self.FamilyID,
|
| | | self.Name,
|
| | | self.LV,
|
| | | self.ServerID,
|
| | | self.EmblemID,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.LeaderID,
|
| | | self.LeaderName,
|
| | | self.LeaderFace,
|
| | | self.LeaderFacePic
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZActInfo(Structure):
|
| | | Head = tagHead()
|
| | | ServerInfoLen = 0 #(BYTE ServerInfoLen)
|
| | | ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
|
| | | ZoneID = 0 #(BYTE ZoneID)// 活动分区ID,公示期为0
|
| | | ActID = 0 #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | JoinFamilyCnt = 0 #(BYTE JoinFamilyCnt)// 参与仙盟数
|
| | | ActFlowID = 0 #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态
|
| | | GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示
|
| | | PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
|
| | | FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
|
| | | StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
|
| | | FamilyCount = 0 #(BYTE FamilyCount)
|
| | | ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x24
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
|
| | | self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FamilyCount):
|
| | | temActFamilyList = tagGCFamilyGCZActFamily()
|
| | | _pos = temActFamilyList.ReadData(_lpData, _pos)
|
| | | self.ActFamilyList.append(temActFamilyList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x24
|
| | | self.ServerInfoLen = 0
|
| | | self.ServerIDRangeInfo = ""
|
| | | self.ZoneID = 0
|
| | | self.ActID = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.JoinFamilyCnt = 0
|
| | | self.ActFlowID = 0
|
| | | self.GuessTemplateID = 0
|
| | | self.PersonalTemplateID = 0
|
| | | self.FamilyTemplateID = 0
|
| | | self.StateError = 0
|
| | | self.FamilyCount = 0
|
| | | self.ActFamilyList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.ServerIDRangeInfo)
|
| | | length += 1
|
| | | length += 4
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 2
|
| | | length += 2
|
| | | length += 2
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.FamilyCount):
|
| | | length += self.ActFamilyList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
|
| | | data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
|
| | | data = CommFunc.WriteBYTE(data, self.ZoneID)
|
| | | data = CommFunc.WriteDWORD(data, self.ActID)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt)
|
| | | data = CommFunc.WriteWORD(data, self.ActFlowID)
|
| | | data = CommFunc.WriteWORD(data, self.GuessTemplateID)
|
| | | data = CommFunc.WriteWORD(data, self.PersonalTemplateID)
|
| | | data = CommFunc.WriteWORD(data, self.FamilyTemplateID)
|
| | | data = CommFunc.WriteDWORD(data, self.StateError)
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyCount)
|
| | | for i in range(self.FamilyCount):
|
| | | data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ServerInfoLen:%d,
|
| | | ServerIDRangeInfo:%s,
|
| | | ZoneID:%d,
|
| | | ActID:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | JoinFamilyCnt:%d,
|
| | | ActFlowID:%d,
|
| | | GuessTemplateID:%d,
|
| | | PersonalTemplateID:%d,
|
| | | FamilyTemplateID:%d,
|
| | | StateError:%d,
|
| | | FamilyCount:%d,
|
| | | ActFamilyList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ServerInfoLen,
|
| | | self.ServerIDRangeInfo,
|
| | | self.ZoneID,
|
| | | self.ActID,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.JoinFamilyCnt,
|
| | | self.ActFlowID,
|
| | | self.GuessTemplateID,
|
| | | self.PersonalTemplateID,
|
| | | self.FamilyTemplateID,
|
| | | self.StateError,
|
| | | self.FamilyCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo
|
| | |
|
| | | class tagGCFamilyGCZBatCityInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("CityID", c_int), #城池ID
|
| | | ("CityLV", c_ubyte), #城池等级
|
| | | ("FamilyID", c_int), #所属仙盟ID,可能为0
|
| | | ("GuardID", c_int), #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁
|
| | | ("HP", c_int), #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败
|
| | | ("HPEx", c_int), #防守成员剩余生命,整除亿部分
|
| | | ("HPMax", c_int), #防守成员最大生命,求余亿部分
|
| | | ("HPMaxEx", c_int), #防守成员最大生命,整除亿部分
|
| | | ("AtkPlayerID", c_int), #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现
|
| | | ("AtkRet", c_ubyte), #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他
|
| | | ("KillCnt", c_ubyte), #本次攻击击杀防守人员数
|
| | | ("HurtValue", c_int), #伤害飘血,求余亿部分
|
| | | ("HurtValueEx", c_int), #伤害飘血,整除亿部分
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xC0
|
| | | self.SubCmd = 0x29
|
| | | 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 = 0xC0
|
| | | self.SubCmd = 0x29
|
| | | self.CityID = 0
|
| | | self.CityLV = 0
|
| | | self.FamilyID = 0
|
| | | self.GuardID = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | self.HPMax = 0
|
| | | self.HPMaxEx = 0
|
| | | self.AtkPlayerID = 0
|
| | | self.AtkRet = 0
|
| | | self.KillCnt = 0
|
| | | self.HurtValue = 0
|
| | | self.HurtValueEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZBatCityInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | CityID:%d,
|
| | | CityLV:%d,
|
| | | FamilyID:%d,
|
| | | GuardID:%d,
|
| | | HP:%d,
|
| | | HPEx:%d,
|
| | | HPMax:%d,
|
| | | HPMaxEx:%d,
|
| | | AtkPlayerID:%d,
|
| | | AtkRet:%d,
|
| | | KillCnt:%d,
|
| | | HurtValue:%d,
|
| | | HurtValueEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.CityID,
|
| | | self.CityLV,
|
| | | self.FamilyID,
|
| | | self.GuardID,
|
| | | self.HP,
|
| | | self.HPEx,
|
| | | self.HPMax,
|
| | | self.HPMaxEx,
|
| | | self.AtkPlayerID,
|
| | | self.AtkRet,
|
| | | self.KillCnt,
|
| | | self.HurtValue,
|
| | | self.HurtValueEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo
|
| | |
|
| | | class tagGCFamilyGCZBatGroup(Structure):
|
| | | GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A
|
| | | FamilyIDCnt = 0 #(BYTE FamilyIDCnt)
|
| | | FamilyIDList = list() #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FamilyIDCnt):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FamilyIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.GroupNum = 0
|
| | | self.FamilyIDCnt = 0
|
| | | self.FamilyIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4 * self.FamilyIDCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.GroupNum)
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyIDCnt)
|
| | | for i in range(self.FamilyIDCnt):
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | GroupNum:%d,
|
| | | FamilyIDCnt:%d,
|
| | | FamilyIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.GroupNum,
|
| | | self.FamilyIDCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBat(Structure):
|
| | | BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
|
| | | GroupCnt = 0 #(BYTE GroupCnt)// 分组数
|
| | | GroupList = list() #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.GroupCnt):
|
| | | temGroupList = tagGCFamilyGCZBatGroup()
|
| | | _pos = temGroupList.ReadData(_lpData, _pos)
|
| | | self.GroupList.append(temGroupList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.BatType = 0
|
| | | self.GroupCnt = 0
|
| | | self.GroupList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.GroupCnt):
|
| | | length += self.GroupList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.BatType)
|
| | | data = CommFunc.WriteBYTE(data, self.GroupCnt)
|
| | | for i in range(self.GroupCnt):
|
| | | data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | BatType:%d,
|
| | | GroupCnt:%d,
|
| | | GroupList:%s
|
| | | '''\
|
| | | %(
|
| | | self.BatType,
|
| | | self.GroupCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBatGroupInfo(Structure):
|
| | | Head = tagHead()
|
| | | RoundNum = 0 #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格
|
| | | BatTypeCnt = 0 #(BYTE BatTypeCnt)// 战场类型数
|
| | | BatList = list() #(vector<tagGCFamilyGCZBat> BatList)//战场列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x25
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.BatTypeCnt):
|
| | | temBatList = tagGCFamilyGCZBat()
|
| | | _pos = temBatList.ReadData(_lpData, _pos)
|
| | | self.BatList.append(temBatList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x25
|
| | | self.RoundNum = 0
|
| | | self.BatTypeCnt = 0
|
| | | self.BatList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.BatTypeCnt):
|
| | | length += self.BatList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.RoundNum)
|
| | | data = CommFunc.WriteBYTE(data, self.BatTypeCnt)
|
| | | for i in range(self.BatTypeCnt):
|
| | | data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | RoundNum:%d,
|
| | | BatTypeCnt:%d,
|
| | | BatList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.RoundNum,
|
| | | self.BatTypeCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport
|
| | |
|
| | | class tagGCFamilyGCZBatRepHurt(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("TagFamilyID", c_int), #目标仙盟ID
|
| | | ("HurtValue", c_int), #输出伤害,求余亿部分
|
| | | ("HurtValueEx", 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.TagFamilyID = 0
|
| | | self.HurtValue = 0
|
| | | self.HurtValueEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZBatRepHurt)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport:
|
| | | TagFamilyID:%d,
|
| | | HurtValue:%d,
|
| | | HurtValueEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.TagFamilyID,
|
| | | self.HurtValue,
|
| | | self.HurtValueEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBatReport(Structure):
|
| | | Head = tagHead()
|
| | | FamilyID = 0 #(DWORD FamilyID)// 战报仙盟ID
|
| | | DefRepCnt = 0 #(BYTE DefRepCnt)
|
| | | DefRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报
|
| | | AtkRepCnt = 0 #(BYTE AtkRepCnt)
|
| | | AtkRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x30
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.DefRepCnt):
|
| | | temDefRepList = tagGCFamilyGCZBatRepHurt()
|
| | | _pos = temDefRepList.ReadData(_lpData, _pos)
|
| | | self.DefRepList.append(temDefRepList)
|
| | | self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AtkRepCnt):
|
| | | temAtkRepList = tagGCFamilyGCZBatRepHurt()
|
| | | _pos = temAtkRepList.ReadData(_lpData, _pos)
|
| | | self.AtkRepList.append(temAtkRepList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x30
|
| | | self.FamilyID = 0
|
| | | self.DefRepCnt = 0
|
| | | self.DefRepList = list()
|
| | | self.AtkRepCnt = 0
|
| | | self.AtkRepList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.DefRepCnt):
|
| | | length += self.DefRepList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.AtkRepCnt):
|
| | | length += self.AtkRepList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteBYTE(data, self.DefRepCnt)
|
| | | for i in range(self.DefRepCnt):
|
| | | data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.AtkRepCnt)
|
| | | for i in range(self.AtkRepCnt):
|
| | | data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | FamilyID:%d,
|
| | | DefRepCnt:%d,
|
| | | DefRepList:%s,
|
| | | AtkRepCnt:%d,
|
| | | AtkRepList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.FamilyID,
|
| | | self.DefRepCnt,
|
| | | "...",
|
| | | self.AtkRepCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo
|
| | |
|
| | | class tagGCFamilyGCZBatScenePlayer(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)
|
| | | FacePic = 0 #(DWORD FacePic)
|
| | | FamilyID = 0 #(DWORD FamilyID)//所属仙盟ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.FamilyID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | FamilyID:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.FamilyID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBatSceneHurt(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("CityID", c_int), #被攻击的城池ID
|
| | | ("HurtValue", c_int), #伤害飘血,求余亿部分
|
| | | ("HurtValueEx", 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.CityID = 0
|
| | | self.HurtValue = 0
|
| | | self.HurtValueEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZBatSceneHurt)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
|
| | | CityID:%d,
|
| | | HurtValue:%d,
|
| | | HurtValueEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.CityID,
|
| | | self.HurtValue,
|
| | | self.HurtValueEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBatSceneCity(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("CityID", c_int), #城池ID
|
| | | ("CityLV", c_ubyte), #城池等级
|
| | | ("FamilyID", c_int), #所属仙盟ID,可能为0
|
| | | ("Rank", c_ubyte), #当前名次,从1开始
|
| | | ("HP", c_int), #剩余生命,求余亿部分,剩余生命为0时代表被摧毁
|
| | | ("HPEx", c_int), #剩余生命,整除亿部分
|
| | | ("HPMax", c_int), #最大生命,求余亿部分
|
| | | ("HPMaxEx", c_int), #最大生命,整除亿部分
|
| | | ("LastAtkedTime", c_int), #最后一次被攻击时间戳,可能为0
|
| | | ]
|
| | |
|
| | | 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.CityID = 0
|
| | | self.CityLV = 0
|
| | | self.FamilyID = 0
|
| | | self.Rank = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | self.HPMax = 0
|
| | | self.HPMaxEx = 0
|
| | | self.LastAtkedTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZBatSceneCity)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
|
| | | CityID:%d,
|
| | | CityLV:%d,
|
| | | FamilyID:%d,
|
| | | Rank:%d,
|
| | | HP:%d,
|
| | | HPEx:%d,
|
| | | HPMax:%d,
|
| | | HPMaxEx:%d,
|
| | | LastAtkedTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.CityID,
|
| | | self.CityLV,
|
| | | self.FamilyID,
|
| | | self.Rank,
|
| | | self.HP,
|
| | | self.HPEx,
|
| | | self.HPMax,
|
| | | self.HPMaxEx,
|
| | | self.LastAtkedTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZBatSceneInfo(Structure):
|
| | | Head = tagHead()
|
| | | BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
|
| | | GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A
|
| | | TopFamilyID = 0 #(DWORD TopFamilyID)// 伤害第一仙盟ID
|
| | | TopLeaderID = 0 #(DWORD TopLeaderID)// 伤害第一盟主ID
|
| | | TopPlayerID = 0 #(DWORD TopPlayerID)// 伤害第一玩家ID
|
| | | TopPlayerFamilyID = 0 #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID
|
| | | AtkPlayerID = 0 #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息
|
| | | AtkType = 0 #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效
|
| | | KillCnt = 0 #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效
|
| | | HurtCnt = 0 #(BYTE HurtCnt)
|
| | | HurtList = list() #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效
|
| | | CityCnt = 0 #(BYTE CityCnt)
|
| | | CityList = list() #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池
|
| | | PlayerCnt = 0 #(BYTE PlayerCnt)
|
| | | PlayerInfoList = list() #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x28
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.HurtCnt):
|
| | | temHurtList = tagGCFamilyGCZBatSceneHurt()
|
| | | _pos = temHurtList.ReadData(_lpData, _pos)
|
| | | self.HurtList.append(temHurtList)
|
| | | self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CityCnt):
|
| | | temCityList = tagGCFamilyGCZBatSceneCity()
|
| | | _pos = temCityList.ReadData(_lpData, _pos)
|
| | | self.CityList.append(temCityList)
|
| | | self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.PlayerCnt):
|
| | | temPlayerInfoList = tagGCFamilyGCZBatScenePlayer()
|
| | | _pos = temPlayerInfoList.ReadData(_lpData, _pos)
|
| | | self.PlayerInfoList.append(temPlayerInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x28
|
| | | self.BatType = 0
|
| | | self.GroupNum = 0
|
| | | self.TopFamilyID = 0
|
| | | self.TopLeaderID = 0
|
| | | self.TopPlayerID = 0
|
| | | self.TopPlayerFamilyID = 0
|
| | | self.AtkPlayerID = 0
|
| | | self.AtkType = 0
|
| | | self.KillCnt = 0
|
| | | self.HurtCnt = 0
|
| | | self.HurtList = list()
|
| | | self.CityCnt = 0
|
| | | self.CityList = list()
|
| | | self.PlayerCnt = 0
|
| | | self.PlayerInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.HurtCnt):
|
| | | length += self.HurtList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.CityCnt):
|
| | | length += self.CityList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.PlayerCnt):
|
| | | length += self.PlayerInfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.BatType)
|
| | | data = CommFunc.WriteBYTE(data, self.GroupNum)
|
| | | data = CommFunc.WriteDWORD(data, self.TopFamilyID)
|
| | | data = CommFunc.WriteDWORD(data, self.TopLeaderID)
|
| | | data = CommFunc.WriteDWORD(data, self.TopPlayerID)
|
| | | data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID)
|
| | | data = CommFunc.WriteDWORD(data, self.AtkPlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.AtkType)
|
| | | data = CommFunc.WriteBYTE(data, self.KillCnt)
|
| | | data = CommFunc.WriteBYTE(data, self.HurtCnt)
|
| | | for i in range(self.HurtCnt):
|
| | | data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.CityCnt)
|
| | | for i in range(self.CityCnt):
|
| | | data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.PlayerCnt)
|
| | | for i in range(self.PlayerCnt):
|
| | | data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | BatType:%d,
|
| | | GroupNum:%d,
|
| | | TopFamilyID:%d,
|
| | | TopLeaderID:%d,
|
| | | TopPlayerID:%d,
|
| | | TopPlayerFamilyID:%d,
|
| | | AtkPlayerID:%d,
|
| | | AtkType:%d,
|
| | | KillCnt:%d,
|
| | | HurtCnt:%d,
|
| | | HurtList:%s,
|
| | | CityCnt:%d,
|
| | | CityList:%s,
|
| | | PlayerCnt:%d,
|
| | | PlayerInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.BatType,
|
| | | self.GroupNum,
|
| | | self.TopFamilyID,
|
| | | self.TopLeaderID,
|
| | | self.TopPlayerID,
|
| | | self.TopPlayerFamilyID,
|
| | | self.AtkPlayerID,
|
| | | self.AtkType,
|
| | | self.KillCnt,
|
| | | self.HurtCnt,
|
| | | "...",
|
| | | self.CityCnt,
|
| | | "...",
|
| | | self.PlayerCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo
|
| | |
|
| | | class tagGCFamilyGCZCampMem(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])//参与玩家名字
|
| | | FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | FightPower = 0 #(DWORD FightPower)//战力,求余亿部分
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分
|
| | | HP = 0 #(DWORD HP)//剩余生命,求余亿部分
|
| | | HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分
|
| | | HPMax = 0 #(DWORD HPMax)//最大生命,求余亿部分
|
| | | HPMaxEx = 0 #(DWORD HPMaxEx)//最大生命,整除亿部分
|
| | | TotalHurt = 0 #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值
|
| | | TotalHurtEx = 0 #(DWORD TotalHurtEx)//活动总伤害,整除亿部分
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.FamilyLV = 0
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | self.HPMax = 0
|
| | | self.HPMaxEx = 0
|
| | | self.TotalHurt = 0
|
| | | self.TotalHurtEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyLV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.HP)
|
| | | data = CommFunc.WriteDWORD(data, self.HPEx)
|
| | | data = CommFunc.WriteDWORD(data, self.HPMax)
|
| | | data = CommFunc.WriteDWORD(data, self.HPMaxEx)
|
| | | data = CommFunc.WriteDWORD(data, self.TotalHurt)
|
| | | data = CommFunc.WriteDWORD(data, self.TotalHurtEx)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | FamilyLV:%d,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | HP:%d,
|
| | | HPEx:%d,
|
| | | HPMax:%d,
|
| | | HPMaxEx:%d,
|
| | | TotalHurt:%d,
|
| | | TotalHurtEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.FamilyLV,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.HP,
|
| | | self.HPEx,
|
| | | self.HPMax,
|
| | | self.HPMaxEx,
|
| | | self.TotalHurt,
|
| | | self.TotalHurtEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZCampRound(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RoundNum", c_ubyte), #轮次编号,从1开始
|
| | | ("BatType", c_ubyte), #所在战场类型
|
| | | ("GroupNum", c_ubyte), #所在分组编号
|
| | | ("Rank", c_ubyte), #本轮排名
|
| | | ("Score", c_ushort), #本轮积分,总积分为所有轮次累加
|
| | | ("UpdownState", c_ubyte), #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型
|
| | | ]
|
| | |
|
| | | 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.RoundNum = 0
|
| | | self.BatType = 0
|
| | | self.GroupNum = 0
|
| | | self.Rank = 0
|
| | | self.Score = 0
|
| | | self.UpdownState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZCampRound)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo:
|
| | | RoundNum:%d,
|
| | | BatType:%d,
|
| | | GroupNum:%d,
|
| | | Rank:%d,
|
| | | Score:%d,
|
| | | UpdownState:%d
|
| | | '''\
|
| | | %(
|
| | | self.RoundNum,
|
| | | self.BatType,
|
| | | self.GroupNum,
|
| | | self.Rank,
|
| | | self.Score,
|
| | | self.UpdownState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZCampInfo(Structure):
|
| | | Head = tagHead()
|
| | | FamilyID = 0 #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准
|
| | | CampLV = 0 #(WORD CampLV)//大本营当前等级
|
| | | CampExp = 0 #(DWORD CampExp)//大本营当前经验
|
| | | CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样
|
| | | HPBase = 0 #(DWORD HPBase)//基础生命,求余亿部分
|
| | | HPBaseEx = 0 #(DWORD HPBaseEx)//基础生命,整除亿部分
|
| | | HPMax = 0 #(DWORD HPMax)//总生命,求余亿部分
|
| | | HPMaxEx = 0 #(DWORD HPMaxEx)//总大生命,整除亿部分
|
| | | HP = 0 #(DWORD HP)//剩余生命,求余亿部分
|
| | | HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分
|
| | | RoundCnt = 0 #(BYTE RoundCnt)
|
| | | RoundInfoList = list() #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息
|
| | | DefMemCnt = 0 #(BYTE DefMemCnt)
|
| | | DefMemList = list() #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x26
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.RoundCnt):
|
| | | temRoundInfoList = tagGCFamilyGCZCampRound()
|
| | | _pos = temRoundInfoList.ReadData(_lpData, _pos)
|
| | | self.RoundInfoList.append(temRoundInfoList)
|
| | | self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.DefMemCnt):
|
| | | temDefMemList = tagGCFamilyGCZCampMem()
|
| | | _pos = temDefMemList.ReadData(_lpData, _pos)
|
| | | self.DefMemList.append(temDefMemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x26
|
| | | self.FamilyID = 0
|
| | | self.CampLV = 0
|
| | | self.CampExp = 0
|
| | | self.CityLV = 0
|
| | | self.HPBase = 0
|
| | | self.HPBaseEx = 0
|
| | | self.HPMax = 0
|
| | | self.HPMaxEx = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | self.RoundCnt = 0
|
| | | self.RoundInfoList = list()
|
| | | self.DefMemCnt = 0
|
| | | self.DefMemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 2
|
| | | length += 4
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.RoundCnt):
|
| | | length += self.RoundInfoList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.DefMemCnt):
|
| | | length += self.DefMemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteWORD(data, self.CampLV)
|
| | | data = CommFunc.WriteDWORD(data, self.CampExp)
|
| | | data = CommFunc.WriteWORD(data, self.CityLV)
|
| | | data = CommFunc.WriteDWORD(data, self.HPBase)
|
| | | data = CommFunc.WriteDWORD(data, self.HPBaseEx)
|
| | | data = CommFunc.WriteDWORD(data, self.HPMax)
|
| | | data = CommFunc.WriteDWORD(data, self.HPMaxEx)
|
| | | data = CommFunc.WriteDWORD(data, self.HP)
|
| | | data = CommFunc.WriteDWORD(data, self.HPEx)
|
| | | data = CommFunc.WriteBYTE(data, self.RoundCnt)
|
| | | for i in range(self.RoundCnt):
|
| | | data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.DefMemCnt)
|
| | | for i in range(self.DefMemCnt):
|
| | | data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | FamilyID:%d,
|
| | | CampLV:%d,
|
| | | CampExp:%d,
|
| | | CityLV:%d,
|
| | | HPBase:%d,
|
| | | HPBaseEx:%d,
|
| | | HPMax:%d,
|
| | | HPMaxEx:%d,
|
| | | HP:%d,
|
| | | HPEx:%d,
|
| | | RoundCnt:%d,
|
| | | RoundInfoList:%s,
|
| | | DefMemCnt:%d,
|
| | | DefMemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.FamilyID,
|
| | | self.CampLV,
|
| | | self.CampExp,
|
| | | self.CityLV,
|
| | | self.HPBase,
|
| | | self.HPBaseEx,
|
| | | self.HPMax,
|
| | | self.HPMaxEx,
|
| | | self.HP,
|
| | | self.HPEx,
|
| | | self.RoundCnt,
|
| | | "...",
|
| | | self.DefMemCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo
|
| | |
|
| | | class tagGCFamilyGCZContribution(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PlayerID", c_int), |
| | | ("ContributionValue", 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.PlayerID = 0
|
| | | self.ContributionValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZContribution)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo:
|
| | | PlayerID:%d,
|
| | | ContributionValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.ContributionValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZContributionInfo(Structure):
|
| | | Head = tagHead()
|
| | | ContriCnt = 0 #(BYTE ContriCnt)
|
| | | ContriList = list() #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x27
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.ContriCnt):
|
| | | temContriList = tagGCFamilyGCZContribution()
|
| | | _pos = temContriList.ReadData(_lpData, _pos)
|
| | | self.ContriList.append(temContriList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x27
|
| | | self.ContriCnt = 0
|
| | | self.ContriList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.ContriCnt):
|
| | | length += self.ContriList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ContriCnt)
|
| | | for i in range(self.ContriCnt):
|
| | | data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ContriCnt:%d,
|
| | | ContriList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ContriCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo
|
| | |
|
| | | class tagGCFamilyGCZGroupFamilyMemHurt(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])//参与玩家名字
|
| | | HurtValue = 0 #(DWORD HurtValue)//伤害,求余亿部分
|
| | | HurtValueEx = 0 #(DWORD HurtValueEx)//伤害,整除亿部分
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.HurtValue = 0
|
| | | self.HurtValueEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteDWORD(data, self.HurtValue)
|
| | | data = CommFunc.WriteDWORD(data, self.HurtValueEx)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | HurtValue:%d,
|
| | | HurtValueEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.HurtValue,
|
| | | self.HurtValueEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure):
|
| | | Head = tagHead()
|
| | | FamilyID = 0 #(DWORD FamilyID)//查看的目标仙盟ID
|
| | | HurtMemCnt = 0 #(BYTE HurtMemCnt)
|
| | | HurtMemList = list() #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x31
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.HurtMemCnt):
|
| | | temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt()
|
| | | _pos = temHurtMemList.ReadData(_lpData, _pos)
|
| | | self.HurtMemList.append(temHurtMemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x31
|
| | | self.FamilyID = 0
|
| | | self.HurtMemCnt = 0
|
| | | self.HurtMemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.HurtMemCnt):
|
| | | length += self.HurtMemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteBYTE(data, self.HurtMemCnt)
|
| | | for i in range(self.HurtMemCnt):
|
| | | data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | FamilyID:%d,
|
| | | HurtMemCnt:%d,
|
| | | HurtMemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.FamilyID,
|
| | | self.HurtMemCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo
|
| | |
|
| | | class tagGCFamilyGCZGuessFamily(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("FamilyID", c_int), #备选仙盟ID
|
| | | ("GuessValue", c_ushort), #竞猜热度值,玩家每次选择则加1,重复选择也算
|
| | | ]
|
| | |
|
| | | 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.FamilyID = 0
|
| | | self.GuessValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZGuessFamily)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
|
| | | FamilyID:%d,
|
| | | GuessValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.FamilyID,
|
| | | self.GuessValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZGuessRight(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("AwardID", c_ubyte), #奖励ID
|
| | | ("RightPlayerCnt", 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.AwardID = 0
|
| | | self.RightPlayerCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCFamilyGCZGuessRight)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
|
| | | AwardID:%d,
|
| | | RightPlayerCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.AwardID,
|
| | | self.RightPlayerCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyGCZGuessInfo(Structure):
|
| | | Head = tagHead()
|
| | | PlayerID = 0 #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视
|
| | | SelectCnt = 0 #(BYTE SelectCnt)
|
| | | SelectFamilyIDList = list() #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序
|
| | | FinalCnt = 0 #(BYTE FinalCnt)
|
| | | FinalFamilyIDList = list() #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值
|
| | | RightCnt = 0 #(BYTE RightCnt)
|
| | | RightInfoList = list() #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表
|
| | | FamilyCnt = 0 #(BYTE FamilyCnt)
|
| | | GuessFamilyList = list() #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x32
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SelectCnt):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SelectFamilyIDList.append(value)
|
| | | self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FinalCnt):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FinalFamilyIDList.append(value)
|
| | | self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.RightCnt):
|
| | | temRightInfoList = tagGCFamilyGCZGuessRight()
|
| | | _pos = temRightInfoList.ReadData(_lpData, _pos)
|
| | | self.RightInfoList.append(temRightInfoList)
|
| | | self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FamilyCnt):
|
| | | temGuessFamilyList = tagGCFamilyGCZGuessFamily()
|
| | | _pos = temGuessFamilyList.ReadData(_lpData, _pos)
|
| | | self.GuessFamilyList.append(temGuessFamilyList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x32
|
| | | self.PlayerID = 0
|
| | | self.SelectCnt = 0
|
| | | self.SelectFamilyIDList = list()
|
| | | self.FinalCnt = 0
|
| | | self.FinalFamilyIDList = list()
|
| | | self.RightCnt = 0
|
| | | self.RightInfoList = list()
|
| | | self.FamilyCnt = 0
|
| | | self.GuessFamilyList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | length += 4 * self.SelectCnt
|
| | | length += 1
|
| | | length += 4 * self.FinalCnt
|
| | | length += 1
|
| | | for i in range(self.RightCnt):
|
| | | length += self.RightInfoList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.FamilyCnt):
|
| | | length += self.GuessFamilyList[i].GetLength()
|
| | |
|
| | | 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.SelectCnt)
|
| | | for i in range(self.SelectCnt):
|
| | | data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.FinalCnt)
|
| | | for i in range(self.FinalCnt):
|
| | | data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.RightCnt)
|
| | | for i in range(self.RightCnt):
|
| | | data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyCnt)
|
| | | for i in range(self.FamilyCnt):
|
| | | data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | PlayerID:%d,
|
| | | SelectCnt:%d,
|
| | | SelectFamilyIDList:%s,
|
| | | FinalCnt:%d,
|
| | | FinalFamilyIDList:%s,
|
| | | RightCnt:%d,
|
| | | RightInfoList:%s,
|
| | | FamilyCnt:%d,
|
| | | GuessFamilyList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.PlayerID,
|
| | | self.SelectCnt,
|
| | | "...",
|
| | | self.FinalCnt,
|
| | | "...",
|
| | | self.RightCnt,
|
| | | "...",
|
| | | self.FamilyCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_ushort),
|
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ("FuncMapID", c_ushort), #功能地图ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x26
|
| | | self.MapID = 0
|
| | | self.FuncLineID = 0
|
| | | self.FuncMapID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MapID:%d,
|
| | | FuncLineID:%d
|
| | | FuncLineID:%d,
|
| | | FuncMapID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MapID,
|
| | | self.FuncLineID
|
| | | self.FuncLineID,
|
| | | self.FuncMapID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_int),
|
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ("FuncMapID", c_ushort), #功能地图ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x27
|
| | | self.MapID = 0
|
| | | self.FuncLineID = 0
|
| | | self.FuncMapID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MapID:%d,
|
| | | FuncLineID:%d
|
| | | FuncLineID:%d,
|
| | | FuncMapID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MapID,
|
| | | self.FuncLineID
|
| | | self.FuncLineID,
|
| | | self.FuncMapID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), #果实物品ID
|
| | | ("EatCnt", c_ushort), #已使用个数
|
| | | ("EatCnt", c_int), #已使用个数
|
| | | ("ItemAddCnt", c_int), #增幅丹增加上限
|
| | | ("ItemBreakCnt", c_int), #增幅丹突破次数
|
| | | ]
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MfpType", c_ubyte), #模块编号类型
|
| | | ("FightPower", c_int), #本模块战斗力
|
| | | ("FightPower", c_int), #本模块战斗力,求余亿部分
|
| | | ("FightPowerEx", c_int), #本模块战斗力,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.MfpType = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo:
|
| | | MfpType:%d,
|
| | | FightPower:%d
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.MfpType,
|
| | | self.FightPower
|
| | | self.FightPower,
|
| | | self.FightPowerEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | #------------------------------------------------------
|
| | | # A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | class tagMCSyncRealmTask(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsPass", c_ubyte), #是否通关副本
|
| | | ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
|
| | | ("TaskID", c_ubyte), |
| | | ("TaskValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x11
|
| | | self.IsPass = 0
|
| | | self.XXZLAwardState = 0
|
| | | self.TaskID = 0
|
| | | self.TaskValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSyncRealmInfo)
|
| | | return sizeof(tagMCSyncRealmTask)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | IsPass:%d,
|
| | | XXZLAwardState:%d
|
| | | TaskID:%d,
|
| | | TaskValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.IsPass,
|
| | | self.XXZLAwardState
|
| | | self.TaskID,
|
| | | self.TaskValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSyncRealmInfo(Structure):
|
| | | Head = tagHead()
|
| | | TaskAwardState = 0 #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
|
| | | TaskValueCount = 0 #(BYTE TaskValueCount)
|
| | | TaskValueList = list() #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskValueCount):
|
| | | temTaskValueList = tagMCSyncRealmTask()
|
| | | _pos = temTaskValueList.ReadData(_lpData, _pos)
|
| | | self.TaskValueList.append(temTaskValueList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x11
|
| | | self.TaskAwardState = 0
|
| | | self.TaskValueCount = 0
|
| | | self.TaskValueList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.TaskValueCount):
|
| | | length += self.TaskValueList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.TaskAwardState)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskValueCount)
|
| | | for i in range(self.TaskValueCount):
|
| | | data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | TaskAwardState:%d,
|
| | | TaskValueCount:%d,
|
| | | TaskValueList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.TaskAwardState,
|
| | | self.TaskValueCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | TreasureType = 0 #(BYTE TreasureType)//寻宝类型
|
| | | LuckValue = 0 #(WORD LuckValue)//当前幸运值
|
| | | TreasureCount = 0 #(DWORD TreasureCount)//已寻宝总次数
|
| | | TreasureCountToday = 0 #(DWORD TreasureCountToday)//今日已寻宝总次数
|
| | | FreeCountToday = 0 #(WORD FreeCountToday)//今日已免费寻宝次数
|
| | | TreasureCntAward = 0 #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
|
| | | GridLimitCnt = 0 #(BYTE GridLimitCnt)
|
| | |
| | | self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TreasureCountToday,_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.TreasureType = 0
|
| | | self.LuckValue = 0
|
| | | self.TreasureCount = 0
|
| | | self.TreasureCountToday = 0
|
| | | self.FreeCountToday = 0
|
| | | self.TreasureCntAward = 0
|
| | | self.GridLimitCnt = 0
|
| | |
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += 4
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.TreasureType)
|
| | | data = CommFunc.WriteWORD(data, self.LuckValue)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCount)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCountToday)
|
| | | data = CommFunc.WriteWORD(data, self.FreeCountToday)
|
| | | data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
|
| | | data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
|
| | |
| | | TreasureType:%d,
|
| | | LuckValue:%d,
|
| | | TreasureCount:%d,
|
| | | TreasureCountToday:%d,
|
| | | FreeCountToday:%d,
|
| | | TreasureCntAward:%d,
|
| | | GridLimitCnt:%d,
|
| | |
| | | self.TreasureType,
|
| | | self.LuckValue,
|
| | | self.TreasureCount,
|
| | | self.TreasureCountToday,
|
| | | self.FreeCountToday,
|
| | | self.TreasureCntAward,
|
| | | self.GridLimitCnt,
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemIndex", c_int),
|
| | | ("BuyCnt", c_ushort), # 今日已购买次数
|
| | | ("BuyCnt", c_int), # 今日已购买次数
|
| | | ("IsReset", c_ubyte), #是否重置
|
| | | ]
|
| | |
|
| | |
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | AwardCount = 0 #(BYTE AwardCount)
|
| | | AwardInfoList = list() #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表
|
| | | CTGIDCount = 0 #(BYTE CTGIDCount)
|
| | | CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加
|
| | | ShopType = 0 #(WORD ShopType)// 开放商店类型
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | temAwardInfoList = tagMCActFamilyCTGAssistAward()
|
| | | _pos = temAwardInfoList.ReadData(_lpData, _pos)
|
| | | self.AwardInfoList.append(temAwardInfoList)
|
| | | self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CTGIDCount):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | self.CTGIDList.append(value)
|
| | | self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.LimitLV = 0
|
| | | self.AwardCount = 0
|
| | | self.AwardInfoList = list()
|
| | | self.CTGIDCount = 0
|
| | | self.CTGIDList = list()
|
| | | self.ShopType = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | for i in range(self.AwardCount):
|
| | | length += self.AwardInfoList[i].GetLength()
|
| | | length += 1
|
| | | length += 2 * self.CTGIDCount
|
| | | length += 2
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.AwardCount)
|
| | | for i in range(self.AwardCount):
|
| | | data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.CTGIDCount)
|
| | | for i in range(self.CTGIDCount):
|
| | | data = CommFunc.WriteWORD(data, self.CTGIDList[i])
|
| | | data = CommFunc.WriteWORD(data, self.ShopType)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | IsDayReset:%d,
|
| | | LimitLV:%d,
|
| | | AwardCount:%d,
|
| | | AwardInfoList:%s
|
| | | AwardInfoList:%s,
|
| | | CTGIDCount:%d,
|
| | | CTGIDList:%s,
|
| | | ShopType:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.IsDayReset,
|
| | | self.LimitLV,
|
| | | self.AwardCount,
|
| | | "..."
|
| | | "...",
|
| | | self.CTGIDCount,
|
| | | "...",
|
| | | self.ShopType
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
|
| | |
|
| | | class tagMCCrossActLianqiItem(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(tagMCCrossActLianqiItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 90 炼器跨服活动信息 //tagMCCrossActLianqiInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCCrossActLianqiAwardEx(Structure):
|
| | | NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分
|
| | | Count = 0 #(BYTE Count)// 额外奖励物品数
|
| | | AwardItemList = list() #(vector<tagMCCrossActLianqiItem> AwardItemList)// 额外奖励物品列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temAwardItemList = tagMCCrossActLianqiItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.NeedScore = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.NeedScore)
|
| | | 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 = '''
|
| | | NeedScore:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.NeedScore,
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCCrossActLianqiBillard(Structure):
|
| | | Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
|
| | | Count = 0 #(BYTE Count)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagMCCrossActLianqiItem> AwardItemList)// 奖励物品列表
|
| | | NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分
|
| | | CountEx = 0 #(BYTE CountEx)// 额外奖励数
|
| | | AwardItemExList = list() #(vector<tagMCCrossActLianqiAwardEx> AwardItemExList)// 额外奖励列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temAwardItemList = tagMCCrossActLianqiItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CountEx):
|
| | | temAwardItemExList = tagMCCrossActLianqiAwardEx()
|
| | | _pos = temAwardItemExList.ReadData(_lpData, _pos)
|
| | | self.AwardItemExList.append(temAwardItemExList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Rank = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | self.NeedScore = 0
|
| | | self.CountEx = 0
|
| | | self.AwardItemExList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.CountEx):
|
| | | length += self.AwardItemExList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.Rank)
|
| | | 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.WriteDWORD(data, self.NeedScore)
|
| | | data = CommFunc.WriteBYTE(data, self.CountEx)
|
| | | for i in range(self.CountEx):
|
| | | data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Rank:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s,
|
| | | NeedScore:%d,
|
| | | CountEx:%d,
|
| | | AwardItemExList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Rank,
|
| | | self.Count,
|
| | | "...",
|
| | | self.NeedScore,
|
| | | self.CountEx,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCCrossActLianqiInfo(Structure):
|
| | | Head = tagHead()
|
| | | ServerInfoLen = 0 #(BYTE ServerInfoLen)
|
| | | ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
|
| | | GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss
|
| | | JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | PersonalBillCount = 0 #(BYTE PersonalBillCount)
|
| | | PersonalBillboardInfoList = list() #(vector<tagMCCrossActLianqiBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x90
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
|
| | | self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
|
| | | self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.PersonalBillCount):
|
| | | temPersonalBillboardInfoList = tagMCCrossActLianqiBillard()
|
| | | _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
|
| | | self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x90
|
| | | self.ServerInfoLen = 0
|
| | | self.ServerIDRangeInfo = ""
|
| | | self.GroupValue1 = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.JoinStartTime = ""
|
| | | self.JoinEndTime = ""
|
| | | self.LimitLV = 0
|
| | | self.PersonalBillCount = 0
|
| | | self.PersonalBillboardInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.ServerIDRangeInfo)
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 5
|
| | | length += 5
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.PersonalBillCount):
|
| | | length += self.PersonalBillboardInfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
|
| | | data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
|
| | | data = CommFunc.WriteBYTE(data, self.GroupValue1)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteString(data, 5, self.JoinStartTime)
|
| | | data = CommFunc.WriteString(data, 5, self.JoinEndTime)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
|
| | | for i in range(self.PersonalBillCount):
|
| | | data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ServerInfoLen:%d,
|
| | | ServerIDRangeInfo:%s,
|
| | | GroupValue1:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | JoinStartTime:%s,
|
| | | JoinEndTime:%s,
|
| | | LimitLV:%d,
|
| | | PersonalBillCount:%d,
|
| | | PersonalBillboardInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ServerInfoLen,
|
| | | self.ServerIDRangeInfo,
|
| | | self.GroupValue1,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.JoinStartTime,
|
| | | self.JoinEndTime,
|
| | | self.LimitLV,
|
| | | self.PersonalBillCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCCrossActLianqiInfo=tagMCCrossActLianqiInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActLianqiInfo.Head.Cmd,m_NAtagMCCrossActLianqiInfo.Head.SubCmd))] = m_NAtagMCCrossActLianqiInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 91 炼器活动玩家信息 #tagMCActLianqiPlayerInfo
|
| | |
|
| | | class tagMCActLianqiTileMove(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Row", c_ubyte), # 行,0为第1行
|
| | | ("Col", c_ubyte), # 列,0为第1列
|
| | | ("ToRow", c_ubyte), # 移动到目标行
|
| | | ("ToCol", 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.Row = 0
|
| | | self.Col = 0
|
| | | self.ToRow = 0
|
| | | self.ToCol = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCActLianqiTileMove)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 91 炼器活动玩家信息 //tagMCActLianqiPlayerInfo:
|
| | | Row:%d,
|
| | | Col:%d,
|
| | | ToRow:%d,
|
| | | ToCol:%d
|
| | | '''\
|
| | | %(
|
| | | self.Row,
|
| | | self.Col,
|
| | | self.ToRow,
|
| | | self.ToCol
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActLianqiPlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | Score = 0 #(DWORD Score)// 当前活动积分
|
| | | ScoreHighest = 0 #(DWORD ScoreHighest)// 当前活动最高积分,即上榜积分
|
| | | Energy = 0 #(WORD Energy)// 当前体力
|
| | | EnergyTime = 0 #(DWORD EnergyTime)// 上次恢复体力时间戳,为0时不用处理倒计时
|
| | | LVAwardMax = 0 #(DWORD LVAwardMax)// 已激活的最大合成奖励等级
|
| | | LVAwardState = 0 #(DWORD LVAwardState)// 最大合成等级奖励领取记录,按等级二进制位存储是否已领取
|
| | | UseItemLen = 0 #(BYTE UseItemLen)
|
| | | UseItemCntList = list() #(vector<WORD> UseItemCntList)// 本局已使用辅助道具次数 [辅助道具1使用次数, ...]
|
| | | GridDataLen = 0 #(BYTE GridDataLen)// 格子数据长度
|
| | | GridData = "" #(String GridData)// 格子二维行列数据,一定会同步,直接替换,行从上往下排 [[第1行格子1,格子2, ...], ...]
|
| | | OPType = 0 #(BYTE OPType)// 0-无(如初始化,GM等后端直接设置);1-移动;2-使用道具;3-重新开始;如果是因为操作引起的格子数据变化,则在相关操作表现完毕后再展示最新行列数据,否则直接变更
|
| | | MoveCount = 0 #(BYTE MoveCount)
|
| | | MoveList = list() #(vector<tagMCActLianqiTileMove> MoveList)// 图块移动列表,可能没有数据,有的话先表现移动
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x91
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ScoreHighest,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LVAwardMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LVAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.UseItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.UseItemLen):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | self.UseItemCntList.append(value)
|
| | | self.GridDataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GridData,_pos = CommFunc.ReadString(_lpData, _pos,self.GridDataLen)
|
| | | self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.MoveCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MoveCount):
|
| | | temMoveList = tagMCActLianqiTileMove()
|
| | | _pos = temMoveList.ReadData(_lpData, _pos)
|
| | | self.MoveList.append(temMoveList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x91
|
| | | self.Score = 0
|
| | | self.ScoreHighest = 0
|
| | | self.Energy = 0
|
| | | self.EnergyTime = 0
|
| | | self.LVAwardMax = 0
|
| | | self.LVAwardState = 0
|
| | | self.UseItemLen = 0
|
| | | self.UseItemCntList = list()
|
| | | self.GridDataLen = 0
|
| | | self.GridData = ""
|
| | | self.OPType = 0
|
| | | self.MoveCount = 0
|
| | | self.MoveList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2 * self.UseItemLen
|
| | | length += 1
|
| | | length += len(self.GridData)
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.MoveCount):
|
| | | length += self.MoveList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | | data = CommFunc.WriteDWORD(data, self.ScoreHighest)
|
| | | data = CommFunc.WriteWORD(data, self.Energy)
|
| | | data = CommFunc.WriteDWORD(data, self.EnergyTime)
|
| | | data = CommFunc.WriteDWORD(data, self.LVAwardMax)
|
| | | data = CommFunc.WriteDWORD(data, self.LVAwardState)
|
| | | data = CommFunc.WriteBYTE(data, self.UseItemLen)
|
| | | for i in range(self.UseItemLen):
|
| | | data = CommFunc.WriteWORD(data, self.UseItemCntList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.GridDataLen)
|
| | | data = CommFunc.WriteString(data, self.GridDataLen, self.GridData)
|
| | | data = CommFunc.WriteBYTE(data, self.OPType)
|
| | | data = CommFunc.WriteBYTE(data, self.MoveCount)
|
| | | for i in range(self.MoveCount):
|
| | | data = CommFunc.WriteString(data, self.MoveList[i].GetLength(), self.MoveList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Score:%d,
|
| | | ScoreHighest:%d,
|
| | | Energy:%d,
|
| | | EnergyTime:%d,
|
| | | LVAwardMax:%d,
|
| | | LVAwardState:%d,
|
| | | UseItemLen:%d,
|
| | | UseItemCntList:%s,
|
| | | GridDataLen:%d,
|
| | | GridData:%s,
|
| | | OPType:%d,
|
| | | MoveCount:%d,
|
| | | MoveList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Score,
|
| | | self.ScoreHighest,
|
| | | self.Energy,
|
| | | self.EnergyTime,
|
| | | self.LVAwardMax,
|
| | | self.LVAwardState,
|
| | | self.UseItemLen,
|
| | | "...",
|
| | | self.GridDataLen,
|
| | | self.GridData,
|
| | | self.OPType,
|
| | | self.MoveCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo
|
| | |
|
| | | class tagMCCrossActXianXiaMJItem(Structure):
|
| | |
| | | ("CampaignType", c_ubyte), #奖励类型
|
| | | ("BillAwardRecord", c_ubyte), #排行奖励是否已领取
|
| | | ("TagAwardRecord", c_int), #目标奖励索引位领取记录:0-未领;1-已领
|
| | | ("RecordData", c_int), #活动时的记录值
|
| | | ("RecordData", c_int), #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则
|
| | | ("RecordDataEx", c_int), #活动时的记录值,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BillAwardRecord = 0
|
| | | self.TagAwardRecord = 0
|
| | | self.RecordData = 0
|
| | | self.RecordDataEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | CampaignType:%d,
|
| | | BillAwardRecord:%d,
|
| | | TagAwardRecord:%d,
|
| | | RecordData:%d
|
| | | RecordData:%d,
|
| | | RecordDataEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.CampaignType,
|
| | | self.BillAwardRecord,
|
| | | self.TagAwardRecord,
|
| | | self.RecordData
|
| | | self.RecordData,
|
| | | self.RecordDataEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | EnergyUsed = 0 #(WORD EnergyUsed)// 今日已消耗体力
|
| | | RefreshCount = 0 #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新
|
| | | RefreshCountSuper = 0 #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新
|
| | | RefreshCountRob = 0 #(WORD RefreshCountRob)// 今日福地刷新周围玩家次数
|
| | | TreasureCount = 0 #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n
|
| | | TreasureState = list() #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...]
|
| | | TreasureAward = list() #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...]
|
| | | TreasureProgress = list() #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100
|
| | | HelpAwardCount = 0 #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数
|
| | | HousekeeperEndTime = 0 #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RefreshCountRob,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TreasureCount):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | |
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.TreasureProgress.append(value)
|
| | | self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.EnergyUsed = 0
|
| | | self.RefreshCount = 0
|
| | | self.RefreshCountSuper = 0
|
| | | self.RefreshCountRob = 0
|
| | | self.TreasureCount = 0
|
| | | self.TreasureState = list()
|
| | | self.TreasureAward = list()
|
| | | self.TreasureProgress = list()
|
| | | self.HelpAwardCount = 0
|
| | | self.HousekeeperEndTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 1 * self.TreasureCount
|
| | | length += 1 * self.TreasureCount
|
| | | length += 1 * self.TreasureCount
|
| | | length += 1
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteWORD(data, self.EnergyUsed)
|
| | | data = CommFunc.WriteDWORD(data, self.RefreshCount)
|
| | | data = CommFunc.WriteBYTE(data, self.RefreshCountSuper)
|
| | | data = CommFunc.WriteWORD(data, self.RefreshCountRob)
|
| | | data = CommFunc.WriteBYTE(data, self.TreasureCount)
|
| | | for i in range(self.TreasureCount):
|
| | | data = CommFunc.WriteBYTE(data, self.TreasureState[i])
|
| | |
| | | for i in range(self.TreasureCount):
|
| | | data = CommFunc.WriteBYTE(data, self.TreasureProgress[i])
|
| | | data = CommFunc.WriteBYTE(data, self.HelpAwardCount)
|
| | | data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | EnergyUsed:%d,
|
| | | RefreshCount:%d,
|
| | | RefreshCountSuper:%d,
|
| | | RefreshCountRob:%d,
|
| | | TreasureCount:%d,
|
| | | TreasureState:%s,
|
| | | TreasureAward:%s,
|
| | | TreasureProgress:%s,
|
| | | HelpAwardCount:%d
|
| | | HelpAwardCount:%d,
|
| | | HousekeeperEndTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.EnergyUsed,
|
| | | self.RefreshCount,
|
| | | self.RefreshCountSuper,
|
| | | self.RefreshCountRob,
|
| | | self.TreasureCount,
|
| | | "...",
|
| | | "...",
|
| | | "...",
|
| | | self.HelpAwardCount
|
| | | self.HelpAwardCount,
|
| | | self.HousekeeperEndTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型
|
| | | IsActivite = 0 #(BYTE IsActivite)// 普通战令是否已激活
|
| | | IsActiviteH = 0 #(BYTE IsActiviteH)// 高级战令是否已激活
|
| | | AllFinishTime = 0 #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可
|
| | | Value1 = 0 #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
|
| | | RewardCount = 0 #(WORD RewardCount)
|
| | | RewardList = list() #(vector<tagMCZhanling> RewardList)
|
| | |
| | | self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.RewardCount):
|
| | |
| | | self.ZhanlingType = 0
|
| | | self.IsActivite = 0
|
| | | self.IsActiviteH = 0
|
| | | self.AllFinishTime = 0
|
| | | self.Value1 = 0
|
| | | self.RewardCount = 0
|
| | | self.RewardList = list()
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | for i in range(self.RewardCount):
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.ZhanlingType)
|
| | | data = CommFunc.WriteBYTE(data, self.IsActivite)
|
| | | data = CommFunc.WriteBYTE(data, self.IsActiviteH)
|
| | | data = CommFunc.WriteDWORD(data, self.AllFinishTime)
|
| | | data = CommFunc.WriteDWORD(data, self.Value1)
|
| | | data = CommFunc.WriteWORD(data, self.RewardCount)
|
| | | for i in range(self.RewardCount):
|
| | |
| | | ZhanlingType:%d,
|
| | | IsActivite:%d,
|
| | | IsActiviteH:%d,
|
| | | AllFinishTime:%d,
|
| | | Value1:%d,
|
| | | RewardCount:%d,
|
| | | RewardList:%s
|
| | |
| | | self.ZhanlingType,
|
| | | self.IsActivite,
|
| | | self.IsActiviteH,
|
| | | self.AllFinishTime,
|
| | | self.Value1,
|
| | | self.RewardCount,
|
| | | "..."
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C1 10 仙盟攻城战玩家信息 #tagMCFamilyGCZPlayerInfo
|
| | |
|
| | | class tagMCFamilyGCZPlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ContributionCnt", c_ubyte), # 轮次低级捐献已捐献次数,轮次变更时会重置
|
| | | ("Energy", c_ubyte), # 当前可用免费体力
|
| | | ("EnergyTime", c_int), # 上次恢复免费体力时间戳,为0时不再恢复
|
| | | ("AwardState", c_int), # 活动奖励领取状态,按二进制位判断是否已领取,0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励;
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xC1
|
| | | self.SubCmd = 0x10
|
| | | 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 = 0xC1
|
| | | self.SubCmd = 0x10
|
| | | self.ContributionCnt = 0
|
| | | self.Energy = 0
|
| | | self.EnergyTime = 0
|
| | | self.AwardState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFamilyGCZPlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C1 10 仙盟攻城战玩家信息 //tagMCFamilyGCZPlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ContributionCnt:%d,
|
| | | Energy:%d,
|
| | | EnergyTime:%d,
|
| | | AwardState:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ContributionCnt,
|
| | | self.Energy,
|
| | | self.EnergyTime,
|
| | | self.AwardState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFamilyGCZPlayerInfo=tagMCFamilyGCZPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZPlayerInfo.Cmd,m_NAtagMCFamilyGCZPlayerInfo.SubCmd))] = m_NAtagMCFamilyGCZPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C1 11 仙盟攻城战圣泉信息 #tagMCFamilyGCZSQInfo
|
| | |
|
| | | class tagMCFamilyGCZSQGrid(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("GridNum", c_ubyte), # 格子编号,1~n |
| | | ("ItemID", c_int), # 抽中的物品ID,20亿时为过关标记
|
| | | ("ItemCount", 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.GridNum = 0
|
| | | self.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFamilyGCZSQGrid)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C1 11 仙盟攻城战圣泉信息 //tagMCFamilyGCZSQInfo:
|
| | | GridNum:%d,
|
| | | ItemID:%d,
|
| | | ItemCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.GridNum,
|
| | | self.ItemID,
|
| | | self.ItemCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCFamilyGCZSQInfo(Structure):
|
| | | Head = tagHead()
|
| | | SQLayer = 0 #(BYTE SQLayer)// 当前所在圣泉层,从1开始
|
| | | SQGirdCnt = 0 #(BYTE SQGirdCnt)
|
| | | SQGridList = list() #(vector<tagMCFamilyGCZSQGrid> SQGridList)//圣泉当前层已抽格子信息,仅同步全部或变更的格子,前端进行差异更新,层数变更时重置本地记录
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC1
|
| | | self.Head.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.SQLayer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SQGirdCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SQGirdCnt):
|
| | | temSQGridList = tagMCFamilyGCZSQGrid()
|
| | | _pos = temSQGridList.ReadData(_lpData, _pos)
|
| | | self.SQGridList.append(temSQGridList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC1
|
| | | self.Head.SubCmd = 0x11
|
| | | self.SQLayer = 0
|
| | | self.SQGirdCnt = 0
|
| | | self.SQGridList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.SQGirdCnt):
|
| | | length += self.SQGridList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.SQLayer)
|
| | | data = CommFunc.WriteBYTE(data, self.SQGirdCnt)
|
| | | for i in range(self.SQGirdCnt):
|
| | | data = CommFunc.WriteString(data, self.SQGridList[i].GetLength(), self.SQGridList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | SQLayer:%d,
|
| | | SQGirdCnt:%d,
|
| | | SQGridList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.SQLayer,
|
| | | self.SQGirdCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
|
| | |
|
| | | class tagMCLuckyCloudBuyPlayerInfo(Structure):
|