ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1085,7 +1085,7 @@
                  ("Type", c_ubyte),    #类型 TBillboardType
                  ("StartIndex", c_int),    #查看的起始名次索引, 默认0
                  ("WatchCnt", c_ubyte),    #查看条数,默认20,最大不超过100
                  ("IsWatchSelf", c_ubyte),    #是否查看自己名次前后,默认10条数据
                  ("WatchID", c_int),    #查看指定ID名次前后,如玩家ID、家族ID等
                  ]
    def __init__(self):
@@ -1105,7 +1105,7 @@
        self.Type = 0
        self.StartIndex = 0
        self.WatchCnt = 0
        self.IsWatchSelf = 0
        self.WatchID = 0
        return
    def GetLength(self):
@@ -1121,7 +1121,7 @@
                                Type:%d,
                                StartIndex:%d,
                                WatchCnt:%d,
                                IsWatchSelf:%d
                                WatchID:%d
                                '''\
                                %(
                                self.Cmd,
@@ -1129,7 +1129,7 @@
                                self.Type,
                                self.StartIndex,
                                self.WatchCnt,
                                self.IsWatchSelf
                                self.WatchID
                                )
        return DumpString
@@ -2117,6 +2117,110 @@
#------------------------------------------------------
# B0 34 福地请求结算奖励 #tagCGMineAreaAwardGet
class  tagCGMineAreaAwardGet(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x34
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x34
        return
    def GetLength(self):
        return sizeof(tagCGMineAreaAwardGet)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 34 福地请求结算奖励 //tagCGMineAreaAwardGet:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCGMineAreaAwardGet=tagCGMineAreaAwardGet()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaAwardGet.Cmd,m_NAtagCGMineAreaAwardGet.SubCmd))] = m_NAtagCGMineAreaAwardGet
#------------------------------------------------------
# B0 33 福地查看 #tagCGMineAreaView
class  tagCGMineAreaView(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("QueryType", c_ubyte),    # 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表;4-退出他人福地;5-查看记录
                  ("QueryValue", c_int),    # 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        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 = 0xB0
        self.SubCmd = 0x33
        self.QueryType = 0
        self.QueryValue = 0
        return
    def GetLength(self):
        return sizeof(tagCGMineAreaView)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 33 福地查看 //tagCGMineAreaView:
                                Cmd:%s,
                                SubCmd:%s,
                                QueryType:%d,
                                QueryValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.QueryType,
                                self.QueryValue
                                )
        return DumpString
m_NAtagCGMineAreaView=tagCGMineAreaView()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaView.Cmd,m_NAtagCGMineAreaView.SubCmd))] = m_NAtagCGMineAreaView
#------------------------------------------------------
#B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
class  tagQueryFamilyArrestOverState(Structure):
@@ -2275,6 +2379,66 @@
m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift
#------------------------------------------------------
# B0 20 请求膜拜玩家 #tagCGWorship
class  tagCGWorship(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    # 目标玩家ID
                  ("WorshipType", c_ubyte),    # 膜拜类型
                  ("WorshipValue", c_int),    # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        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 = 0xB0
        self.SubCmd = 0x20
        self.PlayerID = 0
        self.WorshipType = 0
        self.WorshipValue = 0
        return
    def GetLength(self):
        return sizeof(tagCGWorship)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 20 请求膜拜玩家 //tagCGWorship:
                                Cmd:%s,
                                SubCmd:%s,
                                PlayerID:%d,
                                WorshipType:%d,
                                WorshipValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PlayerID,
                                self.WorshipType,
                                self.WorshipValue
                                )
        return DumpString
m_NAtagCGWorship=tagCGWorship()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGWorship.Cmd,m_NAtagCGWorship.SubCmd))] = m_NAtagCGWorship
#------------------------------------------------------
@@ -4509,6 +4673,9 @@
                  ("Type", c_ubyte),    #榜单类型
                  ("GroupValue1", c_ubyte),    # 分组值1
                  ("GroupValue2", c_ubyte),    # 分组值2,与分组值1组合归为同组榜单数据
                  ("StartIndex", c_int),    #查看的起始名次索引, 默认0
                  ("WatchCnt", c_ubyte),    #查看条数,默认20,最大不超过100
                  ("WatchID", c_int),    #查看指定ID名次前后,如玩家ID、家族ID等
                  ]
    def __init__(self):
@@ -4528,6 +4695,9 @@
        self.Type = 0
        self.GroupValue1 = 0
        self.GroupValue2 = 0
        self.StartIndex = 0
        self.WatchCnt = 0
        self.WatchID = 0
        return
    def GetLength(self):
@@ -4542,14 +4712,20 @@
                                SubCmd:%s,
                                Type:%d,
                                GroupValue1:%d,
                                GroupValue2:%d
                                GroupValue2:%d,
                                StartIndex:%d,
                                WatchCnt:%d,
                                WatchID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Type,
                                self.GroupValue1,
                                self.GroupValue2
                                self.GroupValue2,
                                self.StartIndex,
                                self.WatchCnt,
                                self.WatchID
                                )
        return DumpString
@@ -4720,6 +4896,84 @@
m_NAtagCMChangeJob=tagCMChangeJob()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob
#------------------------------------------------------
# A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo
class  tagCMCoinBuyOrderInfo(Structure):
    Head = tagHead()
    AppIDLen = 0    #(BYTE AppIDLen)
    AppID = ""    #(String AppID)
    OrderInfoLen = 0    #(BYTE OrderInfoLen)
    OrderInfo = ""    #(String OrderInfo)//商品编号
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA1
        self.Head.SubCmd = 0x25
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AppIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AppID,_pos = CommFunc.ReadString(_lpData, _pos,self.AppIDLen)
        self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA1
        self.Head.SubCmd = 0x25
        self.AppIDLen = 0
        self.AppID = ""
        self.OrderInfoLen = 0
        self.OrderInfo = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.AppID)
        length += 1
        length += len(self.OrderInfo)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AppIDLen)
        data = CommFunc.WriteString(data, self.AppIDLen, self.AppID)
        data = CommFunc.WriteBYTE(data, self.OrderInfoLen)
        data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AppIDLen:%d,
                                AppID:%s,
                                OrderInfoLen:%d,
                                OrderInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AppIDLen,
                                self.AppID,
                                self.OrderInfoLen,
                                self.OrderInfo
                                )
        return DumpString
m_NAtagCMCoinBuyOrderInfo=tagCMCoinBuyOrderInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCoinBuyOrderInfo.Head.Cmd,m_NAtagCMCoinBuyOrderInfo.Head.SubCmd))] = m_NAtagCMCoinBuyOrderInfo
#------------------------------------------------------
@@ -4910,7 +5164,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("RecordID", c_ubyte),    #充值记录ID,也就是充值ID,发0则查全部
                  ("RecordID", c_ushort),    #充值记录ID,也就是充值ID,发0则查全部
                  ]
    def __init__(self):
@@ -5000,6 +5254,62 @@
m_NAtagCMRefreshMainServerRole=tagCMRefreshMainServerRole()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshMainServerRole.Cmd,m_NAtagCMRefreshMainServerRole.SubCmd))] = m_NAtagCMRefreshMainServerRole
#------------------------------------------------------
# A1 26 充值自选物品选择 #tagCMSelectCTGItem
class  tagCMSelectCTGItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("RecordID", c_ushort),    #充值ID
                  ("SelectItemValue", c_int),    # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA1
        self.SubCmd = 0x26
        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 = 0xA1
        self.SubCmd = 0x26
        self.RecordID = 0
        self.SelectItemValue = 0
        return
    def GetLength(self):
        return sizeof(tagCMSelectCTGItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A1 26 充值自选物品选择 //tagCMSelectCTGItem:
                                Cmd:%s,
                                SubCmd:%s,
                                RecordID:%d,
                                SelectItemValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.RecordID,
                                self.SelectItemValue
                                )
        return DumpString
m_NAtagCMSelectCTGItem=tagCMSelectCTGItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectCTGItem.Cmd,m_NAtagCMSelectCTGItem.SubCmd))] = m_NAtagCMSelectCTGItem
#------------------------------------------------------
@@ -17263,6 +17573,170 @@
#------------------------------------------------------
# B0 30 福地物品拉 #tagCMMineItemPull
class  tagCMMineItemPull(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
                  ("WorkerCount", c_ubyte),    # 上工人人数
                  ("IsPreview", c_ubyte),    # 是否预览;0-直接拉,1-预览大概时间
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x30
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x30
        self.PlayerID = 0
        self.ItemIndex = 0
        self.WorkerCount = 0
        self.IsPreview = 0
        return
    def GetLength(self):
        return sizeof(tagCMMineItemPull)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 30 福地物品拉 //tagCMMineItemPull:
                                Cmd:%s,
                                SubCmd:%s,
                                PlayerID:%d,
                                ItemIndex:%d,
                                WorkerCount:%d,
                                IsPreview:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PlayerID,
                                self.ItemIndex,
                                self.WorkerCount,
                                self.IsPreview
                                )
        return DumpString
m_NAtagCMMineItemPull=tagCMMineItemPull()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemPull.Cmd,m_NAtagCMMineItemPull.SubCmd))] = m_NAtagCMMineItemPull
#------------------------------------------------------
# B0 31 福地物品刷新 #tagCMMineItemRefresh
class  tagCMMineItemRefresh(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("IsSuper", c_ubyte),    # 是否超级刷新
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x31
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x31
        self.IsSuper = 0
        return
    def GetLength(self):
        return sizeof(tagCMMineItemRefresh)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh:
                                Cmd:%s,
                                SubCmd:%s,
                                IsSuper:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.IsSuper
                                )
        return DumpString
m_NAtagCMMineItemRefresh=tagCMMineItemRefresh()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemRefresh.Cmd,m_NAtagCMMineItemRefresh.SubCmd))] = m_NAtagCMMineItemRefresh
#------------------------------------------------------
# B0 32 福地工人雇佣 #tagCMMineWorkerEmploy
class  tagCMMineWorkerEmploy(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x32
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x32
        return
    def GetLength(self):
        return sizeof(tagCMMineWorkerEmploy)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 32 福地工人雇佣 //tagCMMineWorkerEmploy:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMMineWorkerEmploy=tagCMMineWorkerEmploy()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineWorkerEmploy.Cmd,m_NAtagCMMineWorkerEmploy.SubCmd))] = m_NAtagCMMineWorkerEmploy
#------------------------------------------------------
#B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
class  tagQueryFamilyArrestAwardReceiveState(Structure):
@@ -18290,19 +18764,99 @@
# B2 22 砍树装备操作 #tagCMCutTreeEquipOP
class  tagCMCutTreeEquipOP(Structure):
    Head = tagHead()
    IndexCount = 0    #(BYTE IndexCount)
    ItemIndexList = list()    #(vector<BYTE> ItemIndexList)// 物品在砍树背包的索引列表
    OPType = 0    #(BYTE OPType)// 操作类型:1-替换;2-分解
    AutoDecompose = 0    #(BYTE AutoDecompose)// 替换后是否自动分解原装备:0否1是,仅替换操作下有用
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x22
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.IndexCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.ItemIndexList.append(value)
        self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AutoDecompose,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x22
        self.IndexCount = 0
        self.ItemIndexList = list()
        self.OPType = 0
        self.AutoDecompose = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1 * self.IndexCount
        length += 1
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.IndexCount)
        for i in range(self.IndexCount):
            data = CommFunc.WriteBYTE(data, self.ItemIndexList[i])
        data = CommFunc.WriteBYTE(data, self.OPType)
        data = CommFunc.WriteBYTE(data, self.AutoDecompose)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                IndexCount:%d,
                                ItemIndexList:%s,
                                OPType:%d,
                                AutoDecompose:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.IndexCount,
                                "...",
                                self.OPType,
                                self.AutoDecompose
                                )
        return DumpString
m_NAtagCMCutTreeEquipOP=tagCMCutTreeEquipOP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTreeEquipOP.Head.Cmd,m_NAtagCMCutTreeEquipOP.Head.SubCmd))] = m_NAtagCMCutTreeEquipOP
#------------------------------------------------------
# B2 25 新聚魂操作 #tagCMGatherTheSoulOP
class  tagCMGatherTheSoulOP(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemIndex", c_ubyte),    # 物品在砍树背包的索引
                  ("OPType", c_ubyte),    # 操作类型:1-替换;2-分解
                  ("AutoDecompose", c_ubyte),    # 替换后是否自动分解原装备:0否1是,仅替换操作下有用
                  ("OpType", c_ubyte),    # 0-激活升级; 1-穿戴替换; 2-卸下
                  ("SoulID", c_int),    # 聚魂ID;当操作升级时,如果为0代表一键升级所有可升级的
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x22
        self.SubCmd = 0x25
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -18312,38 +18866,35 @@
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x22
        self.ItemIndex = 0
        self.OPType = 0
        self.AutoDecompose = 0
        self.SubCmd = 0x25
        self.OpType = 0
        self.SoulID = 0
        return
    def GetLength(self):
        return sizeof(tagCMCutTreeEquipOP)
        return sizeof(tagCMGatherTheSoulOP)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B2 22 砍树装备操作 //tagCMCutTreeEquipOP:
        DumpString = '''// B2 25 新聚魂操作 //tagCMGatherTheSoulOP:
                                Cmd:%s,
                                SubCmd:%s,
                                ItemIndex:%d,
                                OPType:%d,
                                AutoDecompose:%d
                                OpType:%d,
                                SoulID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ItemIndex,
                                self.OPType,
                                self.AutoDecompose
                                self.OpType,
                                self.SoulID
                                )
        return DumpString
m_NAtagCMCutTreeEquipOP=tagCMCutTreeEquipOP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTreeEquipOP.Cmd,m_NAtagCMCutTreeEquipOP.SubCmd))] = m_NAtagCMCutTreeEquipOP
m_NAtagCMGatherTheSoulOP=tagCMGatherTheSoulOP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherTheSoulOP.Cmd,m_NAtagCMGatherTheSoulOP.SubCmd))] = m_NAtagCMGatherTheSoulOP
#------------------------------------------------------
@@ -19016,7 +19567,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    # 0-开始升级(请求扣除消耗,开始升级倒计时);1-执行升级(倒计时时间到后发送该类型)
                  ("Type", c_ubyte),    # 0-开始升级(请求扣除消耗,开始升级倒计时);1-执行升级(前端自行倒计时,时间到后发送该类型)
                  ]
    def __init__(self):
@@ -19058,6 +19609,62 @@
m_NAtagCMTreeLVUP=tagCMTreeLVUP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTreeLVUP.Cmd,m_NAtagCMTreeLVUP.SubCmd))] = m_NAtagCMTreeLVUP
#------------------------------------------------------
# B2 24 使用仙树升级减时物品 #tagCMUseTreeLVUPTimeItem
class  tagCMUseTreeLVUPTimeItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("UseCount", c_int),    # 使用个数
                  ("IsAutoBuy", c_ubyte),    # 不足个数是否自动购买
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x24
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x24
        self.UseCount = 0
        self.IsAutoBuy = 0
        return
    def GetLength(self):
        return sizeof(tagCMUseTreeLVUPTimeItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B2 24 使用仙树升级减时物品 //tagCMUseTreeLVUPTimeItem:
                                Cmd:%s,
                                SubCmd:%s,
                                UseCount:%d,
                                IsAutoBuy:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.UseCount,
                                self.IsAutoBuy
                                )
        return DumpString
m_NAtagCMUseTreeLVUPTimeItem=tagCMUseTreeLVUPTimeItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseTreeLVUPTimeItem.Cmd,m_NAtagCMUseTreeLVUPTimeItem.SubCmd))] = m_NAtagCMUseTreeLVUPTimeItem
#------------------------------------------------------
@@ -20524,60 +21131,95 @@
# B4 10 回合制战斗 #tagCMTurnFight
class  tagCMTurnFight(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),    # 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等)
                  ("FuncLineID", c_ushort),
                  ("PlayerID", c_int),    # 对应玩家ID,可为0,某些功能可能有用,如竞技场
                  ]
    Head = tagHead()
    MapID = 0    #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等)
    FuncLineID = 0    #(WORD FuncLineID)
    TagType = 0    #(BYTE TagType)// 战斗目标类型,0-NPC,1-玩家,2-队伍
    TagID = 0    #(DWORD TagID)// 战斗目标类型对应的ID
    ValueCount = 0    #(BYTE ValueCount)
    ValueList = list()    #(vector<DWORD> ValueList)// 附加值列表,可选,具体含义由MapID决定
    data = None
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB4
        self.SubCmd = 0x10
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x10
        return
    def ReadData(self, stringData, _pos=0, _len=0):
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TagType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TagID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ValueCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.ValueList.append(value)
        return _pos
    def Clear(self):
        self.Cmd = 0xB4
        self.SubCmd = 0x10
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x10
        self.MapID = 0
        self.FuncLineID = 0
        self.PlayerID = 0
        self.TagType = 0
        self.TagID = 0
        self.ValueCount = 0
        self.ValueList = list()
        return
    def GetLength(self):
        return sizeof(tagCMTurnFight)
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 2
        length += 1
        length += 4
        length += 1
        length += 4 * self.ValueCount
        return length
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteWORD(data, self.FuncLineID)
        data = CommFunc.WriteBYTE(data, self.TagType)
        data = CommFunc.WriteDWORD(data, self.TagID)
        data = CommFunc.WriteBYTE(data, self.ValueCount)
        for i in range(self.ValueCount):
            data = CommFunc.WriteDWORD(data, self.ValueList[i])
        return data
    def OutputString(self):
        DumpString = '''// B4 10 回合制战斗 //tagCMTurnFight:
                                Cmd:%s,
                                SubCmd:%s,
        DumpString = '''
                                Head:%s,
                                MapID:%d,
                                FuncLineID:%d,
                                PlayerID:%d
                                TagType:%d,
                                TagID:%d,
                                ValueCount:%d,
                                ValueList:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Head.OutputString(),
                                self.MapID,
                                self.FuncLineID,
                                self.PlayerID
                                self.TagType,
                                self.TagID,
                                self.ValueCount,
                                "..."
                                )
        return DumpString
m_NAtagCMTurnFight=tagCMTurnFight()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Cmd,m_NAtagCMTurnFight.SubCmd))] = m_NAtagCMTurnFight
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Head.Cmd,m_NAtagCMTurnFight.Head.SubCmd))] = m_NAtagCMTurnFight
#------------------------------------------------------