|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 52 转盘活动信息 #tagMCActTurntableInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActTurntableItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("ItemNum", c_ubyte),    #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品 | 
|---|
|  |  |  | ("ItemLibType", c_ubyte),    #物品库类型;1-常规,2-极品,3-终极 | 
|---|
|  |  |  | ("ItemID", c_int), | 
|---|
|  |  |  | ("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.ItemNum = 0 | 
|---|
|  |  |  | self.ItemLibType = 0 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.ItemCount = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCActTurntableItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo: | 
|---|
|  |  |  | ItemNum:%d, | 
|---|
|  |  |  | ItemLibType:%d, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCount:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.ItemNum, | 
|---|
|  |  |  | self.ItemLibType, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCount | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActTurntableInfo(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)// 限制等级 | 
|---|
|  |  |  | CTGPrizeCount = 0    #(BYTE CTGPrizeCount) | 
|---|
|  |  |  | CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...] | 
|---|
|  |  |  | UseGoldPrizeCount = 0    #(BYTE UseGoldPrizeCount) | 
|---|
|  |  |  | UseGoldPrizeList = list()    #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...] | 
|---|
|  |  |  | TurnItemCount = 0    #(BYTE TurnItemCount) | 
|---|
|  |  |  | TurnItemList = list()    #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘; | 
|---|
|  |  |  | GoodItemCount = 0    #(BYTE GoodItemCount) | 
|---|
|  |  |  | GoodItemList = list()    #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; | 
|---|
|  |  |  | GoodItemCanChooseCount = 0    #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数 | 
|---|
|  |  |  | SuperItemCount = 0    #(BYTE SuperItemCount) | 
|---|
|  |  |  | SuperItemList = list()    #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; | 
|---|
|  |  |  | SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x52 | 
|---|
|  |  |  | 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.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.CTGPrizeCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.CTGPrizeList.append(value) | 
|---|
|  |  |  | self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.UseGoldPrizeCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.UseGoldPrizeList.append(value) | 
|---|
|  |  |  | self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.TurnItemCount): | 
|---|
|  |  |  | temTurnItemList = tagMCActTurntableItem() | 
|---|
|  |  |  | _pos = temTurnItemList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.TurnItemList.append(temTurnItemList) | 
|---|
|  |  |  | self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.GoodItemCount): | 
|---|
|  |  |  | temGoodItemList = tagMCActTurntableItem() | 
|---|
|  |  |  | _pos = temGoodItemList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.GoodItemList.append(temGoodItemList) | 
|---|
|  |  |  | self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.SuperItemCount): | 
|---|
|  |  |  | temSuperItemList = tagMCActTurntableItem() | 
|---|
|  |  |  | _pos = temSuperItemList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.SuperItemList.append(temSuperItemList) | 
|---|
|  |  |  | self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x52 | 
|---|
|  |  |  | self.ActNum = 0 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.IsDayReset = 0 | 
|---|
|  |  |  | self.LimitLV = 0 | 
|---|
|  |  |  | self.CTGPrizeCount = 0 | 
|---|
|  |  |  | self.CTGPrizeList = list() | 
|---|
|  |  |  | self.UseGoldPrizeCount = 0 | 
|---|
|  |  |  | self.UseGoldPrizeList = list() | 
|---|
|  |  |  | self.TurnItemCount = 0 | 
|---|
|  |  |  | self.TurnItemList = list() | 
|---|
|  |  |  | self.GoodItemCount = 0 | 
|---|
|  |  |  | self.GoodItemList = list() | 
|---|
|  |  |  | self.GoodItemCanChooseCount = 0 | 
|---|
|  |  |  | self.SuperItemCount = 0 | 
|---|
|  |  |  | self.SuperItemList = list() | 
|---|
|  |  |  | self.SuperItemCanChooseCount = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 4 * self.CTGPrizeCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 4 * self.UseGoldPrizeCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.TurnItemCount): | 
|---|
|  |  |  | length += self.TurnItemList[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.GoodItemCount): | 
|---|
|  |  |  | length += self.GoodItemList[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.SuperItemCount): | 
|---|
|  |  |  | length += self.SuperItemList[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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.CTGPrizeCount) | 
|---|
|  |  |  | for i in range(self.CTGPrizeCount): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount) | 
|---|
|  |  |  | for i in range(self.UseGoldPrizeCount): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TurnItemCount) | 
|---|
|  |  |  | for i in range(self.TurnItemCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.GoodItemCount) | 
|---|
|  |  |  | for i in range(self.GoodItemCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.SuperItemCount) | 
|---|
|  |  |  | for i in range(self.SuperItemCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | ActNum:%d, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | IsDayReset:%d, | 
|---|
|  |  |  | LimitLV:%d, | 
|---|
|  |  |  | CTGPrizeCount:%d, | 
|---|
|  |  |  | CTGPrizeList:%s, | 
|---|
|  |  |  | UseGoldPrizeCount:%d, | 
|---|
|  |  |  | UseGoldPrizeList:%s, | 
|---|
|  |  |  | TurnItemCount:%d, | 
|---|
|  |  |  | TurnItemList:%s, | 
|---|
|  |  |  | GoodItemCount:%d, | 
|---|
|  |  |  | GoodItemList:%s, | 
|---|
|  |  |  | GoodItemCanChooseCount:%d, | 
|---|
|  |  |  | SuperItemCount:%d, | 
|---|
|  |  |  | SuperItemList:%s, | 
|---|
|  |  |  | SuperItemCanChooseCount:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.ActNum, | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.IsDayReset, | 
|---|
|  |  |  | self.LimitLV, | 
|---|
|  |  |  | self.CTGPrizeCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.UseGoldPrizeCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.TurnItemCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.GoodItemCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.GoodItemCanChooseCount, | 
|---|
|  |  |  | self.SuperItemCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.SuperItemCanChooseCount | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCActTurntableInfo=tagMCActTurntableInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActTurntablePlayerInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ActNum", c_ubyte),    #活动编号 | 
|---|
|  |  |  | ("CanUseCount", c_ubyte),    #可转盘次数 | 
|---|
|  |  |  | ("CTGTotal", c_int),    #累计充值额度 | 
|---|
|  |  |  | ("UseGoldTotal", c_int),    #累计消费仙玉额度 | 
|---|
|  |  |  | ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中 | 
|---|
|  |  |  | ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x53 | 
|---|
|  |  |  | 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 = 0x53 | 
|---|
|  |  |  | self.ActNum = 0 | 
|---|
|  |  |  | self.CanUseCount = 0 | 
|---|
|  |  |  | self.CTGTotal = 0 | 
|---|
|  |  |  | self.UseGoldTotal = 0 | 
|---|
|  |  |  | self.TurnItemState = 0 | 
|---|
|  |  |  | self.GetItemNum = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCActTurntablePlayerInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ActNum:%d, | 
|---|
|  |  |  | CanUseCount:%d, | 
|---|
|  |  |  | CTGTotal:%d, | 
|---|
|  |  |  | UseGoldTotal:%d, | 
|---|
|  |  |  | TurnItemState:%d, | 
|---|
|  |  |  | GetItemNum:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ActNum, | 
|---|
|  |  |  | self.CanUseCount, | 
|---|
|  |  |  | self.CTGTotal, | 
|---|
|  |  |  | self.UseGoldTotal, | 
|---|
|  |  |  | self.TurnItemState, | 
|---|
|  |  |  | self.GetItemNum | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPlayerWishingDragInfo(Structure): | 
|---|