From 95c731d5e1a9aadb610ac9f6ecbc6b74b919ab60 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 28 二月 2026 17:05:35 +0800
Subject: [PATCH] 417 【武将】吞噬返还优化(固定额外返还一个本体遣散道具;优化吞噬星级溢出逻辑;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py |  411 ++++++++++++++++++++++++++++------------------------------
 1 files changed, 196 insertions(+), 215 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index f22632b..22c353f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -7467,6 +7467,7 @@
     LuckValue = 0    #(WORD LuckValue)//当前幸运值
     TreasureCount = 0    #(DWORD TreasureCount)//已寻宝总次数
     TreasureCountToday = 0    #(DWORD TreasureCountToday)//今日已寻宝总次数
+    TreasureCountTodayGold = 0    #(DWORD TreasureCountTodayGold)//今日消耗货币已寻宝总次数
     FreeCountToday = 0    #(WORD FreeCountToday)//今日已免费寻宝次数
     TreasureCntAward = 0    #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
     GridLimitCnt = 0    #(BYTE GridLimitCnt)
@@ -7485,6 +7486,7 @@
         self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.TreasureCountToday,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TreasureCountTodayGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -7504,6 +7506,7 @@
         self.LuckValue = 0
         self.TreasureCount = 0
         self.TreasureCountToday = 0
+        self.TreasureCountTodayGold = 0
         self.FreeCountToday = 0
         self.TreasureCntAward = 0
         self.GridLimitCnt = 0
@@ -7516,6 +7519,7 @@
         length = 0
         length += 1
         length += 2
+        length += 4
         length += 4
         length += 4
         length += 2
@@ -7535,6 +7539,7 @@
         data = CommFunc.WriteWORD(data, self.LuckValue)
         data = CommFunc.WriteDWORD(data, self.TreasureCount)
         data = CommFunc.WriteDWORD(data, self.TreasureCountToday)
+        data = CommFunc.WriteDWORD(data, self.TreasureCountTodayGold)
         data = CommFunc.WriteWORD(data, self.FreeCountToday)
         data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
         data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
@@ -7551,6 +7556,7 @@
                                 LuckValue:%d,
                                 TreasureCount:%d,
                                 TreasureCountToday:%d,
+                                TreasureCountTodayGold:%d,
                                 FreeCountToday:%d,
                                 TreasureCntAward:%d,
                                 GridLimitCnt:%d,
@@ -7563,6 +7569,7 @@
                                 self.LuckValue,
                                 self.TreasureCount,
                                 self.TreasureCountToday,
+                                self.TreasureCountTodayGold,
                                 self.FreeCountToday,
                                 self.TreasureCntAward,
                                 self.GridLimitCnt,
@@ -7647,8 +7654,10 @@
     TreasureType = 0    #(BYTE TreasureType)//寻宝类型
     TreasureIndex = 0    #(BYTE TreasureIndex)//寻宝索引
     CostType = 0    #(BYTE CostType)//消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
-    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
-    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
+    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝额外增加的积分货币类型,可能为0
+    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝额外增加的积分货币值,可能为0
+    AddItemID = 0    #(DWORD AddItemID)// 本次寻宝额外赠送的物品ID,可能为0
+    AddItemCount = 0    #(DWORD AddItemCount)// 本次寻宝额外赠送的物品ID个数,可能为0
     AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
     TreasureResultLen = 0    #(WORD TreasureResultLen)
     TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
@@ -7668,6 +7677,8 @@
         self.CostType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AddItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
@@ -7683,6 +7694,8 @@
         self.CostType = 0
         self.AddMoneyType = 0
         self.AddMoneyValue = 0
+        self.AddItemID = 0
+        self.AddItemCount = 0
         self.AddTreasureLuck = 0
         self.TreasureResultLen = 0
         self.TreasureResult = ""
@@ -7696,6 +7709,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
         length += 2
         length += 2
         length += len(self.TreasureResult)
@@ -7710,6 +7725,8 @@
         data = CommFunc.WriteBYTE(data, self.CostType)
         data = CommFunc.WriteBYTE(data, self.AddMoneyType)
         data = CommFunc.WriteWORD(data, self.AddMoneyValue)
+        data = CommFunc.WriteDWORD(data, self.AddItemID)
+        data = CommFunc.WriteDWORD(data, self.AddItemCount)
         data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
         data = CommFunc.WriteWORD(data, self.TreasureResultLen)
         data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
@@ -7723,6 +7740,8 @@
                                 CostType:%d,
                                 AddMoneyType:%d,
                                 AddMoneyValue:%d,
+                                AddItemID:%d,
+                                AddItemCount:%d,
                                 AddTreasureLuck:%d,
                                 TreasureResultLen:%d,
                                 TreasureResult:%s
@@ -7734,6 +7753,8 @@
                                 self.CostType,
                                 self.AddMoneyType,
                                 self.AddMoneyValue,
+                                self.AddItemID,
+                                self.AddItemCount,
                                 self.AddTreasureLuck,
                                 self.TreasureResultLen,
                                 self.TreasureResult
@@ -17330,259 +17351,108 @@
 
 
 #------------------------------------------------------
-# AA 69 登录活动信息新 #tagMCActLoginNew
+# AA 21 武将登场活动信息 #tagSCActHeroAppearInfo
 
-class  tagMCActLoginNewItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ItemID", c_int),    
-                  ("ItemCount", c_ushort),    
-                  ("IsBind", c_ubyte),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.IsBind = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActLoginNewItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 69 登录活动信息新 //tagMCActLoginNew:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCActLoginNewDay(Structure):
-    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
-    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
-    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActLoginNewItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemListEx = tagMCActLoginNewItem()
-            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
-            self.AwardItemListEx.append(temAwardItemListEx)
-        return _pos
-
-    def Clear(self):
-        self.DayNum = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.CountEx = 0
-        self.AwardItemListEx = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemListEx[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.DayNum)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                DayNum:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                CountEx:%d,
-                                AwardItemListEx:%s
-                                '''\
-                                %(
-                                self.DayNum,
-                                self.Count,
-                                "...",
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActLoginNew(Structure):
+class  tagSCActHeroAppearInfo(Structure):
     Head = tagHead()
+    ActType = 0    #(BYTE ActType)// 活动类型,用于关联活动相关模块用,如签到、任务等
     ActNum = 0    #(BYTE ActNum)// 活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
-    RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
-    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
-    DayCount = 0    #(BYTE DayCount)
-    AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
+    CfgID = 0    #(WORD CfgID)// 活动时间表配置ID
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x69
+        self.Head.SubCmd = 0x21
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DayCount):
-            temAwardDayList = tagMCActLoginNewDay()
-            _pos = temAwardDayList.ReadData(_lpData, _pos)
-            self.AwardDayList.append(temAwardDayList)
+        self.CfgID,_pos = CommFunc.ReadWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x69
+        self.Head.SubCmd = 0x21
+        self.ActType = 0
         self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
-        self.LimitLV = 0
-        self.RepSignMoneyType = 0
-        self.RepSignMoneyValue = 0
-        self.AwardExCTGID = 0
-        self.DayCount = 0
-        self.AwardDayList = list()
+        self.CfgID = 0
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
+        length += 1
         length += 10
         length += 10
         length += 2
-        length += 1
-        length += 4
-        length += 2
-        length += 1
-        for i in range(self.DayCount):
-            length += self.AwardDayList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActType)
         data = CommFunc.WriteBYTE(data, self.ActNum)
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
-        data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
-        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
-        data = CommFunc.WriteBYTE(data, self.DayCount)
-        for i in range(self.DayCount):
-            data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.CfgID)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActType:%d,
                                 ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
-                                LimitLV:%d,
-                                RepSignMoneyType:%d,
-                                RepSignMoneyValue:%d,
-                                AwardExCTGID:%d,
-                                DayCount:%d,
-                                AwardDayList:%s
+                                CfgID:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActType,
                                 self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
-                                self.LimitLV,
-                                self.RepSignMoneyType,
-                                self.RepSignMoneyValue,
-                                self.AwardExCTGID,
-                                self.DayCount,
-                                "..."
+                                self.CfgID
                                 )
         return DumpString
 
 
-m_NAtagMCActLoginNew=tagMCActLoginNew()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginNew.Head.Cmd,m_NAtagMCActLoginNew.Head.SubCmd))] = m_NAtagMCActLoginNew
+m_NAtagSCActHeroAppearInfo=tagSCActHeroAppearInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearInfo.Head.Cmd,m_NAtagSCActHeroAppearInfo.Head.SubCmd))] = m_NAtagSCActHeroAppearInfo
 
 
 #------------------------------------------------------
-# AA 70 登录活动玩家信息新 #tagMCActLoginPlayerInfoNew
+# AA 22 武将登场活动玩家信息 #tagSCActHeroAppearPlayerInfo
 
-class  tagMCActLoginPlayerInfoNew(Structure):
+class  tagSCActHeroAppearPlayerInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("ActNum", c_ubyte),    # 活动编号
-                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
-                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
+                  ("StarHeroIndex", c_ubyte),    # 升星计划选择的武将ID索引
+                  ("StarFreeAward", c_int),    # 升星计划免费奖励记录,按奖励记录索引二进制位运算记录是否已领取
+                  ("CallHeroIndex", c_ubyte),    # 招募选择的武将ID索引
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xAA
-        self.SubCmd = 0x70
+        self.SubCmd = 0x22
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -17592,38 +17462,41 @@
 
     def Clear(self):
         self.Cmd = 0xAA
-        self.SubCmd = 0x70
+        self.SubCmd = 0x22
         self.ActNum = 0
-        self.LoginAward = 0
-        self.LoginAwardEx = 0
+        self.StarHeroIndex = 0
+        self.StarFreeAward = 0
+        self.CallHeroIndex = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCActLoginPlayerInfoNew)
+        return sizeof(tagSCActHeroAppearPlayerInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AA 70 登录活动玩家信息新 //tagMCActLoginPlayerInfoNew:
+        DumpString = '''// AA 22 武将登场活动玩家信息 //tagSCActHeroAppearPlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
                                 ActNum:%d,
-                                LoginAward:%d,
-                                LoginAwardEx:%d
+                                StarHeroIndex:%d,
+                                StarFreeAward:%d,
+                                CallHeroIndex:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.ActNum,
-                                self.LoginAward,
-                                self.LoginAwardEx
+                                self.StarHeroIndex,
+                                self.StarFreeAward,
+                                self.CallHeroIndex
                                 )
         return DumpString
 
 
-m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew
+m_NAtagSCActHeroAppearPlayerInfo=tagSCActHeroAppearPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearPlayerInfo.Cmd,m_NAtagSCActHeroAppearPlayerInfo.SubCmd))] = m_NAtagSCActHeroAppearPlayerInfo
 
 
 #------------------------------------------------------
@@ -18606,6 +18479,66 @@
 
 m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo
+
+
+#------------------------------------------------------
+# AA 20 活动签到奖励信息 #tagSCActSignPlayerInfo
+
+class  tagSCActSignPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActType", c_ubyte),    # 活动类型
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ("SignAward", c_int),    # 奖励领取记录,按天对应二进制位记录是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x20
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x20
+        self.ActType = 0
+        self.ActNum = 0
+        self.SignAward = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSCActSignPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 20 活动签到奖励信息 //tagSCActSignPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActType:%d,
+                                ActNum:%d,
+                                SignAward:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActType,
+                                self.ActNum,
+                                self.SignAward
+                                )
+        return DumpString
+
+
+m_NAtagSCActSignPlayerInfo=tagSCActSignPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActSignPlayerInfo.Cmd,m_NAtagSCActSignPlayerInfo.SubCmd))] = m_NAtagSCActSignPlayerInfo
 
 
 #------------------------------------------------------
@@ -22563,16 +22496,12 @@
 #------------------------------------------------------
 # B1 22 武将信息 #tagSCHeroInfo
 
-class  tagSCHero(Structure):
+class  tagSCHeroSkin(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("HeroID", c_int),    # 武将ID
-                  ("SkinState", c_int),    # 武将皮肤已解锁状态信息,按皮肤所在索引二进制位运算判断是否解锁,0索引位默认皮肤,不用验证
-                  ("BookInitState", c_ubyte),    # 图鉴激活状态:0-未激活;1-可激活;2-已激活
-                  ("BookStarLV", c_ushort),    # 图鉴星级等级
-                  ("BookBreakLV", c_ushort),    # 图鉴突破等级
-                  ("BookStarLVH", c_ushort),    # 图鉴星级历史最高等级
-                  ("BookBreakLVH", c_ushort),    # 图鉴突破历史最高等级
+                  ("SkinID", c_int),    #皮肤ID,只通知非默认皮肤
+                  ("State", c_ubyte),    #是否已激活
+                  ("Star", c_ubyte),    #星级
                   ]
 
     def __init__(self):
@@ -22585,39 +22514,91 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.HeroID = 0
-        self.SkinState = 0
-        self.BookInitState = 0
-        self.BookStarLV = 0
-        self.BookBreakLV = 0
-        self.BookStarLVH = 0
-        self.BookBreakLVH = 0
+        self.SkinID = 0
+        self.State = 0
+        self.Star = 0
         return
 
     def GetLength(self):
-        return sizeof(tagSCHero)
+        return sizeof(tagSCHeroSkin)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// B1 22 武将信息 //tagSCHeroInfo:
+                                SkinID:%d,
+                                State:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.SkinID,
+                                self.State,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagSCHero(Structure):
+    HeroID = 0    #(DWORD HeroID)// 武将ID
+    BookInitState = 0    #(BYTE BookInitState)// 图鉴激活状态:0-未激活;1-可激活;2-已激活
+    SkinCnt = 0    #(BYTE SkinCnt)
+    SkinList = list()    #(vector<tagSCHeroSkin> SkinList)// 非默认皮肤信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.HeroID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BookInitState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SkinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SkinCnt):
+            temSkinList = tagSCHeroSkin()
+            _pos = temSkinList.ReadData(_lpData, _pos)
+            self.SkinList.append(temSkinList)
+        return _pos
+
+    def Clear(self):
+        self.HeroID = 0
+        self.BookInitState = 0
+        self.SkinCnt = 0
+        self.SkinList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.SkinCnt):
+            length += self.SkinList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.HeroID)
+        data = CommFunc.WriteBYTE(data, self.BookInitState)
+        data = CommFunc.WriteBYTE(data, self.SkinCnt)
+        for i in range(self.SkinCnt):
+            data = CommFunc.WriteString(data, self.SkinList[i].GetLength(), self.SkinList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
                                 HeroID:%d,
-                                SkinState:%d,
                                 BookInitState:%d,
-                                BookStarLV:%d,
-                                BookBreakLV:%d,
-                                BookStarLVH:%d,
-                                BookBreakLVH:%d
+                                SkinCnt:%d,
+                                SkinList:%s
                                 '''\
                                 %(
                                 self.HeroID,
-                                self.SkinState,
                                 self.BookInitState,
-                                self.BookStarLV,
-                                self.BookBreakLV,
-                                self.BookStarLVH,
-                                self.BookBreakLVH
+                                self.SkinCnt,
+                                "..."
                                 )
         return DumpString
 

--
Gitblit v1.8.0