From 27a35e96b8a8bcedc8d28a561b31bb4b9306c2cd Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 05 七月 2024 16:33:18 +0800 Subject: [PATCH] 10198 【香港】【越南】【主干】【砍树】【后端】BOSS凭证优化(优化凭证转化: 活动开始后到参与结束都不转化,包含活动开始参与前;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 704 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 695 insertions(+), 9 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index f53ab2e..a78b626 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -424,6 +424,190 @@ #------------------------------------------------------ +# A0 08 玩家记录信息 #tagGCPlayerRecInfo + +class tagGCPlayerRec(Structure): + Time = 0 #(DWORD Time)//时间 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + Value3 = 0 #(DWORD Value3)//值3 + Value4 = 0 #(DWORD Value4)//值4 + Value5 = 0 #(DWORD Value5)//值5 + Value6 = 0 #(DWORD Value6)//值6 + Value7 = 0 #(DWORD Value7)//值7 + Value8 = 0 #(DWORD Value8)//值8 + UserDataLen = 0 #(WORD UserDataLen)//扩展数据长度 + UserData = "" #(String UserData)//扩展数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.Time = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + Time:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.Time, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCPlayerRecInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//类型 + Count = 0 #(WORD Count)//数量 + PlayerRecList = list() #(vector<tagGCPlayerRec> PlayerRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayerRecList = tagGCPlayerRec() + _pos = temPlayerRecList.ReadData(_lpData, _pos) + self.PlayerRecList.append(temPlayerRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + self.Type = 0 + self.Count = 0 + self.PlayerRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.Count): + length += self.PlayerRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PlayerRecList[i].GetLength(), self.PlayerRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + Count:%d, + PlayerRecList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCPlayerRecInfo=tagGCPlayerRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerRecInfo.Head.Cmd,m_NAtagGCPlayerRecInfo.Head.SubCmd))] = m_NAtagGCPlayerRecInfo + + +#------------------------------------------------------ # A0 06 服务器地图线路人数状态 #tagGCPyServerMapState class tagGCPyServerMapLineState(Structure): @@ -4608,7 +4792,7 @@ class tagPYBillboardData(Structure): Head = tagHead() - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) Type = 0 #(BYTE Type)//排行榜类型 Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount @@ -4623,7 +4807,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): @@ -4637,7 +4821,7 @@ self.Head.Clear() self.Head.Cmd = 0xA9 self.Head.SubCmd = 0xA2 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.Type = 0 self.Billboard = list() @@ -4646,7 +4830,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 4 length += 1 length += 1 for i in range(self.BillboardCount): @@ -4657,7 +4841,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) data = CommFunc.WriteBYTE(data, self.Type) for i in range(self.BillboardCount): @@ -4667,14 +4851,14 @@ def OutputString(self): DumpString = ''' Head:%s, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, Type:%d, Billboard:%s '''\ %( self.Head.OutputString(), - self.IsWatchSelf, + self.WatchID, self.BillboardCount, self.Type, "..." @@ -8512,6 +8696,213 @@ m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview + + +#------------------------------------------------------ +# B0 20 膜拜信息列表 #tagGCWorshipInfoList + +class tagGCWorshipInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID + WorshipType = 0 #(BYTE WorshipType)// 膜拜类型 + WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + InfoLen = 0 #(WORD InfoLen) + PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...} + 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.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.InfoLen = 0 + self.PlayerInfo = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 + length += 2 + length += len(self.PlayerInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.WorshipType) + data = CommFunc.WriteDWORD(data, self.WorshipValue) + data = CommFunc.WriteWORD(data, self.InfoLen) + data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + InfoLen:%d, + PlayerInfo:%s + '''\ + %( + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.InfoLen, + self.PlayerInfo + ) + return DumpString + + +class tagGCWorshipInfoList(Structure): + Head = tagHead() + WorshipCount = 0 #(BYTE WorshipCount) + WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WorshipCount): + temWorshipInfoList = tagGCWorshipInfo() + _pos = temWorshipInfoList.ReadData(_lpData, _pos) + self.WorshipInfoList.append(temWorshipInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + self.WorshipCount = 0 + self.WorshipInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.WorshipCount): + length += self.WorshipInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorshipCount) + for i in range(self.WorshipCount): + data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorshipCount:%d, + WorshipInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.WorshipCount, + "..." + ) + return DumpString + + +m_NAtagGCWorshipInfoList=tagGCWorshipInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList + + +#------------------------------------------------------ +# B0 21 膜拜结果 #tagGCWorshipResult + +class tagGCWorshipResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标; + ("MoneyType", c_ubyte), # 货币类型 + ("MoneyValue", c_int), # 货币奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x21 + 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 = 0xB0 + self.SubCmd = 0x21 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.Result = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagGCWorshipResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + Result:%d, + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.Result, + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +m_NAtagGCWorshipResult=tagGCWorshipResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult #------------------------------------------------------ @@ -14778,7 +15169,9 @@ # C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo class tagGCCrossBillboardData(Structure): + OrderIndex = 0 #(WORD OrderIndex)//名次索引,0代表第一名 ID = 0 #(DWORD ID) + ID2 = 0 #(DWORD ID2) Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 Name2 = "" #(char Name2[33])//名字2 Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 @@ -14803,7 +15196,9 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() + self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -14823,7 +15218,9 @@ return _pos def Clear(self): + self.OrderIndex = 0 self.ID = 0 + self.ID2 = 0 self.Name1 = "" self.Name2 = "" self.Type2 = 0 @@ -14844,6 +15241,8 @@ def GetLength(self): length = 0 + length += 2 + length += 4 length += 4 length += 33 length += 33 @@ -14866,7 +15265,9 @@ def GetBuffer(self): data = '' + data = CommFunc.WriteWORD(data, self.OrderIndex) data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteDWORD(data, self.ID2) data = CommFunc.WriteString(data, 33, self.Name1) data = CommFunc.WriteString(data, 33, self.Name2) data = CommFunc.WriteBYTE(data, self.Type2) @@ -14887,7 +15288,9 @@ def OutputString(self): DumpString = ''' + OrderIndex:%d, ID:%d, + ID2:%d, Name1:%s, Name2:%s, Type2:%d, @@ -14906,7 +15309,9 @@ UserData:%s '''\ %( + self.OrderIndex, self.ID, + self.ID2, self.Name1, self.Name2, self.Type2, @@ -14932,6 +15337,7 @@ Type = 0 #(BYTE Type)//榜单类型 GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) data = None @@ -14948,6 +15354,7 @@ self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): temCrossBillboardDataList = tagGCCrossBillboardData() @@ -14963,6 +15370,7 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 + self.WatchID = 0 self.BillboardCount = 0 self.CrossBillboardDataList = list() return @@ -14973,6 +15381,7 @@ length += 1 length += 1 length += 1 + length += 4 length += 1 for i in range(self.BillboardCount): length += self.CrossBillboardDataList[i].GetLength() @@ -14985,6 +15394,7 @@ data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteBYTE(data, self.GroupValue1) data = CommFunc.WriteBYTE(data, self.GroupValue2) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) for i in range(self.BillboardCount): data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) @@ -14996,6 +15406,7 @@ Type:%d, GroupValue1:%d, GroupValue2:%d, + WatchID:%d, BillboardCount:%d, CrossBillboardDataList:%s '''\ @@ -15004,6 +15415,7 @@ self.Type, self.GroupValue1, self.GroupValue2, + self.WatchID, self.BillboardCount, "..." ) @@ -23959,6 +24371,7 @@ PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数 + PassLineID = 0 #(DWORD PassLineID)//已过关到的lineID data = None def __init__(self): @@ -23976,6 +24389,7 @@ value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PassGrade.append(value) self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -23986,6 +24400,7 @@ self.PassGradeCnt = 0 self.PassGrade = list() self.EnterCntTotal = 0 + self.PassLineID = 0 return def GetLength(self): @@ -23996,6 +24411,7 @@ length += 2 length += 1 length += 4 * self.PassGradeCnt + length += 4 length += 4 return length @@ -24010,6 +24426,7 @@ for i in range(self.PassGradeCnt): data = CommFunc.WriteDWORD(data, self.PassGrade[i]) data = CommFunc.WriteDWORD(data, self.EnterCntTotal) + data = CommFunc.WriteDWORD(data, self.PassLineID) return data def OutputString(self): @@ -24020,7 +24437,8 @@ ItemAddCnt:%d, PassGradeCnt:%d, PassGrade:%s, - EnterCntTotal:%d + EnterCntTotal:%d, + PassLineID:%d '''\ %( self.FBID, @@ -24029,7 +24447,8 @@ self.ItemAddCnt, self.PassGradeCnt, "...", - self.EnterCntTotal + self.EnterCntTotal, + self.PassLineID ) return DumpString @@ -32764,6 +33183,273 @@ #------------------------------------------------------ +# AA 77 仙盟充值互助活动信息 #tagMCActFamilyCTGAssistInfo + +class tagMCActFamilyCTGAssistItem(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(tagMCActFamilyCTGAssistItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 77 仙盟充值互助活动信息 //tagMCActFamilyCTGAssistInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActFamilyCTGAssistAward(Structure): + NeedCTGPlayers = 0 #(BYTE NeedCTGPlayers)//所需充值人数 + RecordIndex = 0 #(BYTE RecordIndex)//对应领奖记录索引 + Count = 0 #(BYTE Count) + AwardItemList = list() #(vector<tagMCActFamilyCTGAssistItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedCTGPlayers,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActFamilyCTGAssistItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedCTGPlayers = 0 + self.RecordIndex = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NeedCTGPlayers) + data = CommFunc.WriteBYTE(data, self.RecordIndex) + 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 = ''' + NeedCTGPlayers:%d, + RecordIndex:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedCTGPlayers, + self.RecordIndex, + self.Count, + "..." + ) + return DumpString + + +class tagMCActFamilyCTGAssistInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AwardCount = 0 #(BYTE AwardCount) + AwardInfoList = list() #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x77 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardInfoList = tagMCActFamilyCTGAssistAward() + _pos = temAwardInfoList.ReadData(_lpData, _pos) + self.AwardInfoList.append(temAwardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x77 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.AwardCount = 0 + self.AwardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + for i in range(self.AwardCount): + length += self.AwardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + AwardCount:%d, + AwardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActFamilyCTGAssistInfo=tagMCActFamilyCTGAssistInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistInfo.Head.Cmd,m_NAtagMCActFamilyCTGAssistInfo.Head.SubCmd))] = m_NAtagMCActFamilyCTGAssistInfo + + +#------------------------------------------------------ +# AA 78 仙盟充值互助活动玩家信息 #tagMCActFamilyCTGAssistPlayerInfo + +class tagMCActFamilyCTGAssistPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("AwardRecord", c_int), # 奖励记录,按奖励记录索引位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x78 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x78 + self.ActNum = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCActFamilyCTGAssistPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 78 仙盟充值互助活动玩家信息 //tagMCActFamilyCTGAssistPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCActFamilyCTGAssistPlayerInfo=tagMCActFamilyCTGAssistPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistPlayerInfo.Cmd,m_NAtagMCActFamilyCTGAssistPlayerInfo.SubCmd))] = m_NAtagMCActFamilyCTGAssistPlayerInfo + + +#------------------------------------------------------ # AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo class tagMCActGarbageSortingInfo(Structure): -- Gitblit v1.8.0