|  |  |  | 
|---|
|  |  |  | ("Day", c_ushort),    # 已开服天数,从0开始 | 
|---|
|  |  |  | ("IsMixServer", c_ubyte),    #是否是合服服务器 | 
|---|
|  |  |  | ("MixDay", c_ushort),    # 已合服天数,从0开始 | 
|---|
|  |  |  | ("OpenWeekday", c_ubyte),    #开服是周几,1代表周一 | 
|---|
|  |  |  | ("NowYear", c_ushort),    #服务器当前时间 - 年 | 
|---|
|  |  |  | ("NowMonth", c_ubyte), | 
|---|
|  |  |  | ("NowDay", c_ubyte), | 
|---|
|  |  |  | ("NowHour", c_ubyte), | 
|---|
|  |  |  | ("NowMinute", c_ubyte), | 
|---|
|  |  |  | ("NowSecond", c_ubyte), | 
|---|
|  |  |  | ("NowMicSecond", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Day = 0 | 
|---|
|  |  |  | self.IsMixServer = 0 | 
|---|
|  |  |  | self.MixDay = 0 | 
|---|
|  |  |  | self.OpenWeekday = 0 | 
|---|
|  |  |  | self.NowYear = 0 | 
|---|
|  |  |  | self.NowMonth = 0 | 
|---|
|  |  |  | self.NowDay = 0 | 
|---|
|  |  |  | self.NowHour = 0 | 
|---|
|  |  |  | self.NowMinute = 0 | 
|---|
|  |  |  | self.NowSecond = 0 | 
|---|
|  |  |  | self.NowMicSecond = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Day:%d, | 
|---|
|  |  |  | IsMixServer:%d, | 
|---|
|  |  |  | MixDay:%d | 
|---|
|  |  |  | MixDay:%d, | 
|---|
|  |  |  | OpenWeekday:%d, | 
|---|
|  |  |  | NowYear:%d, | 
|---|
|  |  |  | NowMonth:%d, | 
|---|
|  |  |  | NowDay:%d, | 
|---|
|  |  |  | NowHour:%d, | 
|---|
|  |  |  | NowMinute:%d, | 
|---|
|  |  |  | NowSecond:%d, | 
|---|
|  |  |  | NowMicSecond:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Day, | 
|---|
|  |  |  | self.IsMixServer, | 
|---|
|  |  |  | self.MixDay | 
|---|
|  |  |  | self.MixDay, | 
|---|
|  |  |  | self.OpenWeekday, | 
|---|
|  |  |  | self.NowYear, | 
|---|
|  |  |  | self.NowMonth, | 
|---|
|  |  |  | self.NowDay, | 
|---|
|  |  |  | self.NowHour, | 
|---|
|  |  |  | self.NowMinute, | 
|---|
|  |  |  | self.NowSecond, | 
|---|
|  |  |  | self.NowMicSecond | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCBossShuntLineState(Structure): | 
|---|
|  |  |  | BossID = 0    #(DWORD BossID)// bossID | 
|---|
|  |  |  | DeadLineCount = 0    #(BYTE DeadLineCount) | 
|---|
|  |  |  | DeadLineList = list()    #(vector<BYTE> DeadLineList)// 已死亡的线路列表 | 
|---|
|  |  |  | LineCount = 0    #(BYTE LineCount) | 
|---|
|  |  |  | LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表 | 
|---|
|  |  |  | StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.DeadLineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.DeadLineCount): | 
|---|
|  |  |  | self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.LineCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.DeadLineList.append(value) | 
|---|
|  |  |  | self.LineIDList.append(value) | 
|---|
|  |  |  | for i in range(self.LineCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.StateList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.BossID = 0 | 
|---|
|  |  |  | self.DeadLineCount = 0 | 
|---|
|  |  |  | self.DeadLineList = list() | 
|---|
|  |  |  | self.LineCount = 0 | 
|---|
|  |  |  | self.LineIDList = list() | 
|---|
|  |  |  | self.StateList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.DeadLineCount | 
|---|
|  |  |  | length += 1 * self.LineCount | 
|---|
|  |  |  | length += 1 * self.LineCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.BossID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.DeadLineCount) | 
|---|
|  |  |  | for i in range(self.DeadLineCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.DeadLineList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.LineCount) | 
|---|
|  |  |  | for i in range(self.LineCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.LineIDList[i]) | 
|---|
|  |  |  | for i in range(self.LineCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.StateList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | BossID:%d, | 
|---|
|  |  |  | DeadLineCount:%d, | 
|---|
|  |  |  | DeadLineList:%s | 
|---|
|  |  |  | LineCount:%d, | 
|---|
|  |  |  | LineIDList:%s, | 
|---|
|  |  |  | StateList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.BossID, | 
|---|
|  |  |  | self.DeadLineCount, | 
|---|
|  |  |  | self.LineCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagDogzTimeInfoObj(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("NPCID", c_int),    # npcid | 
|---|
|  |  |  | ("RefreshSecond", 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.NPCID = 0 | 
|---|
|  |  |  | self.RefreshSecond = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagDogzTimeInfoObj) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime: | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | RefreshSecond:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.RefreshSecond | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCDogzNPCRefreshTime(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Cnt = 0    #(BYTE Cnt)//信息个数 | 
|---|
|  |  |  | InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | temInfoList = tagDogzTimeInfoObj() | 
|---|
|  |  |  | _pos = temInfoList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.InfoList.append(temInfoList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.InfoList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | length += self.InfoList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Cnt) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | InfoList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCFriendSendEnergyInfo(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | RecordLen = 0    #(WORD RecordLen)// 长度 | 
|---|
|  |  |  | KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen | 
|---|
|  |  |  | RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒 | 
|---|
|  |  |  | RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen) | 
|---|
|  |  |  | self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.RecordLen = 0 | 
|---|
|  |  |  | self.KillRecord = "" | 
|---|
|  |  |  | self.RefreshSecond = 0 | 
|---|
|  |  |  | self.RefreshCD = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += len(self.KillRecord) | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.RecordLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.RefreshSecond) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.RefreshCD) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | IsAlive:%d, | 
|---|
|  |  |  | RecordLen:%d, | 
|---|
|  |  |  | KillRecord:%s, | 
|---|
|  |  |  | RefreshSecond:%d | 
|---|
|  |  |  | RefreshSecond:%d, | 
|---|
|  |  |  | RefreshCD:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.BossID, | 
|---|
|  |  |  | self.IsAlive, | 
|---|
|  |  |  | self.RecordLen, | 
|---|
|  |  |  | self.KillRecord, | 
|---|
|  |  |  | self.RefreshSecond | 
|---|
|  |  |  | self.RefreshSecond, | 
|---|
|  |  |  | self.RefreshCD | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCStoreServerBuyCnt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("GoodsID", c_int),    #商品标识 | 
|---|
|  |  |  | ("BuyCnt", 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.GoodsID = 0 | 
|---|
|  |  |  | self.BuyCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagGCStoreServerBuyCnt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo: | 
|---|
|  |  |  | GoodsID:%d, | 
|---|
|  |  |  | BuyCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.GoodsID, | 
|---|
|  |  |  | self.BuyCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCStoreServerBuyCntInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Count = 0    #(WORD Count)//数量 | 
|---|
|  |  |  | InfoList = list()    #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x06 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | temInfoList = tagGCStoreServerBuyCnt() | 
|---|
|  |  |  | _pos = temInfoList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.InfoList.append(temInfoList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x06 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.InfoList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | length += self.InfoList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.Count) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | InfoList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A9 21 角色改名结果 #tagUpdatePlayerNameResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagUpdatePlayerNameResult(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCFamilyBossHurtInfo(Structure): | 
|---|
|  |  |  | NPCID = 0    #(DWORD NPCID) | 
|---|
|  |  |  | CurHP = 0    #(DWORD CurHP) | 
|---|
|  |  |  | CurHPEx = 0    #(DWORD CurHPEx) | 
|---|
|  |  |  | MaxHP = 0    #(DWORD MaxHP) | 
|---|
|  |  |  | MaxHPEx = 0    #(DWORD MaxHPEx) | 
|---|
|  |  |  | FamilyID = 0    #(DWORD FamilyID)// 最大实时伤血仙盟 | 
|---|
|  |  |  | NameLen = 0    #(BYTE NameLen) | 
|---|
|  |  |  | FamilyName = ""    #(String FamilyName) | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.CurHP = 0 | 
|---|
|  |  |  | self.CurHPEx = 0 | 
|---|
|  |  |  | self.MaxHP = 0 | 
|---|
|  |  |  | self.MaxHPEx = 0 | 
|---|
|  |  |  | self.FamilyID = 0 | 
|---|
|  |  |  | self.NameLen = 0 | 
|---|
|  |  |  | self.FamilyName = "" | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.FamilyName) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.NPCID) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.CurHP) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.CurHPEx) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.MaxHP) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.MaxHPEx) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.FamilyID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.NameLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.NameLen, self.FamilyName) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | CurHP:%d, | 
|---|
|  |  |  | CurHPEx:%d, | 
|---|
|  |  |  | MaxHP:%d, | 
|---|
|  |  |  | MaxHPEx:%d, | 
|---|
|  |  |  | FamilyID:%d, | 
|---|
|  |  |  | NameLen:%d, | 
|---|
|  |  |  | FamilyName:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.CurHP, | 
|---|
|  |  |  | self.CurHPEx, | 
|---|
|  |  |  | self.MaxHP, | 
|---|
|  |  |  | self.MaxHPEx, | 
|---|
|  |  |  | self.FamilyID, | 
|---|
|  |  |  | self.NameLen, | 
|---|
|  |  |  | self.FamilyName | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCAllFamilyBossHurtInfoList(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | NPCCount = 0    #(BYTE NPCCount)// 个数 | 
|---|
|  |  |  | NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAC | 
|---|
|  |  |  | self.Head.SubCmd = 0x10 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.NPCCount): | 
|---|
|  |  |  | temNPCHurtInfo = tagGCFamilyBossHurtInfo() | 
|---|
|  |  |  | _pos = temNPCHurtInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.NPCHurtInfo.append(temNPCHurtInfo) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAC | 
|---|
|  |  |  | self.Head.SubCmd = 0x10 | 
|---|
|  |  |  | self.NPCCount = 0 | 
|---|
|  |  |  | self.NPCHurtInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.NPCCount): | 
|---|
|  |  |  | length += self.NPCHurtInfo[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.NPCCount) | 
|---|
|  |  |  | for i in range(self.NPCCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | NPCCount:%d, | 
|---|
|  |  |  | NPCHurtInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.NPCCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 08 boss复活点数通知 #tagGCBossRebornPoint | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCBossRebornPoint(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Point", c_int),    # 复活点数 | 
|---|
|  |  |  | ("TotalPoint", c_int),    # 复活总点数 | 
|---|
|  |  |  | ("RebornCnt", c_ushort),    # 复活次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | self.Point = 0 | 
|---|
|  |  |  | self.TotalPoint = 0 | 
|---|
|  |  |  | self.RebornCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Point:%d, | 
|---|
|  |  |  | TotalPoint:%d | 
|---|
|  |  |  | TotalPoint:%d, | 
|---|
|  |  |  | RebornCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Point, | 
|---|
|  |  |  | self.TotalPoint | 
|---|
|  |  |  | self.TotalPoint, | 
|---|
|  |  |  | self.RebornCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | WorldLV = 0    #(WORD WorldLV)// 世界等级 | 
|---|
|  |  |  | LimitLV = 0    #(WORD LimitLV)// 限制等级 | 
|---|
|  |  |  | ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.WorldLV = 0 | 
|---|
|  |  |  | self.LimitLV = 0 | 
|---|
|  |  |  | self.ResetType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.WorldLV) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.LimitLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ResetType) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | WorldLV:%d, | 
|---|
|  |  |  | LimitLV:%d | 
|---|
|  |  |  | LimitLV:%d, | 
|---|
|  |  |  | ResetType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.WorldLV, | 
|---|
|  |  |  | self.LimitLV | 
|---|
|  |  |  | self.LimitLV, | 
|---|
|  |  |  | self.ResetType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCBindJadeWheelResult(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Index", c_ubyte),    # 格子 | 
|---|
|  |  |  | ("Cnt", c_ubyte),    #今日已转次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x24 | 
|---|
|  |  |  | 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 = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x24 | 
|---|
|  |  |  | self.Index = 0 | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCBindJadeWheelResult) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Index:%d, | 
|---|
|  |  |  | Cnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Index, | 
|---|
|  |  |  | self.Cnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCBindJadeWheelResult=tagMCBindJadeWheelResult() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBindJadeWheelResult.Cmd,m_NAtagMCBindJadeWheelResult.SubCmd))] = m_NAtagMCBindJadeWheelResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCBossCntInfo(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCDogzHelpbattleState(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("DogzID", c_ubyte),    # 神兽ID | 
|---|
|  |  |  | ("BatteState", c_ubyte),    #是否已助战, 0否1是 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0xC1 | 
|---|
|  |  |  | 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 = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0xC1 | 
|---|
|  |  |  | self.DogzID = 0 | 
|---|
|  |  |  | self.BatteState = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCDogzHelpbattleState) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | DogzID:%d, | 
|---|
|  |  |  | BatteState:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.DogzID, | 
|---|
|  |  |  | self.BatteState | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 C0 神兽信息 #tagMCDogzInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCDogzInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("BuyHelpbattleCount", c_ubyte),    #额外购买的助战数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0xC0 | 
|---|
|  |  |  | 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 = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0xC0 | 
|---|
|  |  |  | self.BuyHelpbattleCount = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCDogzInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | BuyHelpbattleCount:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.BuyHelpbattleCount | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCDogzInfo=tagMCDogzInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCEquipDecomposeInfo(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFBEncourageInfo(Structure): | 
|---|
|  |  |  | class  tagMCFBEncourageCnt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Cnt1", c_ubyte),    # 当前铜钱鼓舞次数 | 
|---|
|  |  |  | ("Cnt2", c_ubyte),    # 当前仙玉鼓舞次数 | 
|---|
|  |  |  | ("MoneyType", c_ubyte),    # 金钱类型 | 
|---|
|  |  |  | ("EncourageCnt", c_ubyte),    # 当前鼓舞次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x0A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x0A | 
|---|
|  |  |  | self.Cnt1 = 0 | 
|---|
|  |  |  | self.Cnt2 = 0 | 
|---|
|  |  |  | self.MoneyType = 0 | 
|---|
|  |  |  | self.EncourageCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCFBEncourageInfo) | 
|---|
|  |  |  | return sizeof(tagMCFBEncourageCnt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Cnt1:%d, | 
|---|
|  |  |  | Cnt2:%d | 
|---|
|  |  |  | MoneyType:%d, | 
|---|
|  |  |  | EncourageCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Cnt1, | 
|---|
|  |  |  | self.Cnt2 | 
|---|
|  |  |  | self.MoneyType, | 
|---|
|  |  |  | self.EncourageCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFBEncourageInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Cnt = 0    #(BYTE Cnt)// | 
|---|
|  |  |  | InfoList = list()    #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x0A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | temInfoList = tagMCFBEncourageCnt() | 
|---|
|  |  |  | _pos = temInfoList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.InfoList.append(temInfoList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x0A | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.InfoList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | length += self.InfoList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Cnt) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | InfoList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Cmd,m_NAtagMCFBEncourageInfo.SubCmd))] = m_NAtagMCFBEncourageInfo | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("PriID", c_int),    # 特权ID | 
|---|
|  |  |  | ("State", c_ubyte),    #激活状态 | 
|---|
|  |  |  | ("CurValue", c_int),    #当前总进度 | 
|---|
|  |  |  | ("GotValue", c_int),    #已领取进度 | 
|---|
|  |  |  | ("ItemAwardState", c_ubyte),    #物品奖励是否已领取 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.PriID = 0 | 
|---|
|  |  |  | self.State = 0 | 
|---|
|  |  |  | self.CurValue = 0 | 
|---|
|  |  |  | self.GotValue = 0 | 
|---|
|  |  |  | self.ItemAwardState = 0 | 
|---|
|  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 53 法宝特权数据 //tagMCMWPrivilegeDataInfo: | 
|---|
|  |  |  | PriID:%d, | 
|---|
|  |  |  | State:%d, | 
|---|
|  |  |  | CurValue:%d, | 
|---|
|  |  |  | GotValue:%d, | 
|---|
|  |  |  | ItemAwardState:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.PriID, | 
|---|
|  |  |  | self.State, | 
|---|
|  |  |  | self.CurValue, | 
|---|
|  |  |  | self.GotValue, | 
|---|
|  |  |  | self.ItemAwardState | 
|---|
|  |  |  | 
|---|
|  |  |  | class  tagMCNPCIDCollectionCnt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("NPCID", c_int),    #NPCID | 
|---|
|  |  |  | ("CollectionCnt", c_ubyte),    #已采集次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x26 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x26 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.CollectionCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 26 NPCID已采集次数信息 //tagMCNPCIDCollectionCntInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | CollectionCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.CollectionCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 21 祈福丹药结果 #tagMCPrayElixirResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPrayElixirResult(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ItemID", c_int),    # 物品ID | 
|---|
|  |  |  | ("PrayCnt", c_ubyte),    # 今日祈福次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | 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 = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x21 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.PrayCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCPrayElixirResult) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | PrayCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.PrayCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCPrayElixirResult=tagMCPrayElixirResult() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 49 资源找回次数 #tagMCRecoverNum | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCRecoverNumInfo(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | ("Index", c_ubyte),    # 找回项索引 | 
|---|
|  |  |  | ("RecoverCnt", c_ubyte),    # 可找回次数 | 
|---|
|  |  |  | ("ExtraCnt", c_ubyte),    # VIP额外次数 | 
|---|
|  |  |  | ("ExtraData", c_ubyte),    # 额外参数 | 
|---|
|  |  |  | ("ExtraData", c_ubyte),    # 额外参数1 | 
|---|
|  |  |  | ("ExtraData2", c_ubyte),    # 额外参数2 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.RecoverCnt = 0 | 
|---|
|  |  |  | self.ExtraCnt = 0 | 
|---|
|  |  |  | self.ExtraData = 0 | 
|---|
|  |  |  | self.ExtraData2 = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | Index:%d, | 
|---|
|  |  |  | RecoverCnt:%d, | 
|---|
|  |  |  | ExtraCnt:%d, | 
|---|
|  |  |  | ExtraData:%d | 
|---|
|  |  |  | ExtraData:%d, | 
|---|
|  |  |  | ExtraData2:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Index, | 
|---|
|  |  |  | self.RecoverCnt, | 
|---|
|  |  |  | self.ExtraCnt, | 
|---|
|  |  |  | self.ExtraData | 
|---|
|  |  |  | self.ExtraData, | 
|---|
|  |  |  | self.ExtraData2 | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 15 通知仙盟抢Boss伤血信息 #tagMCFamilyBossHurtList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFamilyBossHurt(Structure): | 
|---|
|  |  |  | FamilyID = 0    #(DWORD FamilyID)// 所属仙盟ID | 
|---|
|  |  |  | HurtID = 0    #(DWORD HurtID)// 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID | 
|---|
|  |  |  | NameLen = 0    #(BYTE NameLen) | 
|---|
|  |  |  | HurtName = ""    #(String HurtName) | 
|---|
|  |  |  | HurtValue = 0    #(DWORD HurtValue)// 累计伤血,求余1亿的值 | 
|---|
|  |  |  | HurtValueEx = 0    #(DWORD HurtValueEx)// 累计伤血,整除1亿的值 | 
|---|
|  |  |  | InitTick = 0    #(DWORD InitTick)// 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排 | 
|---|
|  |  |  | 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.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) | 
|---|
|  |  |  | self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.InitTick,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.FamilyID = 0 | 
|---|
|  |  |  | self.HurtID = 0 | 
|---|
|  |  |  | self.NameLen = 0 | 
|---|
|  |  |  | self.HurtName = "" | 
|---|
|  |  |  | self.HurtValue = 0 | 
|---|
|  |  |  | self.HurtValueEx = 0 | 
|---|
|  |  |  | self.InitTick = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.HurtName) | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.FamilyID) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.HurtID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.NameLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.NameLen, self.HurtName) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.HurtValue) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.HurtValueEx) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.InitTick) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | FamilyID:%d, | 
|---|
|  |  |  | HurtID:%d, | 
|---|
|  |  |  | NameLen:%d, | 
|---|
|  |  |  | HurtName:%s, | 
|---|
|  |  |  | HurtValue:%d, | 
|---|
|  |  |  | HurtValueEx:%d, | 
|---|
|  |  |  | InitTick:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.FamilyID, | 
|---|
|  |  |  | self.HurtID, | 
|---|
|  |  |  | self.NameLen, | 
|---|
|  |  |  | self.HurtName, | 
|---|
|  |  |  | self.HurtValue, | 
|---|
|  |  |  | self.HurtValueEx, | 
|---|
|  |  |  | self.InitTick | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFamilyBossHurtList(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | ObjID = 0    #(DWORD ObjID) | 
|---|
|  |  |  | NPCID = 0    #(DWORD NPCID) | 
|---|
|  |  |  | HurtType = 0    #(BYTE HurtType)// 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 | 
|---|
|  |  |  | IsSort = 0    #(BYTE IsSort)// 是否排序过的,一般boss被击杀后会统一同步一次排序过的最终结果,其他情况下客户端自己排序 | 
|---|
|  |  |  | HurtCount = 0    #(WORD HurtCount)// 伤血个数 | 
|---|
|  |  |  | HurtList = list()    #(vector<tagMCFamilyBossHurt> HurtList)// 伤血列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x15 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IsSort,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.HurtCount,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.HurtCount): | 
|---|
|  |  |  | temHurtList = tagMCFamilyBossHurt() | 
|---|
|  |  |  | _pos = temHurtList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.HurtList.append(temHurtList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x15 | 
|---|
|  |  |  | self.ObjID = 0 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.HurtType = 0 | 
|---|
|  |  |  | self.IsSort = 0 | 
|---|
|  |  |  | self.HurtCount = 0 | 
|---|
|  |  |  | self.HurtList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | for i in range(self.HurtCount): | 
|---|
|  |  |  | length += self.HurtList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.ObjID) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.NPCID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.HurtType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsSort) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.HurtCount) | 
|---|
|  |  |  | for i in range(self.HurtCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | ObjID:%d, | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | HurtType:%d, | 
|---|
|  |  |  | IsSort:%d, | 
|---|
|  |  |  | HurtCount:%d, | 
|---|
|  |  |  | HurtList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.ObjID, | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.HurtType, | 
|---|
|  |  |  | self.IsSort, | 
|---|
|  |  |  | self.HurtCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCFamilyBossHurtList=tagMCFamilyBossHurtList() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBossHurtList.Head.Cmd,m_NAtagMCFamilyBossHurtList.Head.SubCmd))] = m_NAtagMCFamilyBossHurtList | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 03 通知进入副本时间 #tagMCFBEnterTickList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFBEnterTick(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 16 小助手设置 #tagMCLittleHelperSet | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCLittleHelperFuncSet(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("SetNum", c_ubyte),    # 托管功能设置编号1~20,每个编号对应的托管功能前端自定义 | 
|---|
|  |  |  | ("Value1", c_int),    # 自定义值1,如果存储的是勾选信息, 按二进制位存储代表是否勾选,支持31位,每位代表的含义前端自定义 | 
|---|
|  |  |  | ("Value2", c_int),    # 自定义值2 | 
|---|
|  |  |  | ("Value3", c_int),    # 自定义值3 | 
|---|
|  |  |  | ("Value4", c_int),    # 自定义值4 | 
|---|
|  |  |  | ("Value5", c_int),    # 自定义值5 | 
|---|
|  |  |  | ("Value6", c_int),    # 自定义值6 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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.SetNum = 0 | 
|---|
|  |  |  | self.Value1 = 0 | 
|---|
|  |  |  | self.Value2 = 0 | 
|---|
|  |  |  | self.Value3 = 0 | 
|---|
|  |  |  | self.Value4 = 0 | 
|---|
|  |  |  | self.Value5 = 0 | 
|---|
|  |  |  | self.Value6 = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCLittleHelperFuncSet) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A7 16 小助手设置 //tagMCLittleHelperSet: | 
|---|
|  |  |  | SetNum:%d, | 
|---|
|  |  |  | Value1:%d, | 
|---|
|  |  |  | Value2:%d, | 
|---|
|  |  |  | Value3:%d, | 
|---|
|  |  |  | Value4:%d, | 
|---|
|  |  |  | Value5:%d, | 
|---|
|  |  |  | Value6:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.SetNum, | 
|---|
|  |  |  | self.Value1, | 
|---|
|  |  |  | self.Value2, | 
|---|
|  |  |  | self.Value3, | 
|---|
|  |  |  | self.Value4, | 
|---|
|  |  |  | self.Value5, | 
|---|
|  |  |  | self.Value6 | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCLittleHelperSet(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | FuncSetCount = 0    #(BYTE FuncSetCount)// 托管功能设置数,暂支持20个 | 
|---|
|  |  |  | FuncSetList = list()    #(vector<tagMCLittleHelperFuncSet> FuncSetList)// 托管功能设置列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x16 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.FuncSetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.FuncSetCount): | 
|---|
|  |  |  | temFuncSetList = tagMCLittleHelperFuncSet() | 
|---|
|  |  |  | _pos = temFuncSetList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.FuncSetList.append(temFuncSetList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x16 | 
|---|
|  |  |  | self.FuncSetCount = 0 | 
|---|
|  |  |  | self.FuncSetList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.FuncSetCount): | 
|---|
|  |  |  | length += self.FuncSetList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.FuncSetCount) | 
|---|
|  |  |  | for i in range(self.FuncSetCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.FuncSetList[i].GetLength(), self.FuncSetList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | FuncSetCount:%d, | 
|---|
|  |  |  | FuncSetList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.FuncSetCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCLittleHelperSet=tagMCLittleHelperSet() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLittleHelperSet.Head.Cmd,m_NAtagMCLittleHelperSet.Head.SubCmd))] = m_NAtagMCLittleHelperSet | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 14 通知查询的NPC数量 #tagMCNPCCntList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCNPCCntInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ("Cnt", 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.NPCID = 0 | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCNPCCntInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A7 14 通知查询的NPC数量 //tagMCNPCCntList: | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | Cnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.Cnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCNPCCntList(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | MapID = 0    #(DWORD MapID) | 
|---|
|  |  |  | NPCInfoCnt = 0    #(BYTE NPCInfoCnt) | 
|---|
|  |  |  | NPCInfoList = list()    #(vector<tagMCNPCCntInfo> NPCInfoList) | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.NPCInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.NPCInfoCnt): | 
|---|
|  |  |  | temNPCInfoList = tagMCNPCCntInfo() | 
|---|
|  |  |  | _pos = temNPCInfoList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.NPCInfoList.append(temNPCInfoList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x14 | 
|---|
|  |  |  | self.MapID = 0 | 
|---|
|  |  |  | self.NPCInfoCnt = 0 | 
|---|
|  |  |  | self.NPCInfoList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.NPCInfoCnt): | 
|---|
|  |  |  | length += self.NPCInfoList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.MapID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.NPCInfoCnt) | 
|---|
|  |  |  | for i in range(self.NPCInfoCnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.NPCInfoList[i].GetLength(), self.NPCInfoList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | MapID:%d, | 
|---|
|  |  |  | NPCInfoCnt:%d, | 
|---|
|  |  |  | NPCInfoList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.MapID, | 
|---|
|  |  |  | self.NPCInfoCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCNPCCntList=tagMCNPCCntList() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCCntList.Head.Cmd,m_NAtagMCNPCCntList.Head.SubCmd))] = m_NAtagMCNPCCntList | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A7 01 通知选中对象 # tagMCNotifySelectObj | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCNotifySelectObj(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | class  tagMCNPCInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ObjID", c_int), | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ("NPCHP", c_int), | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA7 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA7 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | self.ObjID = 0 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.NPCHP = 0 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ObjID:%d, | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | NPCHP:%d, | 
|---|
|  |  |  | 
|---|
|  |  |  | RefreshSecond:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ObjID, | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.NPCHP, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPlayerWishingDragInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("WellType", c_ubyte),    # 库 0-可选库 1-结果库 | 
|---|
|  |  |  | ("Index", c_ubyte),    # 索引 | 
|---|
|  |  |  | ("ItemID", c_int),    # 物品ID | 
|---|
|  |  |  | ("ItemCnt", c_ushort),    # 物品数量 | 
|---|
|  |  |  | ("IsBind", c_ubyte),    # 是否绑定 | 
|---|
|  |  |  | ("IsSpecial", 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.WellType = 0 | 
|---|
|  |  |  | self.Index = 0 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.ItemCnt = 0 | 
|---|
|  |  |  | self.IsBind = 0 | 
|---|
|  |  |  | self.IsSpecial = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCPlayerWishingDragInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 1B 许愿池拖动结果 //tagMCActWishingDragResult: | 
|---|
|  |  |  | WellType:%d, | 
|---|
|  |  |  | Index:%d, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCnt:%d, | 
|---|
|  |  |  | IsBind:%d, | 
|---|
|  |  |  | IsSpecial:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.WellType, | 
|---|
|  |  |  | self.Index, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCnt, | 
|---|
|  |  |  | self.IsBind, | 
|---|
|  |  |  | self.IsSpecial | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActWishingDragResult(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Cnt = 0    #(BYTE Cnt) | 
|---|
|  |  |  | InfoList = list()    #(vector<tagMCPlayerWishingDragInfo> InfoList) | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x1B | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | temInfoList = tagMCPlayerWishingDragInfo() | 
|---|
|  |  |  | _pos = temInfoList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.InfoList.append(temInfoList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x1B | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.InfoList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | length += self.InfoList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Cnt) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | InfoList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCActWishingDragResult=tagMCActWishingDragResult() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingDragResult.Head.Cmd,m_NAtagMCActWishingDragResult.Head.SubCmd))] = m_NAtagMCActWishingDragResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 19 许愿池活动信息 #tagMCActWishingWellInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCWishingWellItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("ItemID", c_int),    # 物品ID | 
|---|
|  |  |  | ("ItemCnt", c_ushort),    # 物品数量 | 
|---|
|  |  |  | ("IsBind", c_ubyte),    # 是否绑定 | 
|---|
|  |  |  | ("Mark", 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.ItemID = 0 | 
|---|
|  |  |  | self.ItemCnt = 0 | 
|---|
|  |  |  | self.IsBind = 0 | 
|---|
|  |  |  | self.Mark = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCWishingWellItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 19 许愿池活动信息 //tagMCActWishingWellInfo: | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCnt:%d, | 
|---|
|  |  |  | IsBind:%d, | 
|---|
|  |  |  | Mark:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCnt, | 
|---|
|  |  |  | self.IsBind, | 
|---|
|  |  |  | self.Mark | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActWishingWellInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置 | 
|---|
|  |  |  | ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 | 
|---|
|  |  |  | LimitLV = 0    #(WORD LimitLV)// 限制等级 | 
|---|
|  |  |  | Count = 0    #(WORD Count)// 物品数 | 
|---|
|  |  |  | WellItemInfo = list()    #(vector<tagMCWishingWellItem> WellItemInfo)// 随机库物品信息 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x19 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | temWellItemInfo = tagMCWishingWellItem() | 
|---|
|  |  |  | _pos = temWellItemInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.WellItemInfo.append(temWellItemInfo) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x19 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.IsDayReset = 0 | 
|---|
|  |  |  | self.ResetType = 0 | 
|---|
|  |  |  | self.LimitLV = 0 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.WellItemInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | length += self.WellItemInfo[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.StartDate) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsDayReset) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ResetType) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.LimitLV) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.Count) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | IsDayReset:%d, | 
|---|
|  |  |  | ResetType:%d, | 
|---|
|  |  |  | LimitLV:%d, | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | WellItemInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.IsDayReset, | 
|---|
|  |  |  | self.ResetType, | 
|---|
|  |  |  | self.LimitLV, | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCActWishingWellInfo=tagMCActWishingWellInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellInfo.Head.Cmd,m_NAtagMCActWishingWellInfo.Head.SubCmd))] = m_NAtagMCActWishingWellInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 1A 许愿池活动玩家信息 #tagMCActWishingWellPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPlayerWishingWellItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("ItemID", c_int),    # 物品ID | 
|---|
|  |  |  | ("ItemCnt", c_ushort),    # 物品数量 | 
|---|
|  |  |  | ("IsBind", c_ubyte),    # 是否绑定 | 
|---|
|  |  |  | ("IsSpecial", 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.ItemCnt = 0 | 
|---|
|  |  |  | self.IsBind = 0 | 
|---|
|  |  |  | self.IsSpecial = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCPlayerWishingWellItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 1A 许愿池活动玩家信息 //tagMCActWishingWellPlayerInfo: | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCnt:%d, | 
|---|
|  |  |  | IsBind:%d, | 
|---|
|  |  |  | IsSpecial:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCnt, | 
|---|
|  |  |  | self.IsBind, | 
|---|
|  |  |  | self.IsSpecial | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCActWishingWellPlayerInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | FreeStartTime = 0    #(DWORD FreeStartTime)// 免费开始倒计时时间 | 
|---|
|  |  |  | WishCnt = 0    #(DWORD WishCnt)// 许愿付费刷新次数 | 
|---|
|  |  |  | WellItemCnt = 0    #(BYTE WellItemCnt)//许愿池物品数量 | 
|---|
|  |  |  | WellItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> WellItemInfo)// 随机库物品信息 | 
|---|
|  |  |  | CurAwardCnt = 0    #(BYTE CurAwardCnt)// 当前奖励物品数量 | 
|---|
|  |  |  | CurAwardItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> CurAwardItemInfo)// 当前奖励物品 | 
|---|
|  |  |  | LastAwardCnt = 0    #(BYTE LastAwardCnt)// 可领取奖励物品数量 | 
|---|
|  |  |  | LastAwardItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> LastAwardItemInfo)// 可领取奖励物品 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x1A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.FreeStartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.WishCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.WellItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.WellItemCnt): | 
|---|
|  |  |  | temWellItemInfo = tagMCPlayerWishingWellItem() | 
|---|
|  |  |  | _pos = temWellItemInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.WellItemInfo.append(temWellItemInfo) | 
|---|
|  |  |  | self.CurAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.CurAwardCnt): | 
|---|
|  |  |  | temCurAwardItemInfo = tagMCPlayerWishingWellItem() | 
|---|
|  |  |  | _pos = temCurAwardItemInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.CurAwardItemInfo.append(temCurAwardItemInfo) | 
|---|
|  |  |  | self.LastAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.LastAwardCnt): | 
|---|
|  |  |  | temLastAwardItemInfo = tagMCPlayerWishingWellItem() | 
|---|
|  |  |  | _pos = temLastAwardItemInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.LastAwardItemInfo.append(temLastAwardItemInfo) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x1A | 
|---|
|  |  |  | self.FreeStartTime = 0 | 
|---|
|  |  |  | self.WishCnt = 0 | 
|---|
|  |  |  | self.WellItemCnt = 0 | 
|---|
|  |  |  | self.WellItemInfo = list() | 
|---|
|  |  |  | self.CurAwardCnt = 0 | 
|---|
|  |  |  | self.CurAwardItemInfo = list() | 
|---|
|  |  |  | self.LastAwardCnt = 0 | 
|---|
|  |  |  | self.LastAwardItemInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.WellItemCnt): | 
|---|
|  |  |  | length += self.WellItemInfo[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.CurAwardCnt): | 
|---|
|  |  |  | length += self.CurAwardItemInfo[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.LastAwardCnt): | 
|---|
|  |  |  | length += self.LastAwardItemInfo[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.FreeStartTime) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.WishCnt) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.WellItemCnt) | 
|---|
|  |  |  | for i in range(self.WellItemCnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.CurAwardCnt) | 
|---|
|  |  |  | for i in range(self.CurAwardCnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.CurAwardItemInfo[i].GetLength(), self.CurAwardItemInfo[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.LastAwardCnt) | 
|---|
|  |  |  | for i in range(self.LastAwardCnt): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.LastAwardItemInfo[i].GetLength(), self.LastAwardItemInfo[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | FreeStartTime:%d, | 
|---|
|  |  |  | WishCnt:%d, | 
|---|
|  |  |  | WellItemCnt:%d, | 
|---|
|  |  |  | WellItemInfo:%s, | 
|---|
|  |  |  | CurAwardCnt:%d, | 
|---|
|  |  |  | CurAwardItemInfo:%s, | 
|---|
|  |  |  | LastAwardCnt:%d, | 
|---|
|  |  |  | LastAwardItemInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.FreeStartTime, | 
|---|
|  |  |  | self.WishCnt, | 
|---|
|  |  |  | self.WellItemCnt, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.CurAwardCnt, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.LastAwardCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCAllPeoplePartyCount(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("FirstGoldRewardState", c_ubyte),    #首充奖励是否已领奖 | 
|---|
|  |  |  | ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x02 | 
|---|
|  |  |  | self.FirstGoldRewardState = 0 | 
|---|
|  |  |  | self.FirstGoldTry = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | FirstGoldRewardState:%d | 
|---|
|  |  |  | FirstGoldRewardState:%d, | 
|---|
|  |  |  | FirstGoldTry:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.FirstGoldRewardState | 
|---|
|  |  |  | self.FirstGoldRewardState, | 
|---|
|  |  |  | self.FirstGoldTry | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("FirstGoldRemainTime", c_int),    #首充提示剩余时间 | 
|---|
|  |  |  | ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | self.FirstGoldRemainTime = 0 | 
|---|
|  |  |  | self.FirstGoldTry = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | FirstGoldRemainTime:%d, | 
|---|
|  |  |  | FirstGoldTry:%d | 
|---|
|  |  |  | FirstGoldRemainTime:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.FirstGoldRemainTime, | 
|---|
|  |  |  | self.FirstGoldTry | 
|---|
|  |  |  | self.FirstGoldRemainTime | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟 | 
|---|
|  |  |  | ActivityTimeCount = 0    #(BYTE ActivityTimeCount) | 
|---|
|  |  |  | ActivityTime = list()    #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间 | 
|---|
|  |  |  | IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置 | 
|---|
|  |  |  | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | temActivityTime = tagMCFlashGiftbagTime() | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.SubCmd = 0x12 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.AdvanceMinutes = 0 | 
|---|
|  |  |  | self.ActivityTimeCount = 0 | 
|---|
|  |  |  | self.ActivityTime = list() | 
|---|
|  |  |  | self.IsDayReset = 0 | 
|---|
|  |  |  | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | length += self.ActivityTime[i].GetLength() | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.StartDate) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.AdvanceMinutes) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) | 
|---|
|  |  |  | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | AdvanceMinutes:%d, | 
|---|
|  |  |  | ActivityTimeCount:%d, | 
|---|
|  |  |  | ActivityTime:%s, | 
|---|
|  |  |  | IsDayReset:%d, | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.AdvanceMinutes, | 
|---|
|  |  |  | self.ActivityTimeCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsDayReset, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCFlashGiftbagPlayerInfo=tagMCFlashGiftbagPlayerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagPlayerInfo.Head.Cmd,m_NAtagMCFlashGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 18 限时抢购活动玩家预约信息 #tagMCFlashSaleAppointmentInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleAppointmentState(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("GoodsMark", c_int),    # 商品标识 | 
|---|
|  |  |  | ("State", 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.GoodsMark = 0 | 
|---|
|  |  |  | self.State = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCFlashSaleAppointmentState) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 18 限时抢购活动玩家预约信息 //tagMCFlashSaleAppointmentInfo: | 
|---|
|  |  |  | GoodsMark:%d, | 
|---|
|  |  |  | State:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.GoodsMark, | 
|---|
|  |  |  | self.State | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleAppointmentInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | IsAll = 0    #(BYTE IsAll)// 是否全部 | 
|---|
|  |  |  | GoodsCount = 0    #(WORD GoodsCount)// 商品数 | 
|---|
|  |  |  | GoodsList = list()    #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x18 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.GoodsCount): | 
|---|
|  |  |  | temGoodsList = tagMCFlashSaleAppointmentState() | 
|---|
|  |  |  | _pos = temGoodsList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.GoodsList.append(temGoodsList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x18 | 
|---|
|  |  |  | self.IsAll = 0 | 
|---|
|  |  |  | self.GoodsCount = 0 | 
|---|
|  |  |  | self.GoodsList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | for i in range(self.GoodsCount): | 
|---|
|  |  |  | length += self.GoodsList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsAll) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.GoodsCount) | 
|---|
|  |  |  | for i in range(self.GoodsCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.GoodsList[i].GetLength(), self.GoodsList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | IsAll:%d, | 
|---|
|  |  |  | GoodsCount:%d, | 
|---|
|  |  |  | GoodsList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.IsAll, | 
|---|
|  |  |  | self.GoodsCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCFlashSaleAppointmentInfo=tagMCFlashSaleAppointmentInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleAppointmentInfo.Head.Cmd,m_NAtagMCFlashSaleAppointmentInfo.Head.SubCmd))] = m_NAtagMCFlashSaleAppointmentInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 17 限时抢购活动信息 #tagMCFlashSaleInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleGiftbag(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("GiftID", c_int),    #商城表的物品ID | 
|---|
|  |  |  | ("BuyCountLimit", c_ubyte),    #限购数 | 
|---|
|  |  |  | ("ServerBuyCountLimit", c_ushort),    #全服限购数 | 
|---|
|  |  |  | ("MoneyType", c_ubyte),    #消耗货币类型 | 
|---|
|  |  |  | ("MoneyNumber", c_int),    #消耗货币数量 | 
|---|
|  |  |  | ("MoneyOriginal", c_int),    #原价 | 
|---|
|  |  |  | ("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.GiftID = 0 | 
|---|
|  |  |  | self.BuyCountLimit = 0 | 
|---|
|  |  |  | self.ServerBuyCountLimit = 0 | 
|---|
|  |  |  | self.MoneyType = 0 | 
|---|
|  |  |  | self.MoneyNumber = 0 | 
|---|
|  |  |  | self.MoneyOriginal = 0 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.ItemCount = 0 | 
|---|
|  |  |  | self.IsBind = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCFlashSaleGiftbag) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 17 限时抢购活动信息 //tagMCFlashSaleInfo: | 
|---|
|  |  |  | GiftID:%d, | 
|---|
|  |  |  | BuyCountLimit:%d, | 
|---|
|  |  |  | ServerBuyCountLimit:%d, | 
|---|
|  |  |  | MoneyType:%d, | 
|---|
|  |  |  | MoneyNumber:%d, | 
|---|
|  |  |  | MoneyOriginal:%d, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCount:%d, | 
|---|
|  |  |  | IsBind:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.GiftID, | 
|---|
|  |  |  | self.BuyCountLimit, | 
|---|
|  |  |  | self.ServerBuyCountLimit, | 
|---|
|  |  |  | self.MoneyType, | 
|---|
|  |  |  | self.MoneyNumber, | 
|---|
|  |  |  | self.MoneyOriginal, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCount, | 
|---|
|  |  |  | self.IsBind | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleShop(Structure): | 
|---|
|  |  |  | DayIndex = 0    #(BYTE DayIndex)// 活动第几天 | 
|---|
|  |  |  | TimeIndex = 0    #(BYTE TimeIndex)// 第几个时间段 | 
|---|
|  |  |  | GiftbagCount = 0    #(BYTE GiftbagCount)// 商店礼包数 | 
|---|
|  |  |  | GiftbagInfo = list()    #(vector<tagMCFlashSaleGiftbag> GiftbagInfo)// 礼包信息 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.DayIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TimeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.GiftbagCount): | 
|---|
|  |  |  | temGiftbagInfo = tagMCFlashSaleGiftbag() | 
|---|
|  |  |  | _pos = temGiftbagInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.GiftbagInfo.append(temGiftbagInfo) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.DayIndex = 0 | 
|---|
|  |  |  | self.TimeIndex = 0 | 
|---|
|  |  |  | self.GiftbagCount = 0 | 
|---|
|  |  |  | self.GiftbagInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.GiftbagCount): | 
|---|
|  |  |  | length += self.GiftbagInfo[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.DayIndex) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TimeIndex) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.GiftbagCount) | 
|---|
|  |  |  | for i in range(self.GiftbagCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | DayIndex:%d, | 
|---|
|  |  |  | TimeIndex:%d, | 
|---|
|  |  |  | GiftbagCount:%d, | 
|---|
|  |  |  | GiftbagInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.DayIndex, | 
|---|
|  |  |  | self.TimeIndex, | 
|---|
|  |  |  | self.GiftbagCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleTime(Structure): | 
|---|
|  |  |  | StartTime = ""    #(char StartTime[5])// 开始时间 H:M | 
|---|
|  |  |  | EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) | 
|---|
|  |  |  | self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.StartTime = "" | 
|---|
|  |  |  | self.EndtTime = "" | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += 5 | 
|---|
|  |  |  | length += 5 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 5, self.StartTime) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 5, self.EndtTime) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | StartTime:%s, | 
|---|
|  |  |  | EndtTime:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.StartTime, | 
|---|
|  |  |  | self.EndtTime | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCFlashSaleInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟 | 
|---|
|  |  |  | ActivityTimeCount = 0    #(BYTE ActivityTimeCount) | 
|---|
|  |  |  | ActivityTime = list()    #(vector<tagMCFlashSaleTime> ActivityTime)//活动时间 | 
|---|
|  |  |  | IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置 | 
|---|
|  |  |  | LimitLV = 0    #(WORD LimitLV)// 限制等级 | 
|---|
|  |  |  | ShopCount = 0    #(BYTE ShopCount)// 商店数 | 
|---|
|  |  |  | ShopInfo = list()    #(vector<tagMCFlashSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店; | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x17 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | temActivityTime = tagMCFlashSaleTime() | 
|---|
|  |  |  | _pos = temActivityTime.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ActivityTime.append(temActivityTime) | 
|---|
|  |  |  | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.ShopCount): | 
|---|
|  |  |  | temShopInfo = tagMCFlashSaleShop() | 
|---|
|  |  |  | _pos = temShopInfo.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ShopInfo.append(temShopInfo) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAA | 
|---|
|  |  |  | self.Head.SubCmd = 0x17 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.AdvanceMinutes = 0 | 
|---|
|  |  |  | self.ActivityTimeCount = 0 | 
|---|
|  |  |  | self.ActivityTime = list() | 
|---|
|  |  |  | self.IsDayReset = 0 | 
|---|
|  |  |  | self.LimitLV = 0 | 
|---|
|  |  |  | self.ShopCount = 0 | 
|---|
|  |  |  | self.ShopInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | length += self.ActivityTime[i].GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.ShopCount): | 
|---|
|  |  |  | length += self.ShopInfo[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.StartDate) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.AdvanceMinutes) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsDayReset) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.LimitLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ShopCount) | 
|---|
|  |  |  | for i in range(self.ShopCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | AdvanceMinutes:%d, | 
|---|
|  |  |  | ActivityTimeCount:%d, | 
|---|
|  |  |  | ActivityTime:%s, | 
|---|
|  |  |  | IsDayReset:%d, | 
|---|
|  |  |  | LimitLV:%d, | 
|---|
|  |  |  | ShopCount:%d, | 
|---|
|  |  |  | ShopInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.AdvanceMinutes, | 
|---|
|  |  |  | self.ActivityTimeCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsDayReset, | 
|---|
|  |  |  | self.LimitLV, | 
|---|
|  |  |  | self.ShopCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCFlashSaleInfo=tagMCFlashSaleInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleInfo.Head.Cmd,m_NAtagMCFlashSaleInfo.Head.SubCmd))] = m_NAtagMCFlashSaleInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟 | 
|---|
|  |  |  | ActivityTimeCount = 0    #(BYTE ActivityTimeCount) | 
|---|
|  |  |  | ActivityTime = list()    #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间 | 
|---|
|  |  |  | IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置 | 
|---|
|  |  |  | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | temActivityTime = tagMCSpringSaleTime() | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.SubCmd = 0x11 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.AdvanceMinutes = 0 | 
|---|
|  |  |  | self.ActivityTimeCount = 0 | 
|---|
|  |  |  | self.ActivityTime = list() | 
|---|
|  |  |  | self.IsDayReset = 0 | 
|---|
|  |  |  | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | length += self.ActivityTime[i].GetLength() | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.StartDate) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.AdvanceMinutes) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) | 
|---|
|  |  |  | for i in range(self.ActivityTimeCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) | 
|---|
|  |  |  | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | AdvanceMinutes:%d, | 
|---|
|  |  |  | ActivityTimeCount:%d, | 
|---|
|  |  |  | ActivityTime:%s, | 
|---|
|  |  |  | IsDayReset:%d, | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.AdvanceMinutes, | 
|---|
|  |  |  | self.ActivityTimeCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsDayReset, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCSpringSaleInfo=tagMCSpringSaleInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSpringSaleInfo.Head.Cmd,m_NAtagMCSpringSaleInfo.Head.SubCmd))] = m_NAtagMCSpringSaleInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 16 通知超值礼包信息 #tagMCSuperGiftInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCSuperGiftInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("StartTime", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | 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 = 0x16 | 
|---|
|  |  |  | self.StartTime = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCSuperGiftInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 16 通知超值礼包信息 //tagMCSuperGiftInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | StartTime:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.StartTime | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Cmd,m_NAtagMCSuperGiftInfo.SubCmd))] = m_NAtagMCSuperGiftInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d | 
|---|
|  |  |  | EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d | 
|---|
|  |  |  | ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 | 
|---|
|  |  |  | LimitLV = 0    #(WORD LimitLV)// 限制等级 | 
|---|
|  |  |  | TaskCnt = 0    #(BYTE TaskCnt) | 
|---|
|  |  |  | TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo) | 
|---|
|  |  |  | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) | 
|---|
|  |  |  | self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.TaskCnt): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | self.StartDate = "" | 
|---|
|  |  |  | self.EndtDate = "" | 
|---|
|  |  |  | self.ResetType = 0 | 
|---|
|  |  |  | self.LimitLV = 0 | 
|---|
|  |  |  | self.TaskCnt = 0 | 
|---|
|  |  |  | self.TaskInfo = list() | 
|---|
|  |  |  | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 10 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.TaskCnt): | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.StartDate) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 10, self.EndtDate) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ResetType) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.LimitLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TaskCnt) | 
|---|
|  |  |  | for i in range(self.TaskCnt): | 
|---|
|  |  |  | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | StartDate:%s, | 
|---|
|  |  |  | EndtDate:%s, | 
|---|
|  |  |  | ResetType:%d, | 
|---|
|  |  |  | LimitLV:%d, | 
|---|
|  |  |  | TaskCnt:%d, | 
|---|
|  |  |  | TaskInfo:%s | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.StartDate, | 
|---|
|  |  |  | self.EndtDate, | 
|---|
|  |  |  | self.ResetType, | 
|---|
|  |  |  | self.LimitLV, | 
|---|
|  |  |  | self.TaskCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCNotifyPlayerMove(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("PosX", c_int), | 
|---|
|  |  |  | ("PosY", c_int), | 
|---|
|  |  |  | ("NPCID", c_int),    #目标点寻路NPCID, 可能为0 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | 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 = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | self.PosX = 0 | 
|---|
|  |  |  | self.PosY = 0 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCNotifyPlayerMove) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B1 06 通知玩家向目标点移动 //tagMCNotifyPlayerMove: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | PosX:%d, | 
|---|
|  |  |  | PosY:%d, | 
|---|
|  |  |  | NPCID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.PosX, | 
|---|
|  |  |  | self.PosY, | 
|---|
|  |  |  | self.NPCID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPlayerDeadTime(Structure): | 
|---|