From 718f530accc19969f39d1a8ce199fe947508e29a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 16 十月 2025 19:19:09 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(每日任务、每周奖励;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 2184 +++++++++++++++++++++-------------------------------------
 1 files changed, 784 insertions(+), 1,400 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index c32e6bf..bb7adba 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -4207,69 +4207,18 @@
 
 
 #------------------------------------------------------
-# A3 15 日常活动次数通知 #tagMCDailyActionCnt
+#A3 0D 玩家签到信息记录 # tagSCDaySignInfo
 
-class  tagMCDailyActionInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ActionID", c_int),    # ID
-                  ("DayFinishCnt", c_ushort),    # 今日已完成次数
-                  ("DayBuyTimes", c_ubyte),    # 今日购买次数
-                  ("DayItemTimes", c_ubyte),    # 今日物品增加次数
-                  ("WeekFinishCnt", 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.ActionID = 0
-        self.DayFinishCnt = 0
-        self.DayBuyTimes = 0
-        self.DayItemTimes = 0
-        self.WeekFinishCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDailyActionInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 15 日常活动次数通知 //tagMCDailyActionCnt:
-                                ActionID:%d,
-                                DayFinishCnt:%d,
-                                DayBuyTimes:%d,
-                                DayItemTimes:%d,
-                                WeekFinishCnt:%d
-                                '''\
-                                %(
-                                self.ActionID,
-                                self.DayFinishCnt,
-                                self.DayBuyTimes,
-                                self.DayItemTimes,
-                                self.WeekFinishCnt
-                                )
-        return DumpString
-
-
-class  tagMCDailyActionCnt(Structure):
+class  tagSCDaySignInfo(Structure):
     Head = tagHead()
-    Count = 0    #(BYTE Count)// 个数
-    ActionInfo = list()    #(vector<tagMCDailyActionInfo> ActionInfo)// 活动信息
+    Count = 0    #(BYTE Count)
+    SignStateList = list()    #(vector<BYTE> SignStateList)//每日签到状态记录列表 [第1天状态, ...]  状态:0-不可签到;1-已签到;2-可补签;3-已领取
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x15
+        self.Head.SubCmd = 0x0D
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
@@ -4277,26 +4226,24 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
-            temActionInfo = tagMCDailyActionInfo()
-            _pos = temActionInfo.ReadData(_lpData, _pos)
-            self.ActionInfo.append(temActionInfo)
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.SignStateList.append(value)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x15
+        self.Head.SubCmd = 0x0D
         self.Count = 0
-        self.ActionInfo = list()
+        self.SignStateList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        for i in range(self.Count):
-            length += self.ActionInfo[i].GetLength()
+        length += 1 * self.Count
 
         return length
 
@@ -4305,14 +4252,14 @@
         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.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
+            data = CommFunc.WriteBYTE(data, self.SignStateList[i])
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 Count:%d,
-                                ActionInfo:%s
+                                SignStateList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -4322,144 +4269,8 @@
         return DumpString
 
 
-m_NAtagMCDailyActionCnt=tagMCDailyActionCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyActionCnt.Head.Cmd,m_NAtagMCDailyActionCnt.Head.SubCmd))] = m_NAtagMCDailyActionCnt
-
-
-#------------------------------------------------------
-#A3 33 玩家每日活跃度 #tagMCDailyActivityInfoList
-
-class  tagMCDailyActivityInfoList(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CurValue", c_int),    # 当前总活跃度
-                  ("RealmPoint", c_int),    # 可领取修行点
-                  ("StageIndex", c_ubyte),    # 当前阶段索引
-                  ("AwardRecord", c_int),    # 领奖记录 按位存储
-                  ("ExtraPoint", c_int),    # 多倍活动获得的额外修行点
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x33
-        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 = 0x33
-        self.CurValue = 0
-        self.RealmPoint = 0
-        self.StageIndex = 0
-        self.AwardRecord = 0
-        self.ExtraPoint = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDailyActivityInfoList)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 33 玩家每日活跃度 //tagMCDailyActivityInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CurValue:%d,
-                                RealmPoint:%d,
-                                StageIndex:%d,
-                                AwardRecord:%d,
-                                ExtraPoint:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CurValue,
-                                self.RealmPoint,
-                                self.StageIndex,
-                                self.AwardRecord,
-                                self.ExtraPoint
-                                )
-        return DumpString
-
-
-m_NAtagMCDailyActivityInfoList=tagMCDailyActivityInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyActivityInfoList.Cmd,m_NAtagMCDailyActivityInfoList.SubCmd))] = m_NAtagMCDailyActivityInfoList
-
-
-#------------------------------------------------------
-#A3 0D 玩家签到信息记录 # tagMCDaySignInfo
-
-class  tagMCDaySignInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("DaySignCount", c_ubyte),    #已经签到天数
-                  ("ReplenishSignCount", c_ubyte),    # 可以补签天数
-                  ("IsSign", c_ubyte),    #当天是否已经签到,发送0和1
-                  ("IsFrist", c_ubyte),    #是否是第一个月
-                  ("TotalSignCount", c_ushort),    #累计总签到天数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0D
-        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 = 0x0D
-        self.DaySignCount = 0
-        self.ReplenishSignCount = 0
-        self.IsSign = 0
-        self.IsFrist = 0
-        self.TotalSignCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDaySignInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 0D 玩家签到信息记录 // tagMCDaySignInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                DaySignCount:%d,
-                                ReplenishSignCount:%d,
-                                IsSign:%d,
-                                IsFrist:%d,
-                                TotalSignCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.DaySignCount,
-                                self.ReplenishSignCount,
-                                self.IsSign,
-                                self.IsFrist,
-                                self.TotalSignCount
-                                )
-        return DumpString
-
-
-m_NAtagMCDaySignInfo=tagMCDaySignInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDaySignInfo.Cmd,m_NAtagMCDaySignInfo.SubCmd))] = m_NAtagMCDaySignInfo
+m_NAtagSCDaySignInfo=tagSCDaySignInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCDaySignInfo.Head.Cmd,m_NAtagSCDaySignInfo.Head.SubCmd))] = m_NAtagSCDaySignInfo
 
 
 #------------------------------------------------------
@@ -5088,121 +4899,6 @@
 
 m_NAtagMCEquipPartXLAttrInfo=tagMCEquipPartXLAttrInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartXLAttrInfo.Head.Cmd,m_NAtagMCEquipPartXLAttrInfo.Head.SubCmd))] = m_NAtagMCEquipPartXLAttrInfo
-
-
-#------------------------------------------------------
-# A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo
-
-class  tagMCFamilyActionCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ActionID", c_ubyte),    # ID
-                  ("FinishCnt", 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.ActionID = 0
-        self.FinishCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFamilyActionCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 16 仙盟活跃信息通知 //tagMCFamilyActivityInfo:
-                                ActionID:%d,
-                                FinishCnt:%d
-                                '''\
-                                %(
-                                self.ActionID,
-                                self.FinishCnt
-                                )
-        return DumpString
-
-
-class  tagMCFamilyActivityInfo(Structure):
-    Head = tagHead()
-    AwardRecord = 0    #(DWORD AwardRecord)// 领奖情况记录
-    Count = 0    #(BYTE Count)// 个数
-    InfoList = list()    #(vector<tagMCFamilyActionCnt> InfoList)// 活动信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x16
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temInfoList = tagMCFamilyActionCnt()
-            _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 = 0x16
-        self.AwardRecord = 0
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        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.WriteDWORD(data, self.AwardRecord)
-        data = CommFunc.WriteBYTE(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,
-                                AwardRecord:%d,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AwardRecord,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCFamilyActivityInfo=tagMCFamilyActivityInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityInfo.Head.Cmd,m_NAtagMCFamilyActivityInfo.Head.SubCmd))] = m_NAtagMCFamilyActivityInfo
 
 
 #------------------------------------------------------
@@ -6132,6 +5828,7 @@
                   ("GubaoID", c_ushort),    
                   ("GubaoStar", c_ubyte),    
                   ("GubaoLV", c_ubyte),    
+                  ("EffLayer", c_ubyte),    # 该特殊效果累加层值
                   ]
 
     def __init__(self):
@@ -6147,6 +5844,7 @@
         self.GubaoID = 0
         self.GubaoStar = 0
         self.GubaoLV = 0
+        self.EffLayer = 0
         return
 
     def GetLength(self):
@@ -6159,19 +5857,21 @@
         DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo:
                                 GubaoID:%d,
                                 GubaoStar:%d,
-                                GubaoLV:%d
+                                GubaoLV:%d,
+                                EffLayer:%d
                                 '''\
                                 %(
                                 self.GubaoID,
                                 self.GubaoStar,
-                                self.GubaoLV
+                                self.GubaoLV,
+                                self.EffLayer
                                 )
         return DumpString
 
 
 class  tagMCGubaoInfo(Structure):
     Head = tagHead()
-    Count = 0    #(BYTE Count)
+    Count = 0    #(WORD Count)
     GubaoInfoList = list()    #(vector<tagMCGubao> GubaoInfoList)
     data = None
 
@@ -6184,7 +5884,7 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.Count):
             temGubaoInfoList = tagMCGubao()
             _pos = temGubaoInfoList.ReadData(_lpData, _pos)
@@ -6203,7 +5903,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 1
+        length += 2
         for i in range(self.Count):
             length += self.GubaoInfoList[i].GetLength()
 
@@ -6212,7 +5912,7 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
+        data = CommFunc.WriteWORD(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer())
         return data
@@ -6233,226 +5933,6 @@
 
 m_NAtagMCGubaoInfo=tagMCGubaoInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo
-
-
-#------------------------------------------------------
-# A3 CA 古宝物品特殊效果信息 #tagMCGubaoItemEffInfo
-
-class  tagMCGubaoItemEff(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("GubaoID", c_ushort),    
-                  ("EffType", c_ubyte),    # 不同古宝ID允许拥有相同效果类型,进度值每个古宝ID单独统计
-                  ("EffValue", 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.GubaoID = 0
-        self.EffType = 0
-        self.EffValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGubaoItemEff)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 CA 古宝物品特殊效果信息 //tagMCGubaoItemEffInfo:
-                                GubaoID:%d,
-                                EffType:%d,
-                                EffValue:%d
-                                '''\
-                                %(
-                                self.GubaoID,
-                                self.EffType,
-                                self.EffValue
-                                )
-        return DumpString
-
-
-class  tagMCGubaoItemEffInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    ItemEffInfoList = list()    #(vector<tagMCGubaoItemEff> ItemEffInfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCA
-        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):
-            temItemEffInfoList = tagMCGubaoItemEff()
-            _pos = temItemEffInfoList.ReadData(_lpData, _pos)
-            self.ItemEffInfoList.append(temItemEffInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCA
-        self.Count = 0
-        self.ItemEffInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.ItemEffInfoList[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.ItemEffInfoList[i].GetLength(), self.ItemEffInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                ItemEffInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGubaoItemEffInfo=tagMCGubaoItemEffInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoItemEffInfo.Head.Cmd,m_NAtagMCGubaoItemEffInfo.Head.SubCmd))] = m_NAtagMCGubaoItemEffInfo
-
-
-#------------------------------------------------------
-# A3 CB 古宝碎片信息 #tagMCGubaoPieceInfo
-
-class  tagMCGubaoPiece(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("GubaoID", c_ushort),    
-                  ("PieceCount", 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.GubaoID = 0
-        self.PieceCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGubaoPiece)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 CB 古宝碎片信息 //tagMCGubaoPieceInfo:
-                                GubaoID:%d,
-                                PieceCount:%d
-                                '''\
-                                %(
-                                self.GubaoID,
-                                self.PieceCount
-                                )
-        return DumpString
-
-
-class  tagMCGubaoPieceInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    PieceInfoList = list()    #(vector<tagMCGubaoPiece> PieceInfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCB
-        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):
-            temPieceInfoList = tagMCGubaoPiece()
-            _pos = temPieceInfoList.ReadData(_lpData, _pos)
-            self.PieceInfoList.append(temPieceInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCB
-        self.Count = 0
-        self.PieceInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.PieceInfoList[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.PieceInfoList[i].GetLength(), self.PieceInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                PieceInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGubaoPieceInfo=tagMCGubaoPieceInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoPieceInfo.Head.Cmd,m_NAtagMCGubaoPieceInfo.Head.SubCmd))] = m_NAtagMCGubaoPieceInfo
 
 
 #------------------------------------------------------
@@ -8114,80 +7594,6 @@
 
 
 #------------------------------------------------------
-#A3 08 在线奖励信息 #tagMCOnlinePrize
-
-class  tagMCOnlinePrize(Structure):
-    Head = tagHead()
-    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
-    Len = 0    #(BYTE Len)
-    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Len):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.PrizeInfo.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x08
-        self.OnlineTime = 0
-        self.Len = 0
-        self.PrizeInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.Len
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.OnlineTime)
-        data = CommFunc.WriteBYTE(data, self.Len)
-        for i in range(self.Len):
-            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                OnlineTime:%d,
-                                Len:%d,
-                                PrizeInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.OnlineTime,
-                                self.Len,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCOnlinePrize=tagMCOnlinePrize()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrize.Head.Cmd,m_NAtagMCOnlinePrize.Head.SubCmd))] = m_NAtagMCOnlinePrize
-
-
-#------------------------------------------------------
 # A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
 
 class  tagMCPackDownloadRecord(Structure):
@@ -8293,145 +7699,6 @@
 
 m_NAtagMCPlayerLVAwardGetRecord=tagMCPlayerLVAwardGetRecord()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerLVAwardGetRecord.Cmd,m_NAtagMCPlayerLVAwardGetRecord.SubCmd))] = m_NAtagMCPlayerLVAwardGetRecord
-
-
-#------------------------------------------------------
-#A3 03 玩家在线奖励信息(暂停使用) #tagMCPlayerOnlinePrizeInfo
-
-class  tagMCOnlinePrizeItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PrizeItem", c_int),    
-                  ("ItemCount", c_ubyte),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x03
-        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 = 0x03
-        self.PrizeItem = 0
-        self.ItemCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCOnlinePrizeItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 03 玩家在线奖励信息(暂停使用) //tagMCPlayerOnlinePrizeInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PrizeItem:%d,
-                                ItemCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PrizeItem,
-                                self.ItemCount
-                                )
-        return DumpString
-
-
-class  tagMCPlayerOnlinePrizeInfo(Structure):
-    Head = tagHead()
-    RemaindTime = 0    #(DWORD RemaindTime)//产生奖励剩余时间
-    HasPrize = 0    #(BYTE HasPrize)//是否可以领取 
-    PrizeType = 0    #(BYTE PrizeType)//在线奖励类型
-    PrizeCnt = 0    #(BYTE PrizeCnt)//在线奖励类型
-    PrizeInfo = list()    #(vector<tagMCOnlinePrizeItem> PrizeInfo)//在线奖励类型
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RemaindTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HasPrize,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PrizeType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PrizeCnt):
-            temPrizeInfo = tagMCOnlinePrizeItem()
-            _pos = temPrizeInfo.ReadData(_lpData, _pos)
-            self.PrizeInfo.append(temPrizeInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x03
-        self.RemaindTime = 0
-        self.HasPrize = 0
-        self.PrizeType = 0
-        self.PrizeCnt = 0
-        self.PrizeInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.PrizeCnt):
-            length += self.PrizeInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RemaindTime)
-        data = CommFunc.WriteBYTE(data, self.HasPrize)
-        data = CommFunc.WriteBYTE(data, self.PrizeType)
-        data = CommFunc.WriteBYTE(data, self.PrizeCnt)
-        for i in range(self.PrizeCnt):
-            data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RemaindTime:%d,
-                                HasPrize:%d,
-                                PrizeType:%d,
-                                PrizeCnt:%d,
-                                PrizeInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RemaindTime,
-                                self.HasPrize,
-                                self.PrizeType,
-                                self.PrizeCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerOnlinePrizeInfo=tagMCPlayerOnlinePrizeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerOnlinePrizeInfo.Head.Cmd,m_NAtagMCPlayerOnlinePrizeInfo.Head.SubCmd))] = m_NAtagMCPlayerOnlinePrizeInfo
 
 
 #------------------------------------------------------
@@ -10008,114 +9275,6 @@
 
 m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
-
-
-#------------------------------------------------------
-# A3 CE 称号星级信息 #tagMCTitleStarInfo
-
-class  tagMCTitleStar(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TitleID", c_int),    # 称号ID
-                  ("Star", 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.TitleID = 0
-        self.Star = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCTitleStar)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 CE 称号星级信息 //tagMCTitleStarInfo:
-                                TitleID:%d,
-                                Star:%d
-                                '''\
-                                %(
-                                self.TitleID,
-                                self.Star
-                                )
-        return DumpString
-
-
-class  tagMCTitleStarInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    TitleStarList = list()    #(vector<tagMCTitleStar> TitleStarList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCE
-        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):
-            temTitleStarList = tagMCTitleStar()
-            _pos = temTitleStarList.ReadData(_lpData, _pos)
-            self.TitleStarList.append(temTitleStarList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xCE
-        self.Count = 0
-        self.TitleStarList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.TitleStarList[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.TitleStarList[i].GetLength(), self.TitleStarList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                TitleStarList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCTitleStarInfo=tagMCTitleStarInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTitleStarInfo.Head.Cmd,m_NAtagMCTitleStarInfo.Head.SubCmd))] = m_NAtagMCTitleStarInfo
 
 
 #------------------------------------------------------
@@ -13120,6 +12279,73 @@
 
 
 #------------------------------------------------------
+# A5 02 捐献次数信息 #tagSCDonateCntInfo
+
+class  tagSCDonateCntInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    DonateCntList = list()    #(vector<BYTE> DonateCntList)// 今日已捐献次数列表 [捐献类型1次数, ...]
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x02
+        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):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.DonateCntList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x02
+        self.Count = 0
+        self.DonateCntList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.Count
+
+        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.WriteBYTE(data, self.DonateCntList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                DonateCntList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCDonateCntInfo=tagSCDonateCntInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCDonateCntInfo.Head.Cmd,m_NAtagSCDonateCntInfo.Head.SubCmd))] = m_NAtagSCDonateCntInfo
+
+
+#------------------------------------------------------
 # A5 13 家族行为信息 #tagMCFamilyActionInfo
 
 class  tagMCFamilyAction(Structure):
@@ -13308,181 +12534,6 @@
 
 m_NAtagMCFamilyActionInfo=tagMCFamilyActionInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActionInfo.Head.Cmd,m_NAtagMCFamilyActionInfo.Head.SubCmd))] = m_NAtagMCFamilyActionInfo
-
-
-#------------------------------------------------------
-# A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult
-
-class  tagMCFamilyActivityExchangeResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Point", c_int),    # 活跃令
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x02
-        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 = 0xA5
-        self.SubCmd = 0x02
-        self.Point = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFamilyActivityExchangeResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 02 家族活跃令兑换结果 //tagMCFamilyActivityExchangeResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Point:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Point
-                                )
-        return DumpString
-
-
-m_NAtagMCFamilyActivityExchangeResult=tagMCFamilyActivityExchangeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityExchangeResult.Cmd,m_NAtagMCFamilyActivityExchangeResult.SubCmd))] = m_NAtagMCFamilyActivityExchangeResult
-
-
-#------------------------------------------------------
-# A5 08 家族事务信息 #tagMCFamilyAffairInfo
-
-class  tagMCFamilyAffair(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("AffairID", c_ushort),    # 事务ID
-                  ("Star", c_ubyte),    # 星级
-                  ("State", c_ubyte),    # 状态:0-无;1-进行中;2-已完成
-                  ("RemainDuration", 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.AffairID = 0
-        self.Star = 0
-        self.State = 0
-        self.RemainDuration = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFamilyAffair)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 08 家族事务信息 //tagMCFamilyAffairInfo:
-                                AffairID:%d,
-                                Star:%d,
-                                State:%d,
-                                RemainDuration:%d
-                                '''\
-                                %(
-                                self.AffairID,
-                                self.Star,
-                                self.State,
-                                self.RemainDuration
-                                )
-        return DumpString
-
-
-class  tagMCFamilyAffairInfo(Structure):
-    Head = tagHead()
-    RefreshFreeCount = 0    #(BYTE RefreshFreeCount)// 今日已免费刷新次数
-    Count = 0    #(BYTE Count)
-    AffairInfoList = list()    #(vector<tagMCFamilyAffair> AffairInfoList)// 事务列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RefreshFreeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAffairInfoList = tagMCFamilyAffair()
-            _pos = temAffairInfoList.ReadData(_lpData, _pos)
-            self.AffairInfoList.append(temAffairInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x08
-        self.RefreshFreeCount = 0
-        self.Count = 0
-        self.AffairInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Count):
-            length += self.AffairInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RefreshFreeCount)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AffairInfoList[i].GetLength(), self.AffairInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RefreshFreeCount:%d,
-                                Count:%d,
-                                AffairInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RefreshFreeCount,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCFamilyAffairInfo=tagMCFamilyAffairInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyAffairInfo.Head.Cmd,m_NAtagMCFamilyAffairInfo.Head.SubCmd))] = m_NAtagMCFamilyAffairInfo
 
 
 #------------------------------------------------------
@@ -13782,6 +12833,7 @@
     RealmLV = 0    #(BYTE RealmLV)//境界
     Face = 0    #(DWORD Face)//基本脸型
     FacePic = 0    #(DWORD FacePic)//头像框
+    TitleID = 0    #(DWORD TitleID)//称号
     FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
     ServerID = 0    #(DWORD ServerID)//所属区服ID
@@ -13803,6 +12855,7 @@
         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -13819,6 +12872,7 @@
         self.RealmLV = 0
         self.Face = 0
         self.FacePic = 0
+        self.TitleID = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.ServerID = 0
@@ -13839,6 +12893,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
         length += 1
 
         return length
@@ -13854,6 +12909,7 @@
         data = CommFunc.WriteBYTE(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.TitleID)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.ServerID)
@@ -13871,6 +12927,7 @@
                                 RealmLV:%d,
                                 Face:%d,
                                 FacePic:%d,
+                                TitleID:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 ServerID:%d,
@@ -13886,6 +12943,7 @@
                                 self.RealmLV,
                                 self.Face,
                                 self.FacePic,
+                                self.TitleID,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.ServerID,
@@ -14024,6 +13082,7 @@
 # A5 23 搜索家族返回列表 #tagMCFamilyViewList
 
 class  tagMCFamilyView(Structure):
+    Rank = 0    #(WORD Rank)//名次,从1开始
     FamilyID = 0    #(DWORD FamilyID)//家族ID
     FamilyNameLen = 0    #(BYTE FamilyNameLen)
     FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
@@ -14035,6 +13094,7 @@
     JoinLVMin = 0    #(WORD JoinLVMin)//限制最低可加入的玩家等级
     ServerID = 0    #(DWORD ServerID)//区服ID
     EmblemID = 0    #(DWORD EmblemID)//徽章ID
+    EmblemWord = ""    #(char EmblemWord[3])//徽章文字
     FightPower = 0    #(DWORD FightPower)//总战力,求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)//总战力,整除亿部分
     MemberCount = 0    #(BYTE MemberCount)//成员人数
@@ -14046,6 +13106,7 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
+        self.Rank,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyNameLen)
@@ -14057,12 +13118,14 @@
         self.JoinLVMin,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EmblemWord,_pos = CommFunc.ReadString(_lpData, _pos,3)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
+        self.Rank = 0
         self.FamilyID = 0
         self.FamilyNameLen = 0
         self.FamilyName = ""
@@ -14074,6 +13137,7 @@
         self.JoinLVMin = 0
         self.ServerID = 0
         self.EmblemID = 0
+        self.EmblemWord = ""
         self.FightPower = 0
         self.FightPowerEx = 0
         self.MemberCount = 0
@@ -14081,6 +13145,7 @@
 
     def GetLength(self):
         length = 0
+        length += 2
         length += 4
         length += 1
         length += len(self.FamilyName)
@@ -14092,6 +13157,7 @@
         length += 2
         length += 4
         length += 4
+        length += 3
         length += 4
         length += 4
         length += 1
@@ -14100,6 +13166,7 @@
 
     def GetBuffer(self):
         data = ''
+        data = CommFunc.WriteWORD(data, self.Rank)
         data = CommFunc.WriteDWORD(data, self.FamilyID)
         data = CommFunc.WriteBYTE(data, self.FamilyNameLen)
         data = CommFunc.WriteString(data, self.FamilyNameLen, self.FamilyName)
@@ -14111,6 +13178,7 @@
         data = CommFunc.WriteWORD(data, self.JoinLVMin)
         data = CommFunc.WriteDWORD(data, self.ServerID)
         data = CommFunc.WriteDWORD(data, self.EmblemID)
+        data = CommFunc.WriteString(data, 3, self.EmblemWord)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteBYTE(data, self.MemberCount)
@@ -14118,6 +13186,7 @@
 
     def OutputString(self):
         DumpString = '''
+                                Rank:%d,
                                 FamilyID:%d,
                                 FamilyNameLen:%d,
                                 FamilyName:%s,
@@ -14129,11 +13198,13 @@
                                 JoinLVMin:%d,
                                 ServerID:%d,
                                 EmblemID:%d,
+                                EmblemWord:%s,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 MemberCount:%d
                                 '''\
                                 %(
+                                self.Rank,
                                 self.FamilyID,
                                 self.FamilyNameLen,
                                 self.FamilyName,
@@ -14145,6 +13216,7 @@
                                 self.JoinLVMin,
                                 self.ServerID,
                                 self.EmblemID,
+                                self.EmblemWord,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.MemberCount
@@ -14496,114 +13568,6 @@
 
 
 #------------------------------------------------------
-# A5 04 玩家战盟科技等级 #tagMCPlayerTechInfo
-
-class  tagMCPlayerTech(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TechID", c_ushort),    # 科技ID
-                  ("TechLV", 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.TechID = 0
-        self.TechLV = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPlayerTech)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 04 玩家战盟科技等级 //tagMCPlayerTechInfo:
-                                TechID:%d,
-                                TechLV:%d
-                                '''\
-                                %(
-                                self.TechID,
-                                self.TechLV
-                                )
-        return DumpString
-
-
-class  tagMCPlayerTechInfo(Structure):
-    Head = tagHead()
-    TechCnt = 0    #(BYTE TechCnt)// 科技个数
-    TechInfoList = list()    #(vector<tagMCPlayerTech> TechInfoList)// 科技信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TechCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TechCnt):
-            temTechInfoList = tagMCPlayerTech()
-            _pos = temTechInfoList.ReadData(_lpData, _pos)
-            self.TechInfoList.append(temTechInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x04
-        self.TechCnt = 0
-        self.TechInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.TechCnt):
-            length += self.TechInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TechCnt)
-        for i in range(self.TechCnt):
-            data = CommFunc.WriteString(data, self.TechInfoList[i].GetLength(), self.TechInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TechCnt:%d,
-                                TechInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TechCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerTechInfo=tagMCPlayerTechInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerTechInfo.Head.Cmd,m_NAtagMCPlayerTechInfo.Head.SubCmd))] = m_NAtagMCPlayerTechInfo
-
-
-#------------------------------------------------------
 # A5 20 玩家家族信息 #tagMCRoleFamilyInfo
 
 class  tagMCRoleFamilyMember(Structure):
@@ -14617,11 +13581,14 @@
     RealmLV = 0    #(BYTE RealmLV)//境界
     Face = 0    #(DWORD Face)//基本脸型
     FacePic = 0    #(DWORD FacePic)//头像框
+    TitleID = 0    #(DWORD TitleID)//称号
     FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
     ServerID = 0    #(DWORD ServerID)//所属区服ID
     ContribTotal = 0    #(DWORD ContribTotal)//总贡献度
-    ContribWeek = 0    #(DWORD ContribWeek)//周贡献度
+    ContribDay = 0    #(DWORD ContribDay)//日贡献度
+    DonateCntTotal = 0    #(DWORD DonateCntTotal)//总捐献次数
+    DonateCntDay = 0    #(BYTE DonateCntDay)//日捐献次数
     OffTime = 0    #(DWORD OffTime)// 0-在线; >0-/离线时间戳
     data = None
 
@@ -14641,11 +13608,14 @@
         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ContribTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ContribWeek,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ContribDay,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DonateCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DonateCntDay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.OffTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
@@ -14660,11 +13630,14 @@
         self.RealmLV = 0
         self.Face = 0
         self.FacePic = 0
+        self.TitleID = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.ServerID = 0
         self.ContribTotal = 0
-        self.ContribWeek = 0
+        self.ContribDay = 0
+        self.DonateCntTotal = 0
+        self.DonateCntDay = 0
         self.OffTime = 0
         return
 
@@ -14686,6 +13659,9 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 1
+        length += 4
 
         return length
 
@@ -14701,11 +13677,14 @@
         data = CommFunc.WriteBYTE(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.TitleID)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.ServerID)
         data = CommFunc.WriteDWORD(data, self.ContribTotal)
-        data = CommFunc.WriteDWORD(data, self.ContribWeek)
+        data = CommFunc.WriteDWORD(data, self.ContribDay)
+        data = CommFunc.WriteDWORD(data, self.DonateCntTotal)
+        data = CommFunc.WriteBYTE(data, self.DonateCntDay)
         data = CommFunc.WriteDWORD(data, self.OffTime)
         return data
 
@@ -14721,11 +13700,14 @@
                                 RealmLV:%d,
                                 Face:%d,
                                 FacePic:%d,
+                                TitleID:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 ServerID:%d,
                                 ContribTotal:%d,
-                                ContribWeek:%d,
+                                ContribDay:%d,
+                                DonateCntTotal:%d,
+                                DonateCntDay:%d,
                                 OffTime:%d
                                 '''\
                                 %(
@@ -14739,11 +13721,14 @@
                                 self.RealmLV,
                                 self.Face,
                                 self.FacePic,
+                                self.TitleID,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.ServerID,
                                 self.ContribTotal,
-                                self.ContribWeek,
+                                self.ContribDay,
+                                self.DonateCntTotal,
+                                self.DonateCntDay,
                                 self.OffTime
                                 )
         return DumpString
@@ -14759,6 +13744,7 @@
     JoinLVMin = 0    #(WORD JoinLVMin)//限制最低可加入的玩家等级
     ServerID = 0    #(DWORD ServerID)//区服ID,创建时以族长的区服ID赋值
     EmblemID = 0    #(DWORD EmblemID)//徽章ID
+    EmblemWord = ""    #(char EmblemWord[3])//徽章文字
     FightPower = 0    #(DWORD FightPower)//总战力,求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)//总战力,整除亿部分
     BroadcastLen = 0    #(WORD BroadcastLen)//公告
@@ -14785,6 +13771,7 @@
         self.JoinLVMin,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EmblemWord,_pos = CommFunc.ReadString(_lpData, _pos,3)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
@@ -14810,6 +13797,7 @@
         self.JoinLVMin = 0
         self.ServerID = 0
         self.EmblemID = 0
+        self.EmblemWord = ""
         self.FightPower = 0
         self.FightPowerEx = 0
         self.BroadcastLen = 0
@@ -14830,6 +13818,7 @@
         length += 2
         length += 4
         length += 4
+        length += 3
         length += 4
         length += 4
         length += 2
@@ -14852,6 +13841,7 @@
         data = CommFunc.WriteWORD(data, self.JoinLVMin)
         data = CommFunc.WriteDWORD(data, self.ServerID)
         data = CommFunc.WriteDWORD(data, self.EmblemID)
+        data = CommFunc.WriteString(data, 3, self.EmblemWord)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteWORD(data, self.BroadcastLen)
@@ -14873,6 +13863,7 @@
                                 JoinLVMin:%d,
                                 ServerID:%d,
                                 EmblemID:%d,
+                                EmblemWord:%s,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 BroadcastLen:%d,
@@ -14891,6 +13882,7 @@
                                 self.JoinLVMin,
                                 self.ServerID,
                                 self.EmblemID,
+                                self.EmblemWord,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.BroadcastLen,
@@ -15485,122 +14477,6 @@
 
 m_NAtagMCBossHurtList=tagMCBossHurtList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossHurtList.Head.Cmd,m_NAtagMCBossHurtList.Head.SubCmd))] = m_NAtagMCBossHurtList
-
-
-#------------------------------------------------------
-# A7 17 聊天气泡框状态 #tagMCChatBubbleBoxState
-
-class  tagMCChatBubbleBox(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("BoxID", c_ubyte),    #气泡ID
-                  ("State", c_ubyte),    #是否已激活
-                  ("EndTime", c_int),    #到期时间戳,0为永久
-                  ("Star", 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.BoxID = 0
-        self.State = 0
-        self.EndTime = 0
-        self.Star = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCChatBubbleBox)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A7 17 聊天气泡框状态 //tagMCChatBubbleBoxState:
-                                BoxID:%d,
-                                State:%d,
-                                EndTime:%d,
-                                Star:%d
-                                '''\
-                                %(
-                                self.BoxID,
-                                self.State,
-                                self.EndTime,
-                                self.Star
-                                )
-        return DumpString
-
-
-class  tagMCChatBubbleBoxState(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    BoxList = list()    #(vector<tagMCChatBubbleBox> BoxList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x17
-        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):
-            temBoxList = tagMCChatBubbleBox()
-            _pos = temBoxList.ReadData(_lpData, _pos)
-            self.BoxList.append(temBoxList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x17
-        self.Count = 0
-        self.BoxList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.BoxList[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.BoxList[i].GetLength(), self.BoxList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                BoxList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCChatBubbleBoxState=tagMCChatBubbleBoxState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Head.Cmd,m_NAtagMCChatBubbleBoxState.Head.SubCmd))] = m_NAtagMCChatBubbleBoxState
 
 
 #------------------------------------------------------
@@ -16851,6 +15727,7 @@
     FamilyID = 0    #(DWORD FamilyID)
     FamilyName = ""    #(char FamilyName[33])
     FamilyEmblemID = 0    #(DWORD FamilyEmblemID)//仙盟徽章ID
+    FamilyEmblemWord = ""    #(char FamilyEmblemWord[3])//徽章文字
     PlusDataSize = 0    #(DWORD PlusDataSize)
     PlusData = ""    #(String PlusData)//扩展记录	
     data = None
@@ -16879,6 +15756,7 @@
         self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
         self.FamilyEmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyEmblemWord,_pos = CommFunc.ReadString(_lpData, _pos,3)
         self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
         return _pos
@@ -16903,6 +15781,7 @@
         self.FamilyID = 0
         self.FamilyName = ""
         self.FamilyEmblemID = 0
+        self.FamilyEmblemWord = ""
         self.PlusDataSize = 0
         self.PlusData = ""
         return
@@ -16925,6 +15804,7 @@
         length += 4
         length += 33
         length += 4
+        length += 3
         length += 4
         length += len(self.PlusData)
 
@@ -16948,6 +15828,7 @@
         data = CommFunc.WriteDWORD(data, self.FamilyID)
         data = CommFunc.WriteString(data, 33, self.FamilyName)
         data = CommFunc.WriteDWORD(data, self.FamilyEmblemID)
+        data = CommFunc.WriteString(data, 3, self.FamilyEmblemWord)
         data = CommFunc.WriteDWORD(data, self.PlusDataSize)
         data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
         return data
@@ -16970,6 +15851,7 @@
                                 FamilyID:%d,
                                 FamilyName:%s,
                                 FamilyEmblemID:%d,
+                                FamilyEmblemWord:%s,
                                 PlusDataSize:%d,
                                 PlusData:%s
                                 '''\
@@ -16990,6 +15872,7 @@
                                 self.FamilyID,
                                 self.FamilyName,
                                 self.FamilyEmblemID,
+                                self.FamilyEmblemWord,
                                 self.PlusDataSize,
                                 self.PlusData
                                 )
@@ -18350,6 +17233,7 @@
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分
     Face = 0    #(DWORD Face)//基本脸型
     FacePic = 0    #(DWORD FacePic)//头像框
+    TitleID = 0    #(DWORD TitleID)//称号
     data = None
 
     def __init__(self):
@@ -18365,6 +17249,7 @@
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -18375,6 +17260,7 @@
         self.FightPowerEx = 0
         self.Face = 0
         self.FacePic = 0
+        self.TitleID = 0
         return
 
     def GetLength(self):
@@ -18382,6 +17268,7 @@
         length += 4
         length += 33
         length += 2
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -18398,6 +17285,7 @@
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.TitleID)
         return data
 
     def OutputString(self):
@@ -18408,7 +17296,8 @@
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Face:%d,
-                                FacePic:%d
+                                FacePic:%d,
+                                TitleID:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -18417,7 +17306,8 @@
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Face,
-                                self.FacePic
+                                self.FacePic,
+                                self.TitleID
                                 )
         return DumpString
 
@@ -20650,6 +19540,63 @@
 
 
 #------------------------------------------------------
+# A9 21 角色改名结果 #tagSCRenameResult
+
+class  tagSCRenameResult(Structure):
+    Head = tagHead()
+    PlayerName = ""    #(char PlayerName[33])// 新名字
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x21
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x21
+        self.PlayerName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 33
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerName
+                                )
+        return DumpString
+
+
+m_NAtagSCRenameResult=tagSCRenameResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCRenameResult.Head.Cmd,m_NAtagSCRenameResult.Head.SubCmd))] = m_NAtagSCRenameResult
+
+
+#------------------------------------------------------
 # A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
 
 class  tagGCStoreServerBuyCnt(Structure):
@@ -20755,58 +19702,6 @@
 
 m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
-
-
-#------------------------------------------------------
-#A9 21 角色改名结果 #tagUpdatePlayerNameResult
-
-class  tagUpdatePlayerNameResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Result", c_ubyte),    #角色改名结果
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA9
-        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 = 0xA9
-        self.SubCmd = 0x21
-        self.Result = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagUpdatePlayerNameResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Result:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Result
-                                )
-        return DumpString
-
-
-m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult
 
 
 #------------------------------------------------------
@@ -30581,6 +29476,7 @@
 class  tagSCFirstCharge(Structure):
     _pack_ = 1
     _fields_ = [
+                  ("FirstID", c_ubyte),    #首充ID
                   ("ChargeTime", c_int),    #充值该首充的时间戳
                   ("AwardRecord", c_ushort),    #首充奖励领奖记录,按二进制位记录首充第X天是否已领取
                   ]
@@ -30595,6 +29491,7 @@
         return _pos + self.GetLength()
 
     def Clear(self):
+        self.FirstID = 0
         self.ChargeTime = 0
         self.AwardRecord = 0
         return
@@ -30607,10 +29504,12 @@
 
     def OutputString(self):
         DumpString = '''// AA 02 首充信息 //tagSCFirstChargeInfo:
+                                FirstID:%d,
                                 ChargeTime:%d,
                                 AwardRecord:%d
                                 '''\
                                 %(
+                                self.FirstID,
                                 self.ChargeTime,
                                 self.AwardRecord
                                 )
@@ -36487,6 +35386,122 @@
 
 
 #------------------------------------------------------
+# B1 27 聊天气泡框信息 #tagSCChatBoxInfo
+
+class  tagSCChatBox(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("BoxID", c_int),    #气泡框ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", 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.BoxID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSCChatBox)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 27 聊天气泡框信息 //tagSCChatBoxInfo:
+                                BoxID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.BoxID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagSCChatBoxInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BoxList = list()    #(vector<tagSCChatBox> BoxList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x27
+        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):
+            temBoxList = tagSCChatBox()
+            _pos = temBoxList.ReadData(_lpData, _pos)
+            self.BoxList.append(temBoxList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x27
+        self.Count = 0
+        self.BoxList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BoxList[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.BoxList[i].GetLength(), self.BoxList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BoxList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCChatBoxInfo=tagSCChatBoxInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCChatBoxInfo.Head.Cmd,m_NAtagSCChatBoxInfo.Head.SubCmd))] = m_NAtagSCChatBoxInfo
+
+
+#------------------------------------------------------
 # B1 02 玩家时装皮肤激活状态 #tagMCClothesCoatSkinState
 
 class  tagMCClothesCoatLVInfo(Structure):
@@ -36606,6 +35621,158 @@
 
 m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState
+
+
+#------------------------------------------------------
+# B1 09 每日活跃任务信息 #tagSCDailyTaskInfo
+
+class  tagSCDailyTask(Structure):
+    TaskType = 0    #(BYTE TaskType)// 任务类型
+    CLen = 0    #(BYTE CLen)
+    Conds = list()    #(vector<DWORD> Conds)// 条件列表
+    CurValue = 0    #(DWORD CurValue)// 进度值,相同任务类型条件的进度值共享
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TaskType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CLen):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.Conds.append(value)
+        self.CurValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.TaskType = 0
+        self.CLen = 0
+        self.Conds = list()
+        self.CurValue = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 4 * self.CLen
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TaskType)
+        data = CommFunc.WriteBYTE(data, self.CLen)
+        for i in range(self.CLen):
+            data = CommFunc.WriteDWORD(data, self.Conds[i])
+        data = CommFunc.WriteDWORD(data, self.CurValue)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                TaskType:%d,
+                                CLen:%d,
+                                Conds:%s,
+                                CurValue:%d
+                                '''\
+                                %(
+                                self.TaskType,
+                                self.CLen,
+                                "...",
+                                self.CurValue
+                                )
+        return DumpString
+
+
+class  tagSCDailyTaskInfo(Structure):
+    Head = tagHead()
+    ActivityTotal = 0    #(DWORD ActivityTotal)// 今日累计获得活跃度
+    ActivityAward = 0    #(DWORD ActivityAward)// 累计活跃领奖记录,按活跃ID奖励二进制位存储是否已领取
+    DailyTaskState = 0    #(DWORD DailyTaskState)// 今日任务是否已领取奖励,按任务ID二进制位存储是否已领取
+    TaskCount = 0    #(BYTE TaskCount)
+    TaskList = list()    #(vector<tagSCDailyTask> TaskList)// 差异更新的任务信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActivityTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ActivityAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DailyTaskState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskCount):
+            temTaskList = tagSCDailyTask()
+            _pos = temTaskList.ReadData(_lpData, _pos)
+            self.TaskList.append(temTaskList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x09
+        self.ActivityTotal = 0
+        self.ActivityAward = 0
+        self.DailyTaskState = 0
+        self.TaskCount = 0
+        self.TaskList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.TaskCount):
+            length += self.TaskList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ActivityTotal)
+        data = CommFunc.WriteDWORD(data, self.ActivityAward)
+        data = CommFunc.WriteDWORD(data, self.DailyTaskState)
+        data = CommFunc.WriteBYTE(data, self.TaskCount)
+        for i in range(self.TaskCount):
+            data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActivityTotal:%d,
+                                ActivityAward:%d,
+                                DailyTaskState:%d,
+                                TaskCount:%d,
+                                TaskList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActivityTotal,
+                                self.ActivityAward,
+                                self.DailyTaskState,
+                                self.TaskCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCDailyTaskInfo=tagSCDailyTaskInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCDailyTaskInfo.Head.Cmd,m_NAtagSCDailyTaskInfo.Head.SubCmd))] = m_NAtagSCDailyTaskInfo
 
 
 #------------------------------------------------------
@@ -37320,6 +36487,122 @@
 
 
 #------------------------------------------------------
+# B1 19 形象信息 #tagSCModelInfo
+
+class  tagSCModel(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ModelID", c_int),    #形象ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", 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.ModelID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSCModel)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 19 形象信息 //tagSCModelInfo:
+                                ModelID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.ModelID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagSCModelInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    ModelList = list()    #(vector<tagSCModel> ModelList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x19
+        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):
+            temModelList = tagSCModel()
+            _pos = temModelList.ReadData(_lpData, _pos)
+            self.ModelList.append(temModelList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x19
+        self.Count = 0
+        self.ModelList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ModelList[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.ModelList[i].GetLength(), self.ModelList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ModelList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCModelInfo=tagSCModelInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCModelInfo.Head.Cmd,m_NAtagSCModelInfo.Head.SubCmd))] = m_NAtagSCModelInfo
+
+
+#------------------------------------------------------
 # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove
 
 class  tagMCNotifyPlayerMove(Structure):
@@ -37377,80 +36660,6 @@
 
 m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove
-
-
-#------------------------------------------------------
-# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew
-
-class  tagMCOnlinePrizeNew(Structure):
-    Head = tagHead()
-    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
-    Len = 0    #(BYTE Len)
-    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x13
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Len):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.PrizeInfo.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x13
-        self.OnlineTime = 0
-        self.Len = 0
-        self.PrizeInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.Len
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.OnlineTime)
-        data = CommFunc.WriteBYTE(data, self.Len)
-        for i in range(self.Len):
-            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                OnlineTime:%d,
-                                Len:%d,
-                                PrizeInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.OnlineTime,
-                                self.Len,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew
 
 
 #------------------------------------------------------
@@ -38090,6 +37299,122 @@
 
 m_NAtagMCTiandaoTreeInfo=tagMCTiandaoTreeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTiandaoTreeInfo.Head.Cmd,m_NAtagMCTiandaoTreeInfo.Head.SubCmd))] = m_NAtagMCTiandaoTreeInfo
+
+
+#------------------------------------------------------
+# B1 26 称号信息 #tagSCTitleInfo
+
+class  tagSCTitle(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("TitleID", c_int),    #称号ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", 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.TitleID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSCTitle)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 26 称号信息 //tagSCTitleInfo:
+                                TitleID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.TitleID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagSCTitleInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    TitleList = list()    #(vector<tagSCTitle> TitleList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x26
+        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):
+            temTitleList = tagSCTitle()
+            _pos = temTitleList.ReadData(_lpData, _pos)
+            self.TitleList.append(temTitleList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x26
+        self.Count = 0
+        self.TitleList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.TitleList[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.TitleList[i].GetLength(), self.TitleList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                TitleList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCTitleInfo=tagSCTitleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCTitleInfo.Head.Cmd,m_NAtagSCTitleInfo.Head.SubCmd))] = m_NAtagSCTitleInfo
 
 
 #------------------------------------------------------
@@ -43426,10 +42751,11 @@
     Head = tagHead()
     ObjID = 0    #(DWORD ObjID)
     PMType = 0    #(BYTE PMType)// 物法类型 0或1-物理;2-法术
-    BattleType = 0    #(BYTE BattleType)// 战斗类型 0-常规;1-连击;2-反击;3-追击
+    BattleType = 0    #(BYTE BattleType)// 战斗类型 0-常规;1-连击;2-反击;3-追击;4-子技能;5-被动触发的
     CurHP = 0    #(DWORD CurHP)// 释放技能后剩余血量,吸血、反弹可能引起变化,求余亿部分
     CurHPEx = 0    #(DWORD CurHPEx)// 释放技能后剩余血量,吸血、反弹可能引起变化,整除亿部分
     SkillID = 0    #(DWORD SkillID)
+    RelatedSkillID = 0    #(DWORD RelatedSkillID)// 关联的技能ID,一般是主技能ID或由于某个技能释放引起的
     HurtCount = 0    #(BYTE HurtCount)//伤害数目
     HurtList = list()    #(vector<tagSCUseSkillHurt> HurtList)//size = HurtCount
     data = None
@@ -43449,6 +42775,7 @@
         self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.SkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RelatedSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.HurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.HurtCount):
             temHurtList = tagSCUseSkillHurt()
@@ -43467,6 +42794,7 @@
         self.CurHP = 0
         self.CurHPEx = 0
         self.SkillID = 0
+        self.RelatedSkillID = 0
         self.HurtCount = 0
         self.HurtList = list()
         return
@@ -43477,6 +42805,7 @@
         length += 4
         length += 1
         length += 1
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -43495,6 +42824,7 @@
         data = CommFunc.WriteDWORD(data, self.CurHP)
         data = CommFunc.WriteDWORD(data, self.CurHPEx)
         data = CommFunc.WriteDWORD(data, self.SkillID)
+        data = CommFunc.WriteDWORD(data, self.RelatedSkillID)
         data = CommFunc.WriteBYTE(data, self.HurtCount)
         for i in range(self.HurtCount):
             data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
@@ -43509,6 +42839,7 @@
                                 CurHP:%d,
                                 CurHPEx:%d,
                                 SkillID:%d,
+                                RelatedSkillID:%d,
                                 HurtCount:%d,
                                 HurtList:%s
                                 '''\
@@ -43520,6 +42851,7 @@
                                 self.CurHP,
                                 self.CurHPEx,
                                 self.SkillID,
+                                self.RelatedSkillID,
                                 self.HurtCount,
                                 "..."
                                 )
@@ -53019,4 +52351,56 @@
 
 
 m_NAtagMCStartEnterCrossServer=tagMCStartEnterCrossServer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer
\ No newline at end of file
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer
+
+
+#------------------------------------------------------
+# C2 01 跨服服务器间的测试包 #tagSSTest
+
+class  tagSSTest(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Data", c_int),    #测试
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC2
+        self.SubCmd = 0x01
+        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 = 0xC2
+        self.SubCmd = 0x01
+        self.Data = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSSTest)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C2 01 跨服服务器间的测试包 //tagSSTest:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Data:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Data
+                                )
+        return DumpString
+
+
+m_NAtagSSTest=tagSSTest()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSTest.Cmd,m_NAtagSSTest.SubCmd))] = m_NAtagSSTest
\ No newline at end of file

--
Gitblit v1.8.0