| | |
| | | GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示
|
| | | PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
|
| | | FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
|
| | | StateError = 0 #(BYTE StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
|
| | | StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
|
| | | FamilyCount = 0 #(BYTE FamilyCount)
|
| | | ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单
|
| | | data = None
|
| | |
| | | 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.ReadBYTE(_lpData, _pos)
|
| | | self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FamilyCount):
|
| | | temActFamilyList = tagGCFamilyGCZActFamily()
|
| | |
| | | length += 2
|
| | | length += 2
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.FamilyCount):
|
| | | length += self.ActFamilyList[i].GetLength()
|
| | |
| | | data = CommFunc.WriteWORD(data, self.GuessTemplateID)
|
| | | data = CommFunc.WriteWORD(data, self.PersonalTemplateID)
|
| | | data = CommFunc.WriteWORD(data, self.FamilyTemplateID)
|
| | | data = CommFunc.WriteBYTE(data, self.StateError)
|
| | | 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 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为准
|
| | | Score = 0 #(WORD Score)//活动总积分,如果不在榜上则读该值
|
| | | CampLV = 0 #(WORD CampLV)//大本营当前等级
|
| | | CampExp = 0 #(DWORD CampExp)//大本营当前经验
|
| | | CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样
|
| | |
| | | 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
|
| | |
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.CityLV,_pos = CommFunc.ReadWORD(_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()
|
| | |
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x26
|
| | | self.FamilyID = 0
|
| | | self.Score = 0
|
| | | self.CampLV = 0
|
| | | self.CampExp = 0
|
| | | self.CityLV = 0
|
| | |
| | | self.HPMaxEx = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | self.RoundCnt = 0
|
| | | self.RoundInfoList = list()
|
| | | self.DefMemCnt = 0
|
| | | self.DefMemList = list()
|
| | | return
|
| | |
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 2
|
| | | length += 2
|
| | | length += 4
|
| | | length += 2
|
| | |
| | | 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()
|
| | |
|
| | |
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.FamilyID)
|
| | | data = CommFunc.WriteWORD(data, self.Score)
|
| | | data = CommFunc.WriteWORD(data, self.CampLV)
|
| | | data = CommFunc.WriteDWORD(data, self.CampExp)
|
| | | data = CommFunc.WriteWORD(data, self.CityLV)
|
| | |
| | | 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())
|
| | |
| | | DumpString = '''
|
| | | Head:%s,
|
| | | FamilyID:%d,
|
| | | Score:%d,
|
| | | CampLV:%d,
|
| | | CampExp:%d,
|
| | | CityLV:%d,
|
| | |
| | | HPMaxEx:%d,
|
| | | HP:%d,
|
| | | HPEx:%d,
|
| | | RoundCnt:%d,
|
| | | RoundInfoList:%s,
|
| | | DefMemCnt:%d,
|
| | | DefMemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.FamilyID,
|
| | | self.Score,
|
| | | self.CampLV,
|
| | | self.CampExp,
|
| | | self.CityLV,
|
| | |
| | | self.HPMaxEx,
|
| | | self.HP,
|
| | | self.HPEx,
|
| | | self.RoundCnt,
|
| | | "...",
|
| | | self.DefMemCnt,
|
| | | "..."
|
| | | )
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|