From 787c076b2fdc73a11b9b76e2ea928f3da1f5873e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 19 十二月 2019 16:35:02 +0800
Subject: [PATCH] 8359 【主干】活跃兑换

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 1,089 insertions(+), 81 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index a406404..270b221 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -5778,6 +5778,342 @@
 
 
 #------------------------------------------------------
+# B0 01 新增协助 #tagGCAssistInfoList
+
+class  tagGCAssistInfo(Structure):
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        return _pos
+
+    def Clear(self):
+        self.AssistGUID = ""
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AssistGUID:%s,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s
+                                '''\
+                                %(
+                                self.AssistGUID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData
+                                )
+        return DumpString
+
+
+class  tagGCAssistInfoList(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    AssistInfoList = list()    #(vector<tagGCAssistInfo> AssistInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAssistInfoList = tagGCAssistInfo()
+            _pos = temAssistInfoList.ReadData(_lpData, _pos)
+            self.AssistInfoList.append(temAssistInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.AssistInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.AssistInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                AssistInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistInfoList=tagGCAssistInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
+
+
+#------------------------------------------------------
+# B0 03 正在进行中的协助 #tagGCAssistingInfo
+
+class  tagGCAssistingInfo(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistingInfo=tagGCAssistingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
+
+
+#------------------------------------------------------
+# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
+
+class  tagGCCanGetAssistThanksGiftCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CanGetCount", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        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 = 0xB0
+        self.SubCmd = 0x06
+        self.CanGetCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCanGetAssistThanksGiftCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CanGetCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CanGetCount
+                                )
+        return DumpString
+
+
+m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
+
+
+#------------------------------------------------------
+# B0 02 删除协助 #tagGCClearAssist
+
+class  tagGCClearAssist(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCClearAssist=tagGCClearAssist()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
+
+
+#------------------------------------------------------
 #B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
 
 class  tagFamilyArrestOverState(Structure):
@@ -5903,6 +6239,324 @@
 
 m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
+
+
+#------------------------------------------------------
+# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
+
+class  tagGCGetAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    PlayerID = 0    #(DWORD PlayerID)//发起玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    TimeStr = ""    #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
+    ExtraAward = 0    #(BYTE ExtraAward)//是否有额外奖励
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        self.ItemID = 0
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.TimeStr = ""
+        self.ExtraAward = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 19
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.ExtraAward)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                TimeStr:%s,
+                                ExtraAward:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.TimeStr,
+                                self.ExtraAward
+                                )
+        return DumpString
+
+
+m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
+
+
+#------------------------------------------------------
+# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
+
+class  tagGCAssistPlayerInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV
+                                )
+        return DumpString
+
+
+class  tagGCUseAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    AssistPlayerCount = 0    #(BYTE AssistPlayerCount)
+    AssistPlayerList = list()    #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AssistPlayerCount):
+            temAssistPlayerList = tagGCAssistPlayerInfo()
+            _pos = temAssistPlayerList.ReadData(_lpData, _pos)
+            self.AssistPlayerList.append(temAssistPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        self.ItemID = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.AssistPlayerCount = 0
+        self.AssistPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 1
+        for i in range(self.AssistPlayerCount):
+            length += self.AssistPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
+        for i in range(self.AssistPlayerCount):
+            data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                AssistPlayerCount:%d,
+                                AssistPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.AssistPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
 
 
 #------------------------------------------------------
@@ -15932,6 +16586,114 @@
 
 
 #------------------------------------------------------
+# A3 C2 大师强化等级激活信息 #tagMCMasterPlusLVInfo
+
+class  tagMCMasterPlusLV(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ClassLV", c_ubyte),    
+                  ("MasterPlusLV", c_ushort),    # 已经激活的最高大师强化等级,向下兼容
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ClassLV = 0
+        self.MasterPlusLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMasterPlusLV)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C2 大师强化等级激活信息 //tagMCMasterPlusLVInfo:
+                                ClassLV:%d,
+                                MasterPlusLV:%d
+                                '''\
+                                %(
+                                self.ClassLV,
+                                self.MasterPlusLV
+                                )
+        return DumpString
+
+
+class  tagMCMasterPlusLVInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    MasterPlusLVInfoList = list()    #(vector<tagMCMasterPlusLV> MasterPlusLVInfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC2
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temMasterPlusLVInfoList = tagMCMasterPlusLV()
+            _pos = temMasterPlusLVInfoList.ReadData(_lpData, _pos)
+            self.MasterPlusLVInfoList.append(temMasterPlusLVInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC2
+        self.Count = 0
+        self.MasterPlusLVInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.MasterPlusLVInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.MasterPlusLVInfoList[i].GetLength(), self.MasterPlusLVInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                MasterPlusLVInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCMasterPlusLVInfo=tagMCMasterPlusLVInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMasterPlusLVInfo.Head.Cmd,m_NAtagMCMasterPlusLVInfo.Head.SubCmd))] = m_NAtagMCMasterPlusLVInfo
+
+
+#------------------------------------------------------
 #A3 1B 玩家自动战斗设置储存信息通知#tagMCAutoFightSetting
 
 class  tagMCAutoFightSetting(Structure):
@@ -18381,16 +19143,20 @@
 #------------------------------------------------------
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
-class  tagMCHorseInfo(Structure):
+class  tagTrainHorseData(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("HorseID", c_int),    #ID
-                  ("LV", c_ubyte),    #等级
-                  ("Exp", c_int),    #经验
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LV", c_ubyte),    #等阶
+                  ("EatItemCount", c_ushort),    #当前阶已吃丹个数
+                  ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
                   ]
 
     def __init__(self):
         self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x01
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -18399,102 +19165,39 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.HorseID = 0
+        self.Cmd = 0xA3
+        self.SubCmd = 0x01
         self.LV = 0
-        self.Exp = 0
+        self.EatItemCount = 0
+        self.SkinPlusState = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCHorseInfo)
+        return sizeof(tagTrainHorseData)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
-                                HorseID:%d,
+                                Cmd:%s,
+                                SubCmd:%s,
                                 LV:%d,
-                                Exp:%d
+                                EatItemCount:%d,
+                                SkinPlusState:%d
                                 '''\
                                 %(
-                                self.HorseID,
+                                self.Cmd,
+                                self.SubCmd,
                                 self.LV,
-                                self.Exp
-                                )
-        return DumpString
-
-
-class  tagTrainHorseData(Structure):
-    Head = tagHead()
-    Multiple = 0    #(BYTE Multiple)//下次暴击倍数
-    Num = 0    #(BYTE Num)//个数
-    InfoList = list()    #(vector<tagMCHorseInfo> InfoList)// 坐骑数据列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Num):
-            temInfoList = tagMCHorseInfo()
-            _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 = 0x01
-        self.Multiple = 0
-        self.Num = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Num):
-            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.Multiple)
-        data = CommFunc.WriteBYTE(data, self.Num)
-        for i in range(self.Num):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Multiple:%d,
-                                Num:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Multiple,
-                                self.Num,
-                                "..."
+                                self.EatItemCount,
+                                self.SkinPlusState
                                 )
         return DumpString
 
 
 m_NAtagTrainHorseData=tagTrainHorseData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
 
 
 #------------------------------------------------------
@@ -28494,6 +29197,91 @@
 
 
 #------------------------------------------------------
+# B0 27 活跃放置信息 #tagMCActivityPlaceInfo
+
+class  tagMCActivityPlaceInfo(Structure):
+    Head = tagHead()
+    PlaceState = 0    #(BYTE PlaceState)// 是否启动状态
+    StartTime = 0    #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
+    RewardCount = 0    #(BYTE RewardCount)// 累计未领取探索奖励次数
+    RewardLen = 0    #(BYTE RewardLen)
+    RewardInfo = ""    #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlaceState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x27
+        self.PlaceState = 0
+        self.StartTime = 0
+        self.RewardCount = 0
+        self.RewardLen = 0
+        self.RewardInfo = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        length += len(self.RewardInfo)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.PlaceState)
+        data = CommFunc.WriteDWORD(data, self.StartTime)
+        data = CommFunc.WriteBYTE(data, self.RewardCount)
+        data = CommFunc.WriteBYTE(data, self.RewardLen)
+        data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlaceState:%d,
+                                StartTime:%d,
+                                RewardCount:%d,
+                                RewardLen:%d,
+                                RewardInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlaceState,
+                                self.StartTime,
+                                self.RewardCount,
+                                self.RewardLen,
+                                self.RewardInfo
+                                )
+        return DumpString
+
+
+m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo
+
+
+#------------------------------------------------------
 #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
 
 class  tagFamilyArrestAwardReceiveState(Structure):
@@ -30718,6 +31506,226 @@
 
 
 #------------------------------------------------------
+# B4 15 Boss伤血排行榜信息 #tagMCBossHurtValueRankInfo
+
+class  tagMCBossHurtValueAssist(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 助战玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
+    HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagMCBossHurtValue(Structure):
+    HurtType = 0    #(BYTE HurtType)// 伤血类型 1-玩家,2-队伍
+    HurtID = 0    #(DWORD HurtID)//玩家时为玩家ID,队伍时为队伍ID
+    HurtName = ""    #(char HurtName[33])// 名称
+    HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
+    HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.HurtType = 0
+        self.HurtID = 0
+        self.HurtName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.HurtType)
+        data = CommFunc.WriteDWORD(data, self.HurtID)
+        data = CommFunc.WriteString(data, 33, self.HurtName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                HurtType:%d,
+                                HurtID:%d,
+                                HurtName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.HurtType,
+                                self.HurtID,
+                                self.HurtName,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagMCBossHurtValueRankInfo(Structure):
+    Head = tagHead()
+    ObjID = 0    #(DWORD ObjID)//NPC实例ID
+    HurtCount = 0    #(BYTE HurtCount)//伤血数目
+    HurtValueList = list()    #(vector<tagMCBossHurtValue> HurtValueList)
+    AssistHurtCount = 0    #(BYTE AssistHurtCount)//助战伤血数目
+    AssistHurtValueList = list()    #(vector<tagMCBossHurtValueAssist> AssistHurtValueList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB4
+        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.HurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HurtCount):
+            temHurtValueList = tagMCBossHurtValue()
+            _pos = temHurtValueList.ReadData(_lpData, _pos)
+            self.HurtValueList.append(temHurtValueList)
+        self.AssistHurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AssistHurtCount):
+            temAssistHurtValueList = tagMCBossHurtValueAssist()
+            _pos = temAssistHurtValueList.ReadData(_lpData, _pos)
+            self.AssistHurtValueList.append(temAssistHurtValueList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x15
+        self.ObjID = 0
+        self.HurtCount = 0
+        self.HurtValueList = list()
+        self.AssistHurtCount = 0
+        self.AssistHurtValueList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.HurtCount):
+            length += self.HurtValueList[i].GetLength()
+        length += 1
+        for i in range(self.AssistHurtCount):
+            length += self.AssistHurtValueList[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.WriteBYTE(data, self.HurtCount)
+        for i in range(self.HurtCount):
+            data = CommFunc.WriteString(data, self.HurtValueList[i].GetLength(), self.HurtValueList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AssistHurtCount)
+        for i in range(self.AssistHurtCount):
+            data = CommFunc.WriteString(data, self.AssistHurtValueList[i].GetLength(), self.AssistHurtValueList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ObjID:%d,
+                                HurtCount:%d,
+                                HurtValueList:%s,
+                                AssistHurtCount:%d,
+                                AssistHurtValueList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ObjID,
+                                self.HurtCount,
+                                "...",
+                                self.AssistHurtCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossHurtValueRankInfo=tagMCBossHurtValueRankInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossHurtValueRankInfo.Head.Cmd,m_NAtagMCBossHurtValueRankInfo.Head.SubCmd))] = m_NAtagMCBossHurtValueRankInfo
+
+
+#------------------------------------------------------
 # B4 12 删除恶意攻击玩家 #tagMCDelMaliciousAtkPlayer
 
 class  tagMCDelMaliciousAtkPlayer(Structure):

--
Gitblit v1.8.0