ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1026,6 +1026,58 @@
#------------------------------------------------------
# A4 14 查看目标仙盟 #tagCGViewTagFamily
class  tagCGViewTagFamily(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TagFamilyID", c_int),    # 目标仙盟ID,支持查看跨服仙盟
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA4
        self.SubCmd = 0x14
        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 = 0xA4
        self.SubCmd = 0x14
        self.TagFamilyID = 0
        return
    def GetLength(self):
        return sizeof(tagCGViewTagFamily)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A4 14 查看目标仙盟 //tagCGViewTagFamily:
                                Cmd:%s,
                                SubCmd:%s,
                                TagFamilyID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.TagFamilyID
                                )
        return DumpString
m_NAtagCGViewTagFamily=tagCGViewTagFamily()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewTagFamily.Cmd,m_NAtagCGViewTagFamily.SubCmd))] = m_NAtagCGViewTagFamily
#------------------------------------------------------
# A9 03 关注BOSS刷新 #tagCGAttentionBoss
class  tagCGAttentionBoss(Structure):
@@ -5089,6 +5141,70 @@
#------------------------------------------------------
# C0 26 仙盟攻城战查询 #tagCGFamilyGCZQuery
class  tagCGFamilyGCZQuery(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("QueryType", c_ubyte),    #查询类型:1-成员捐献值;2-进入城池场景;3-退出城池场景;4-进入城池;5-退出城池;6-战报;7-分组仙盟成员伤害;
                  ("BatType", c_ubyte),    #指定战场类型,需要发送的查询类型: 2、4
                  ("GroupNum", c_ubyte),    #指定分组编号,需要发送的查询类型: 2、4
                  ("FamilyID", c_int),    #指定仙盟ID或城池ID,查自己盟的可不发,需要发的类型:2、4、6、7
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC0
        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 = 0xC0
        self.SubCmd = 0x26
        self.QueryType = 0
        self.BatType = 0
        self.GroupNum = 0
        self.FamilyID = 0
        return
    def GetLength(self):
        return sizeof(tagCGFamilyGCZQuery)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 26 仙盟攻城战查询 //tagCGFamilyGCZQuery:
                                Cmd:%s,
                                SubCmd:%s,
                                QueryType:%d,
                                BatType:%d,
                                GroupNum:%d,
                                FamilyID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.QueryType,
                                self.BatType,
                                self.GroupNum,
                                self.FamilyID
                                )
        return DumpString
m_NAtagCGFamilyGCZQuery=tagCGFamilyGCZQuery()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFamilyGCZQuery.Cmd,m_NAtagCGFamilyGCZQuery.SubCmd))] = m_NAtagCGFamilyGCZQuery
#------------------------------------------------------
# C0 03 强制退出跨服状态 #tagCGForceQuitCrossState
class  tagCGForceQuitCrossState(Structure):
@@ -5245,8 +5361,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    #榜单类型
                  ("GroupValue1", c_ubyte),    # 分组值1
                  ("GroupValue2", c_ubyte),    # 分组值2,与分组值1组合归为同组榜单数据
                  ("GroupValue1", c_int),    # 分组值1
                  ("GroupValue2", c_int),    # 分组值2,与分组值1组合归为同组榜单数据
                  ("StartIndex", c_int),    #查看的起始名次索引, 默认0
                  ("WatchCnt", c_ubyte),    #查看条数,默认20,最大不超过100
                  ("WatchID", c_int),    #查看指定ID名次前后,如玩家ID、家族ID等
@@ -5884,6 +6000,54 @@
m_NAtagCMSelectCTGItem=tagCMSelectCTGItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectCTGItem.Cmd,m_NAtagCMSelectCTGItem.SubCmd))] = m_NAtagCMSelectCTGItem
#------------------------------------------------------
# A1 09 同步打包玩家数据 #tagCMSycnPlayerPackData
class  tagCMSycnPlayerPackData(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA1
        self.SubCmd = 0x09
        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 = 0x09
        return
    def GetLength(self):
        return sizeof(tagCMSycnPlayerPackData)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A1 09 同步打包玩家数据 //tagCMSycnPlayerPackData:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMSycnPlayerPackData=tagCMSycnPlayerPackData()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSycnPlayerPackData.Cmd,m_NAtagCMSycnPlayerPackData.SubCmd))] = m_NAtagCMSycnPlayerPackData
#------------------------------------------------------
@@ -7553,7 +7717,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("RealmDifficulty", c_ubyte),    #境界难度 = 100 + 所选境界等级,如境界13,则发113
                  ("RealmDifficulty", c_ushort),    #境界难度 = 1000 + 所选境界等级,如境界13,则发1013
                  ]
    def __init__(self):
@@ -7842,6 +8006,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CountID", c_int),    # 计数ID,客户端与策划约定,可以是NPCID或其他
                  ("Type", c_ubyte),    # 1-杀怪
                  ]
    def __init__(self):
@@ -7859,6 +8024,7 @@
        self.Cmd = 0xA2
        self.SubCmd = 0x25
        self.CountID = 0
        self.Type = 0
        return
    def GetLength(self):
@@ -7871,12 +8037,14 @@
        DumpString = '''//A2 25 客户端任务计数 // tagCMClientTaskCount:
                                Cmd:%s,
                                SubCmd:%s,
                                CountID:%d
                                CountID:%d,
                                Type:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CountID
                                self.CountID,
                                self.Type
                                )
        return DumpString
@@ -8138,6 +8306,62 @@
m_NAtagCMAddFruitUseLimit=tagCMAddFruitUseLimit()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddFruitUseLimit.Cmd,m_NAtagCMAddFruitUseLimit.SubCmd))] = m_NAtagCMAddFruitUseLimit
#------------------------------------------------------
# A3 10 购买商城物品 #tagCMBuyItem
class  tagCMBuyItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("BuyItemIndex", c_ushort),    #购买的物品索引
                  ("BuyCount", c_int),    #购买数量
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x10
        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 = 0x10
        self.BuyItemIndex = 0
        self.BuyCount = 0
        return
    def GetLength(self):
        return sizeof(tagCMBuyItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 10 购买商城物品 //tagCMBuyItem:
                                Cmd:%s,
                                SubCmd:%s,
                                BuyItemIndex:%d,
                                BuyCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.BuyItemIndex,
                                self.BuyCount
                                )
        return DumpString
m_NAtagCMBuyItem=tagCMBuyItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem
#------------------------------------------------------
@@ -9902,20 +10126,15 @@
#------------------------------------------------------
# A3 23 使用物品 #tagCMUseItems
class  tagCMUseItems(Structure):
class  tagCMUseItemsSelect(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemIndex", c_ubyte),    #物品在背包中索引
                  ("UseCnt", c_ushort),    #使用个数,0表示全部使用
                  ("ExData", c_int),    #使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
                  ("SelectID", c_int),    #选择项ID
                  ("SelectCnt", c_ushort),    #选择数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x23
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -9924,39 +10143,113 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA3
        self.SubCmd = 0x23
        self.ItemIndex = 0
        self.UseCnt = 0
        self.ExData = 0
        self.SelectID = 0
        self.SelectCnt = 0
        return
    def GetLength(self):
        return sizeof(tagCMUseItems)
        return sizeof(tagCMUseItemsSelect)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 23 使用物品 //tagCMUseItems:
                                Cmd:%s,
                                SubCmd:%s,
                                ItemIndex:%d,
                                UseCnt:%d,
                                ExData:%d
                                SelectID:%d,
                                SelectCnt:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.SelectID,
                                self.SelectCnt
                                )
        return DumpString
class  tagCMUseItems(Structure):
    Head = tagHead()
    ItemIndex = 0    #(BYTE ItemIndex)//物品在背包中索引
    UseCnt = 0    #(WORD UseCnt)//使用个数,0表示全部使用
    ExData = 0    #(DWORD ExData)//使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
    SelectCount = 0    #(BYTE SelectCount)//指定选择项,当批量使用单个箱子需要同时选中多种选项时使用该值
    SelectList = list()    #(vector<tagCMUseItemsSelect> SelectList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x23
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UseCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ExData,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SelectCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SelectCount):
            temSelectList = tagCMUseItemsSelect()
            _pos = temSelectList.ReadData(_lpData, _pos)
            self.SelectList.append(temSelectList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x23
        self.ItemIndex = 0
        self.UseCnt = 0
        self.ExData = 0
        self.SelectCount = 0
        self.SelectList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 2
        length += 4
        length += 1
        for i in range(self.SelectCount):
            length += self.SelectList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ItemIndex)
        data = CommFunc.WriteWORD(data, self.UseCnt)
        data = CommFunc.WriteDWORD(data, self.ExData)
        data = CommFunc.WriteBYTE(data, self.SelectCount)
        for i in range(self.SelectCount):
            data = CommFunc.WriteString(data, self.SelectList[i].GetLength(), self.SelectList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemIndex:%d,
                                UseCnt:%d,
                                ExData:%d,
                                SelectCount:%d,
                                SelectList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemIndex,
                                self.UseCnt,
                                self.ExData
                                self.ExData,
                                self.SelectCount,
                                "..."
                                )
        return DumpString
m_NAtagCMUseItems=tagCMUseItems()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Head.Cmd,m_NAtagCMUseItems.Head.SubCmd))] = m_NAtagCMUseItems
#------------------------------------------------------
@@ -15522,6 +15815,58 @@
#------------------------------------------------------
# A6 16 珍宝阁操作 #tagCMZhenbaogeOP
class  tagCMZhenbaogeOP(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("OpType", c_ubyte),    # 操作:0-砍价;1-购买
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA6
        self.SubCmd = 0x16
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA6
        self.SubCmd = 0x16
        self.OpType = 0
        return
    def GetLength(self):
        return sizeof(tagCMZhenbaogeOP)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A6 16 珍宝阁操作 //tagCMZhenbaogeOP:
                                Cmd:%s,
                                SubCmd:%s,
                                OpType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.OpType
                                )
        return DumpString
m_NAtagCMZhenbaogeOP=tagCMZhenbaogeOP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhenbaogeOP.Cmd,m_NAtagCMZhenbaogeOP.SubCmd))] = m_NAtagCMZhenbaogeOP
#------------------------------------------------------
# A7 02 宠物激活 #tagCMActivatePet
class  tagCMActivatePet(Structure):
@@ -16535,6 +16880,70 @@
m_NAtagCMActGodGiftReset=tagCMActGodGiftReset()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset
#------------------------------------------------------
# AA 25 炼器操作 #tagCMActLianqiOP
class  tagCMActLianqiOP(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("OPType", c_ubyte),    # 1-移动;2-使用道具;3-重新开始;4-领取等级奖励
                  ("OPValue", c_int),    # 移动时-发1上2下3左4右;使用道具时-发使用个数*10+道具ID所在配置索引;等级奖励时-发领取的奖励等级
                  ("OPValue2", c_int),    # 使用道具时-发选中格子A的行列值 行*10+列
                  ("OPValue3", c_int),    # 使用道具时-发选中格子B的行列值 行*10+列
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x25
        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 = 0x25
        self.OPType = 0
        self.OPValue = 0
        self.OPValue2 = 0
        self.OPValue3 = 0
        return
    def GetLength(self):
        return sizeof(tagCMActLianqiOP)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 25 炼器操作 //tagCMActLianqiOP:
                                Cmd:%s,
                                SubCmd:%s,
                                OPType:%d,
                                OPValue:%d,
                                OPValue2:%d,
                                OPValue3:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.OPType,
                                self.OPValue,
                                self.OPValue2,
                                self.OPValue3
                                )
        return DumpString
m_NAtagCMActLianqiOP=tagCMActLianqiOP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActLianqiOP.Cmd,m_NAtagCMActLianqiOP.SubCmd))] = m_NAtagCMActLianqiOP
#------------------------------------------------------
@@ -18199,6 +18608,54 @@
#------------------------------------------------------
# B0 35 福地管家免费试用 #tagCMMineHouseKeeperFreeUse
class  tagCMMineHouseKeeperFreeUse(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x35
        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 = 0x35
        return
    def GetLength(self):
        return sizeof(tagCMMineHouseKeeperFreeUse)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 35 福地管家免费试用 //tagCMMineHouseKeeperFreeUse:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMMineHouseKeeperFreeUse=tagCMMineHouseKeeperFreeUse()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineHouseKeeperFreeUse.Cmd,m_NAtagCMMineHouseKeeperFreeUse.SubCmd))] = m_NAtagCMMineHouseKeeperFreeUse
#------------------------------------------------------
# B0 30 福地物品拉 #tagCMMineItemPull
class  tagCMMineItemPull(Structure):
@@ -18270,7 +18727,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("IsSuper", c_ubyte),    # 是否超级刷新
                  ("RefreshType", c_ubyte),    # 刷新类型:0-自己物品普通刷新;1-自己物品超级刷新;2-周围福地玩家列表刷新
                  ]
    def __init__(self):
@@ -18287,7 +18744,7 @@
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x31
        self.IsSuper = 0
        self.RefreshType = 0
        return
    def GetLength(self):
@@ -18300,12 +18757,12 @@
        DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh:
                                Cmd:%s,
                                SubCmd:%s,
                                IsSuper:%d
                                RefreshType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.IsSuper
                                self.RefreshType
                                )
        return DumpString
@@ -18812,6 +19269,62 @@
m_NAtagCMFBBuyBuff=tagCMFBBuyBuff()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBBuyBuff.Cmd,m_NAtagCMFBBuyBuff.SubCmd))] = m_NAtagCMFBBuyBuff
#------------------------------------------------------
# B1 08 快速一键过关副本 #tagCMFBQuickPass
class  tagCMFBQuickPass(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("LineID", c_ushort),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB1
        self.SubCmd = 0x08
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB1
        self.SubCmd = 0x08
        self.MapID = 0
        self.LineID = 0
        return
    def GetLength(self):
        return sizeof(tagCMFBQuickPass)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 08 快速一键过关副本 //tagCMFBQuickPass:
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                LineID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.LineID
                                )
        return DumpString
m_NAtagCMFBQuickPass=tagCMFBQuickPass()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBQuickPass.Cmd,m_NAtagCMFBQuickPass.SubCmd))] = m_NAtagCMFBQuickPass
#------------------------------------------------------
@@ -20705,6 +21218,70 @@
m_NAtagCMSendGifts=tagCMSendGifts()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts
#------------------------------------------------------
# B4 11 镜像战斗 #tagCMMirrorFight
class  tagCMMirrorFight(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),    # 自定义地图ID,如竞技场等
                  ("FuncLineID", c_ushort),
                  ("TagPlayeID", c_int),    # 目标玩家ID,支持跨服玩家ID
                  ("CmdType", c_ubyte),    # 命令类型: 0-创建战斗;1-开始战斗;2-战斗中跳过;3-不创建战斗直接得结果
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB4
        self.SubCmd = 0x11
        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 = 0xB4
        self.SubCmd = 0x11
        self.MapID = 0
        self.FuncLineID = 0
        self.TagPlayeID = 0
        self.CmdType = 0
        return
    def GetLength(self):
        return sizeof(tagCMMirrorFight)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B4 11 镜像战斗 //tagCMMirrorFight:
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                FuncLineID:%d,
                                TagPlayeID:%d,
                                CmdType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.FuncLineID,
                                self.TagPlayeID,
                                self.CmdType
                                )
        return DumpString
m_NAtagCMMirrorFight=tagCMMirrorFight()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMirrorFight.Cmd,m_NAtagCMMirrorFight.SubCmd))] = m_NAtagCMMirrorFight
#------------------------------------------------------
@@ -22752,7 +23329,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    # 0-取消匹配; 1-进行匹配
                  ("Type", c_ubyte),    # 0-查询匹配;1-刷新匹配
                  ]
    def __init__(self):
@@ -22805,6 +23382,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("IsWin", c_ubyte),    #是否获胜
                  ("TagPlayerID", c_int),    #目标玩家ID
                  ]
    def __init__(self):
@@ -22822,6 +23400,7 @@
        self.Cmd = 0xC1
        self.SubCmd = 0x08
        self.IsWin = 0
        self.TagPlayerID = 0
        return
    def GetLength(self):
@@ -22834,12 +23413,14 @@
        DumpString = '''// C1 08 跨服PK挑战机器人结算 //tagCMCrossRealmPKRobotOver:
                                Cmd:%s,
                                SubCmd:%s,
                                IsWin:%d
                                IsWin:%d,
                                TagPlayerID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.IsWin
                                self.IsWin,
                                self.TagPlayerID
                                )
        return DumpString
@@ -22953,6 +23534,241 @@
#------------------------------------------------------
# C1 25 仙盟攻城战攻击 #tagCMFamilyGCZAtk
class  tagCMFamilyGCZAtk(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("AtkType", c_ubyte),    #攻击类型: 1-普通单攻;2-技能单攻;3-技能群攻;
                  ("TagCityID", c_int),    #目标城池ID,一般是仙盟ID或者特殊城池ID如修罗城城池,普攻单攻需指定目标,群攻技能发0
                  ("TagGuardID", c_int),    #目标守卫ID,一般是玩家ID或者特殊守卫ID如修罗城守卫,普攻单攻需指定目标,技能攻击发0
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        self.SubCmd = 0x25
        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 = 0xC1
        self.SubCmd = 0x25
        self.AtkType = 0
        self.TagCityID = 0
        self.TagGuardID = 0
        return
    def GetLength(self):
        return sizeof(tagCMFamilyGCZAtk)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 25 仙盟攻城战攻击 //tagCMFamilyGCZAtk:
                                Cmd:%s,
                                SubCmd:%s,
                                AtkType:%d,
                                TagCityID:%d,
                                TagGuardID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.AtkType,
                                self.TagCityID,
                                self.TagGuardID
                                )
        return DumpString
m_NAtagCMFamilyGCZAtk=tagCMFamilyGCZAtk()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZAtk.Cmd,m_NAtagCMFamilyGCZAtk.SubCmd))] = m_NAtagCMFamilyGCZAtk
#------------------------------------------------------
# C1 24 仙盟攻城战捐献 #tagCMFamilyGCZContribution
class  tagCMFamilyGCZContribution(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ContributionType", c_ubyte),    #捐献类型: 0-低级;1-高级
                  ("UseCount", c_int),    #物品捐献时使用个数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        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 = 0xC1
        self.SubCmd = 0x24
        self.ContributionType = 0
        self.UseCount = 0
        return
    def GetLength(self):
        return sizeof(tagCMFamilyGCZContribution)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 24 仙盟攻城战捐献 //tagCMFamilyGCZContribution:
                                Cmd:%s,
                                SubCmd:%s,
                                ContributionType:%d,
                                UseCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ContributionType,
                                self.UseCount
                                )
        return DumpString
m_NAtagCMFamilyGCZContribution=tagCMFamilyGCZContribution()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZContribution.Cmd,m_NAtagCMFamilyGCZContribution.SubCmd))] = m_NAtagCMFamilyGCZContribution
#------------------------------------------------------
# C1 26 仙盟攻城战竞猜 #tagCMFamilyGCZGuess
class  tagCMFamilyGCZGuess(Structure):
    Head = tagHead()
    SelectCnt = 0    #(BYTE SelectCnt)
    SelectFamilyIDList = list()    #(vector<DWORD> SelectFamilyIDList)// 竞猜选择的仙盟ID排名顺序
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SelectCnt):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.SelectFamilyIDList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x26
        self.SelectCnt = 0
        self.SelectFamilyIDList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4 * self.SelectCnt
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SelectCnt)
        for i in range(self.SelectCnt):
            data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                SelectCnt:%d,
                                SelectFamilyIDList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.SelectCnt,
                                "..."
                                )
        return DumpString
m_NAtagCMFamilyGCZGuess=tagCMFamilyGCZGuess()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZGuess.Head.Cmd,m_NAtagCMFamilyGCZGuess.Head.SubCmd))] = m_NAtagCMFamilyGCZGuess
#------------------------------------------------------
# C1 27 仙盟攻城战圣泉抽奖 #tagCMFamilyGCZSQ
class  tagCMFamilyGCZSQ(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GridNum", c_ubyte),    # 选中格子编号,1~n
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        self.SubCmd = 0x27
        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 = 0xC1
        self.SubCmd = 0x27
        self.GridNum = 0
        return
    def GetLength(self):
        return sizeof(tagCMFamilyGCZSQ)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 27 仙盟攻城战圣泉抽奖 //tagCMFamilyGCZSQ:
                                Cmd:%s,
                                SubCmd:%s,
                                GridNum:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.GridNum
                                )
        return DumpString
m_NAtagCMFamilyGCZSQ=tagCMFamilyGCZSQ()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZSQ.Cmd,m_NAtagCMFamilyGCZSQ.SubCmd))] = m_NAtagCMFamilyGCZSQ
#------------------------------------------------------
# C1 10 幸运云购购买 #tagCMLuckyCloudBuy
class  tagCMLuckyCloudBuy(Structure):