xdh
2019-06-10 a9e5ae2ed13bffe82038291776ffa68f65becce6
7145 【2.0】【后端】仙盟新增兑换活跃令功能
6个文件已修改
597 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -2228,7 +2228,7 @@
class  tagCGVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
@@ -3396,8 +3396,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ]
    def __init__(self):
@@ -5953,7 +5953,7 @@
                  ("SrcBackpack", c_ubyte),    #源背包类型
                  ("DesBackPack", c_ubyte),    #目标背包类型
                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
                  ("IsAll", c_ubyte),    #是否全部转移
                  ("IsAll", c_ubyte),    #是否全部转移
                  ]
    def __init__(self):
@@ -11660,6 +11660,83 @@
#------------------------------------------------------
# A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange
class  tagCMFamilyActivityExchange(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)//材料所在背包索引的数量
    IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表
    ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA6
        self.Head.SubCmd = 0x06
        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.ReadWORD(_lpData,_pos)
            self.IndexList.append(value)
        for i in range(self.Count):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.ItemIDList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA6
        self.Head.SubCmd = 0x06
        self.Count = 0
        self.IndexList = list()
        self.ItemIDList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 2 * self.Count
        length += 4 * 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.WriteWORD(data, self.IndexList[i])
        for i in range(self.Count):
            data = CommFunc.WriteDWORD(data, self.ItemIDList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                IndexList:%s,
                                ItemIDList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagCMFamilyActivityExchange=tagCMFamilyActivityExchange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyActivityExchange.Head.Cmd,m_NAtagCMFamilyActivityExchange.Head.SubCmd))] = m_NAtagCMFamilyActivityExchange
#------------------------------------------------------
# A6 05  家族捐献兽粮 #tagCMFamilyDonate
class  tagCMFamilyDonate(Structure):
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -829,7 +829,7 @@
    Head = tagHead()
    Type = 0    #(BYTE Type)//类型
    Count = 0    #(WORD Count)//数量
    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
    data = None
    def __init__(self):
@@ -1133,7 +1133,7 @@
    FamilyID = 0    #(DWORD FamilyID)//家族ID
    ActionType = 0    #(BYTE ActionType)//类型
    Count = 0    #(WORD Count)//数量
    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
    data = None
    def __init__(self):
@@ -2981,8 +2981,8 @@
    IsAlive = 0    #(BYTE IsAlive)// 是否存活
    RecordLen = 0    #(WORD RecordLen)// 长度
    KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
    data = None
    def __init__(self):
@@ -3376,8 +3376,8 @@
class  tagGCNotifyEquipClassEquip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Star", c_ubyte),
                  ("ItemID", c_int),
                  ("Star", c_ubyte),
                  ]
    def __init__(self):
@@ -3635,7 +3635,7 @@
    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
    ID = 0    #(DWORD ID)
    ID2 = 0    #(DWORD ID2)
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字
    Name2 = ""    #(char Name2[33])//名字2
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
@@ -3947,7 +3947,7 @@
    Count = 0    #(DWORD Count)//数量
    IsBind = 0    #(BYTE IsBind)//是否绑定
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)//自定义数据
    UserData = ""    #(String UserData)//自定义数据
    data = None
    def __init__(self):
@@ -4188,7 +4188,7 @@
    Name = ""    #(char Name[33])
    LV = 0    #(DWORD LV)//等级
    Job = 0    #(BYTE Job)
    RealmLV = 0    #(WORD RealmLV)//境界
    RealmLV = 0    #(WORD RealmLV)//境界
    data = None
    def __init__(self):
@@ -5629,7 +5629,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("StartTime", c_int),
                  ("StartTime", c_int),
                  ]
    def __init__(self):
@@ -5738,7 +5738,7 @@
class  tagFamilyArrestOverStateInfo(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
    data = None
    def __init__(self):
@@ -5888,7 +5888,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("SortValue", c_int),    #最近联系人和仇人按时间排序
                  ]
@@ -6054,7 +6054,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ]
    def __init__(self):
@@ -6249,8 +6249,8 @@
class  tagGCGroupPlayer(Structure):
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),
                  ("SortValue", c_int),
                  ("PlayerID", c_int),
                  ("SortValue", c_int),
                  ]
    def __init__(self):
@@ -6430,7 +6430,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("OnlineType", c_ubyte),    #0不在线 1在线 2脱机在线
                  ]
@@ -6486,9 +6486,9 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),
                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__
                  ("Value", c_int),
                  ("PlayerID", c_int),
                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__
                  ("Value", c_int),
                  ]
    def __init__(self):
@@ -6543,7 +6543,7 @@
class  tagGCVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
    SrcNameLen = 0    #(BYTE SrcNameLen)
    SrcName = ""    #(String SrcName)//size = SrcNameLen
    PlayerID = 0    #(DWORD PlayerID)
@@ -8059,7 +8059,7 @@
    ItemGUID = ""    #(char ItemGUID[40])
    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
    AddTime = ""    #(char AddTime[19])//上架时间
    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
    BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
    data = None
@@ -9003,7 +9003,7 @@
class  tagGCTeamMemPrepareState(Structure):
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("PrepareState", c_ubyte),    # 状态,0-未准备,1-已准备,2-拒绝
                  ]
@@ -9469,9 +9469,9 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("RefreshType", c_ubyte),    #刷新类型,同0418属性类型
                  ("Value", c_int),
                  ("Value", c_int),
                  ]
    def __init__(self):
@@ -9741,8 +9741,8 @@
class  tagGCCrossRealmPKBillboardInfo(Structure):
    Head = tagHead()
    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
    SeasonID = 0    #(BYTE SeasonID)// 赛季ID
    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
    SeasonID = 0    #(BYTE SeasonID)// 赛季ID
    Count = 0    #(WORD Count)
    PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
    data = None
@@ -10519,7 +10519,7 @@
class  tagMCCoinToGoldCount(Structure):
    _pack_ = 1
    _fields_ = [
                  ("RecordID", c_ubyte),
                  ("RecordID", c_ubyte),
                  ("TodayPayCount", c_ushort),    # 今日已购买次数
                  ("TotalPayCount", c_int),    # 累计总购买次数
                  ]
@@ -10755,7 +10755,7 @@
    BackpackLV = 0    #(BYTE BackpackLV)//背包等级
    WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
    TeamID = 0    #(DWORD TeamID)//队伍ID
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
    UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
    AttackMode = 0    #(BYTE AttackMode)//攻击模式
    LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
@@ -11748,7 +11748,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_ushort),
                  ("MapID", c_ushort),
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ]
@@ -11804,7 +11804,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("MapID", c_int),
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ]
@@ -11912,7 +11912,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Mode", c_ubyte),
                  ("Mode", c_ubyte),
                  ]
    def __init__(self):
@@ -12209,7 +12209,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LockState", c_ubyte),
                  ("LockState", c_ubyte),
                  ]
    def __init__(self):
@@ -13577,7 +13577,7 @@
    Seting = 0    #(DWORD Seting)// 操作数据记录
    DecomposeCnt = 0    #(BYTE DecomposeCnt)// 分解件数进度
    GetItemLen = 0    #(WORD GetItemLen)
    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
    data = None
    def __init__(self):
@@ -13665,8 +13665,8 @@
class  tagMCEquipPartStar(Structure):
    _pack_ = 1
    _fields_ = [
                  ("EquipPackIndex", c_ushort),
                  ("Star", c_ubyte),
                  ("EquipPackIndex", c_ushort),
                  ("Star", c_ubyte),
                  ]
    def __init__(self):
@@ -13810,7 +13810,7 @@
class  tagMCEquipPartXLAttr(Structure):
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    XLAttrLV = 0    #(BYTE XLAttrLV)// 洗练等级
    XLAttrCnt = 0    #(BYTE XLAttrCnt)// 属性条数
    XLAttrList = list()    #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
@@ -13945,7 +13945,7 @@
class  tagMCFairyAdventuresData(Structure):
    _pack_ = 1
    _fields_ = [
                  ("EventID", c_ubyte),
                  ("EventID", c_ubyte),
                  ("Gear", c_ubyte),    #第几档
                  ("Condition", c_int),    #条件
                  ]
@@ -14346,7 +14346,7 @@
class  tagMCFBEncourageInfo(Structure):
    Head = tagHead()
    Cnt = 0    #(BYTE Cnt)//
    Cnt = 0    #(BYTE Cnt)//
    InfoList = list()    #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
    data = None
@@ -15136,7 +15136,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Cnt", c_int),
                  ("Cnt", c_int),
                  ]
    def __init__(self):
@@ -15186,9 +15186,9 @@
class  tagMCMagicWeaponInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("MWID", c_int),
                  ("LV", c_ubyte),
                  ("Exp", c_int),
                  ("MWID", c_int),
                  ("LV", c_ubyte),
                  ("Exp", c_int),
                  ("FBPassLV", c_ubyte),    #副本关卡
                  ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
                  ]
@@ -15426,11 +15426,11 @@
class  tagMCEquipPartPlusLV(Structure):
    _pack_ = 1
    _fields_ = [
                  ("PackType", c_ubyte),
                  ("EquipIndex", c_ubyte),
                  ("EquipPartStarLV", c_ushort),
                  ("Proficiency", c_int),
                  ("EvolveLV", c_ubyte),
                  ("PackType", c_ubyte),
                  ("EquipIndex", c_ubyte),
                  ("EquipPartStarLV", c_ushort),
                  ("Proficiency", c_int),
                  ("EvolveLV", c_ubyte),
                  ]
    def __init__(self):
@@ -15725,7 +15725,7 @@
class  tagMCNPCAttackCount(Structure):
    _pack_ = 1
    _fields_ = [
                  ("NPCID", c_int),
                  ("NPCID", c_int),
                  ("AttackCount", c_ubyte),    #已攻击次数
                  ]
@@ -16017,7 +16017,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Record", c_ubyte),    #0-未领取 1-已领取
                  ("Record", c_ubyte),    #0-未领取 1-已领取
                  ]
    def __init__(self):
@@ -16270,8 +16270,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PrizeItem", c_int),
                  ("ItemCount", c_ubyte),
                  ("PrizeItem", c_int),
                  ("ItemCount", c_ubyte),
                  ]
    def __init__(self):
@@ -16317,7 +16317,7 @@
class  tagMCPlayerOnlinePrizeInfo(Structure):
    Head = tagHead()
    RemaindTime = 0    #(DWORD RemaindTime)//产生奖励剩余时间
    HasPrize = 0    #(BYTE HasPrize)//是否可以领取
    HasPrize = 0    #(BYTE HasPrize)//是否可以领取
    PrizeType = 0    #(BYTE PrizeType)//在线奖励类型
    PrizeCnt = 0    #(BYTE PrizeCnt)//在线奖励类型
    PrizeInfo = list()    #(vector<tagMCOnlinePrizeItem> PrizeInfo)//在线奖励类型
@@ -16464,7 +16464,7 @@
    _pack_ = 1
    _fields_ = [
                  ("AlchemyID", c_int),    # 丹 ID
                  ("StartTime", c_int),    # 开始炼的时间
                  ("StartTime", c_int),    # 开始炼的时间
                  ("AlchemyTimes", c_ushort),    # 炼的次数
                  ]
@@ -17147,7 +17147,7 @@
# A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
class  tagMCStoneMsg(Structure):
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    MaxStoneCount = 0    #(BYTE MaxStoneCount)// 最大孔数
    StoneInfo = list()    #(vector<DWORD> StoneInfo)// 孔内宝石信息
    StoneBind = list()    #(vector<BYTE> StoneBind)// 孔内宝石是否绑定
@@ -18135,8 +18135,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PassLV", c_int),
                  ("YesterDayPassLV", c_int),
                  ("PassLV", c_int),
                  ("YesterDayPassLV", c_int),
                  ]
    def __init__(self):
@@ -18543,6 +18543,58 @@
m_NAtagMCChampionFamilyDailyReward=tagMCChampionFamilyDailyReward()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionFamilyDailyReward.Cmd,m_NAtagMCChampionFamilyDailyReward.SubCmd))] = m_NAtagMCChampionFamilyDailyReward
#------------------------------------------------------
# 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
#------------------------------------------------------
@@ -19118,7 +19170,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Exp", c_int),    # 当前VIP等级经验
                  ("VIPLV", c_int),    #vip等级
                  ("VIPLV", c_int),    #vip等级
                  ]
    def __init__(self):
@@ -19444,8 +19496,8 @@
class  tagMCCollectAwardItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Count", c_ubyte),
                  ("ItemID", c_int),
                  ("Count", c_ubyte),
                  ("IsAuctionItem", c_ubyte),    #是否拍品
                  ]
@@ -19563,11 +19615,11 @@
class  tagMCDynamicBarrier(Structure):
    _pack_ = 1
    _fields_ = [
                  ("APosX", c_ushort),
                  ("APosY", c_ushort),
                  ("BPosX", c_ushort),
                  ("BPosY", c_ushort),
                  ("Angle", c_ushort),
                  ("APosX", c_ushort),
                  ("APosY", c_ushort),
                  ("BPosX", c_ushort),
                  ("BPosY", c_ushort),
                  ("Angle", c_ushort),
                  ]
    def __init__(self):
@@ -20170,8 +20222,8 @@
class  tagMCNPCCntInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("NPCID", c_int),
                  ("Cnt", c_int),
                  ("NPCID", c_int),
                  ("Cnt", c_int),
                  ]
    def __init__(self):
@@ -20345,13 +20397,13 @@
class  tagMCNPCInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("NPCHP", c_int),
                  ("MaxHP", c_int),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("NPCHP", c_int),
                  ("MaxHP", c_int),
                  ("IsActive", c_ubyte),    #这个NPC是否活着
                  ("PosX", c_ushort),
                  ("PosY", c_ushort),
                  ("PosX", c_ushort),
                  ("PosY", c_ushort),
                  ("RefreshSecond", c_int),    # 剩余多少秒刷新
                  ]
@@ -20493,9 +20545,9 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ("PosX", c_ushort),
                  ("PosY", c_ushort),
                  ("NPCID", c_int),
                  ("PosX", c_ushort),
                  ("PosY", c_ushort),
                  ]
    def __init__(self):
@@ -20553,7 +20605,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ("NPCID", c_int),
                  ]
    def __init__(self):
@@ -20605,7 +20657,7 @@
    PlayerID = 0    #(DWORD PlayerID)//玩家ID
    EquipClassLV = 0    #(BYTE EquipClassLV)
    ItemDataSize = 0    #(WORD ItemDataSize)
    ItemData = ""    #(String ItemData)//物品记录
    ItemData = ""    #(String ItemData)//物品记录
    data = None
    def __init__(self):
@@ -20787,9 +20839,9 @@
class  tagMCRunTaskAwardRecord(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Type", c_ubyte),
                  ("Num", c_int),
                  ("AwardState", c_ubyte),
                  ("Type", c_ubyte),
                  ("Num", c_int),
                  ("AwardState", c_ubyte),
                  ]
    def __init__(self):
@@ -20904,7 +20956,7 @@
    ItemDataSize = 0    #(DWORD ItemDataSize)
    ItemData = ""    #(String ItemData)//物品记录
    PlusDataSize = 0    #(DWORD PlusDataSize)
    PlusData = ""    #(String PlusData)//扩展记录
    PlusData = ""    #(String PlusData)//扩展记录
    data = None
    def __init__(self):
@@ -21000,7 +21052,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GuideID", c_ushort),
                  ("GuideID", c_ushort),
                  ]
    def __init__(self):
@@ -21050,8 +21102,8 @@
class  tagRefreshType(Structure):
    _pack_ = 1
    _fields_ = [
                  ("RefreshType", c_ubyte),
                  ("Value", c_int),
                  ("RefreshType", c_ubyte),
                  ("Value", c_int),
                  ]
    def __init__(self):
@@ -21239,7 +21291,7 @@
class  tagMCItemDayUseCnt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemID", c_int),
                  ("UseCnt", c_ushort),    # 今日已使用次数
                  ]
@@ -21349,7 +21401,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MakeType", c_ubyte),    #类型        TMakeItemType
                  ("MakeType", c_ubyte),    #类型        TMakeItemType
                  ("Result", c_ubyte),    #是否成功
                  ("MakeItemID", c_int),    #合成的物品ID
                  ]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -157,7 +157,7 @@
Writer = alee
Releaser = alee
RegType = 0
RegisterPackCount = 4
RegisterPackCount = 5
PacketCMD_1=0xA6
PacketSubCMD_1=0x01
@@ -175,6 +175,10 @@
PacketSubCMD_4=0x11
PacketCallFunc_4=UpdateFamilyName
PacketCMD_5=0xA6
PacketSubCMD_5=0x06
PacketCallFunc_5=OnFamilyActivityExchange
;家族仓库
[PlayerFamilyStore]
ScriptName = Player\PlayerFamilyStore.py
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -2228,7 +2228,7 @@
class  tagCGVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
@@ -2326,7 +2326,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TagID", c_int),
                  ("TagID", c_int),
                  ("Answer", c_ubyte),    #0: 拒绝 1: 接受
                  ]
@@ -2382,7 +2382,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemID", c_int),
                  ("ItemID", c_int),
                  ("IsAttention", c_ubyte),    #是否关注,取消关注发0
                  ]
@@ -3396,8 +3396,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ("ZoneID", c_ubyte),    # 赛区ID
                  ("SeasonID", c_ubyte),    # 赛季ID
                  ]
    def __init__(self):
@@ -3676,7 +3676,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Adult", c_ubyte),
                  ("Adult", c_ubyte),
                  ]
    def __init__(self):
@@ -4029,7 +4029,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("MapID", c_int),
                  ]
    def __init__(self):
@@ -4129,8 +4129,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("FuncLineID", c_ushort),
                  ("MapID", c_int),
                  ("FuncLineID", c_ushort),
                  ]
    def __init__(self):
@@ -4185,7 +4185,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("ObjID", c_int),
                  ]
    def __init__(self):
@@ -4341,7 +4341,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TaskID", c_int),
                  ("TaskID", c_int),
                  ("RewardPer", c_ushort),    # 奖励百分比, 默认100;  150则代表1.5倍
                  ]
@@ -4397,7 +4397,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ("NPCID", c_int),
                  ("EndType", c_ubyte),    # 0-默认;1-跳过
                  ]
@@ -4781,8 +4781,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("BossID", c_int),
                  ("ObjID", c_int),
                  ("BossID", c_int),
                  ]
    def __init__(self):
@@ -4837,8 +4837,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
                  ]
@@ -5119,7 +5119,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MissionID", c_int),
                  ("MissionID", c_int),
                  ("DoType", c_ubyte),    # 0-只完成本次;1-完成所有环任务
                  ]
@@ -5336,7 +5336,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GuideIndex", c_ubyte),    # 记录位索引, 发送255时,代表设置全部
                  ("IsOK", c_ubyte),
                  ("IsOK", c_ubyte),
                  ]
    def __init__(self):
@@ -5467,7 +5467,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MissionID", c_int),
                  ("MissionID", c_int),
                  ]
    def __init__(self):
@@ -5666,7 +5666,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),
                  ("PlayerID", c_int),
                  ("EquipClassLV", c_ubyte),    #大于0为查看指定境界阶装备信息,  0为查看默认信息
                  ]
@@ -5898,7 +5898,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Seting", c_int),
                  ("Seting", c_int),
                  ]
    def __init__(self):
@@ -5953,7 +5953,7 @@
                  ("SrcBackpack", c_ubyte),    #源背包类型
                  ("DesBackPack", c_ubyte),    #目标背包类型
                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
                  ("IsAll", c_ubyte),    #是否全部转移
                  ("IsAll", c_ubyte),    #是否全部转移
                  ]
    def __init__(self):
@@ -6839,7 +6839,7 @@
                  ("SubCmd", c_ubyte),
                  ("PackType", c_ubyte),    #背包类型
                  ("ItemIndex", c_ushort),    #物品在背包中索引
                  ("DropPosX", c_ushort),
                  ("DropPosX", c_ushort),
                  ("DropPosY", c_ushort),    #掉落物品
                  ]
@@ -7895,8 +7895,8 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),
                  ("LineID", c_ushort),
                  ("MapID", c_int),
                  ("LineID", c_ushort),
                  ("Cnt", c_ubyte),    # 扫荡次数
                  ("IsFinish", c_ubyte),    # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
                  ("DataEx", c_int),    #附带信息
@@ -10073,7 +10073,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MWID", c_int),
                  ("MWID", c_int),
                  ]
    def __init__(self):
@@ -11660,6 +11660,83 @@
#------------------------------------------------------
# A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange
class  tagCMFamilyActivityExchange(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)//材料所在背包索引的数量
    IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表
    ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA6
        self.Head.SubCmd = 0x06
        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.ReadWORD(_lpData,_pos)
            self.IndexList.append(value)
        for i in range(self.Count):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.ItemIDList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA6
        self.Head.SubCmd = 0x06
        self.Count = 0
        self.IndexList = list()
        self.ItemIDList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 2 * self.Count
        length += 4 * 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.WriteWORD(data, self.IndexList[i])
        for i in range(self.Count):
            data = CommFunc.WriteDWORD(data, self.ItemIDList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                IndexList:%s,
                                ItemIDList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagCMFamilyActivityExchange=tagCMFamilyActivityExchange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyActivityExchange.Head.Cmd,m_NAtagCMFamilyActivityExchange.Head.SubCmd))] = m_NAtagCMFamilyActivityExchange
#------------------------------------------------------
# A6 05  家族捐献兽粮 #tagCMFamilyDonate
class  tagCMFamilyDonate(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -829,7 +829,7 @@
    Head = tagHead()
    Type = 0    #(BYTE Type)//类型
    Count = 0    #(WORD Count)//数量
    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
    data = None
    def __init__(self):
@@ -1133,7 +1133,7 @@
    FamilyID = 0    #(DWORD FamilyID)//家族ID
    ActionType = 0    #(BYTE ActionType)//类型
    Count = 0    #(WORD Count)//数量
    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
    data = None
    def __init__(self):
@@ -2981,8 +2981,8 @@
    IsAlive = 0    #(BYTE IsAlive)// 是否存活
    RecordLen = 0    #(WORD RecordLen)// 长度
    KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
    data = None
    def __init__(self):
@@ -3947,7 +3947,7 @@
    Count = 0    #(DWORD Count)//数量
    IsBind = 0    #(BYTE IsBind)//是否绑定
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)//自定义数据
    UserData = ""    #(String UserData)//自定义数据
    data = None
    def __init__(self):
@@ -4188,7 +4188,7 @@
    Name = ""    #(char Name[33])
    LV = 0    #(DWORD LV)//等级
    Job = 0    #(BYTE Job)
    RealmLV = 0    #(WORD RealmLV)//境界
    RealmLV = 0    #(WORD RealmLV)//境界
    data = None
    def __init__(self):
@@ -5738,7 +5738,7 @@
class  tagFamilyArrestOverStateInfo(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
    data = None
    def __init__(self):
@@ -6487,7 +6487,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    
                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__
                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__
                  ("Value", c_int),    
                  ]
@@ -6543,7 +6543,7 @@
class  tagGCVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
    SrcNameLen = 0    #(BYTE SrcNameLen)
    SrcName = ""    #(String SrcName)//size = SrcNameLen
    PlayerID = 0    #(DWORD PlayerID)
@@ -8059,7 +8059,7 @@
    ItemGUID = ""    #(char ItemGUID[40])
    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
    AddTime = ""    #(char AddTime[19])//上架时间
    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
    BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
    data = None
@@ -9741,8 +9741,8 @@
class  tagGCCrossRealmPKBillboardInfo(Structure):
    Head = tagHead()
    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
    SeasonID = 0    #(BYTE SeasonID)// 赛季ID
    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
    SeasonID = 0    #(BYTE SeasonID)// 赛季ID
    Count = 0    #(WORD Count)
    PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
    data = None
@@ -10755,7 +10755,7 @@
    BackpackLV = 0    #(BYTE BackpackLV)//背包等级
    WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
    TeamID = 0    #(DWORD TeamID)//队伍ID
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
    UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
    AttackMode = 0    #(BYTE AttackMode)//攻击模式
    LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
@@ -13810,7 +13810,7 @@
class  tagMCEquipPartXLAttr(Structure):
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
    XLAttrLV = 0    #(BYTE XLAttrLV)// 洗练等级
    XLAttrCnt = 0    #(BYTE XLAttrCnt)// 属性条数
    XLAttrList = list()    #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
@@ -16017,7 +16017,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Record", c_ubyte),    #0-未领取 1-已领取
                  ("Record", c_ubyte),    #0-未领取 1-已领取
                  ]
    def __init__(self):
@@ -18546,6 +18546,58 @@
#------------------------------------------------------
# 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 06 仙盟每日福利领取状态 #tagMCFamilyDayAward
class  tagMCFamilyDayAward(Structure):
@@ -20605,7 +20657,7 @@
    PlayerID = 0    #(DWORD PlayerID)//玩家ID
    EquipClassLV = 0    #(BYTE EquipClassLV)
    ItemDataSize = 0    #(WORD ItemDataSize)
    ItemData = ""    #(String ItemData)//物品记录
    ItemData = ""    #(String ItemData)//物品记录
    data = None
    def __init__(self):
@@ -20904,7 +20956,7 @@
    ItemDataSize = 0    #(DWORD ItemDataSize)
    ItemData = ""    #(String ItemData)//物品记录
    PlusDataSize = 0    #(DWORD PlusDataSize)
    PlusData = ""    #(String PlusData)//扩展记录
    PlusData = ""    #(String PlusData)//扩展记录
    data = None
    def __init__(self):
@@ -21349,7 +21401,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MakeType", c_ubyte),    #类型        TMakeItemType
                  ("MakeType", c_ubyte),    #类型        TMakeItemType
                  ("Result", c_ubyte),    #是否成功
                  ("MakeItemID", c_int),    #合成的物品ID
                  ]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -932,4 +932,67 @@
    clientPack = ChPyNetSendPack.tagMCFamilyDayAward()
    clientPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
    return
#// A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange
#
#struct    tagCMFamilyActivityExchange
#{
#    tagHead        Head;
#    BYTE        Count;        //材料所在背包索引的数量
#    WORD        IndexList[Count];    //材料所在背包索引列表
#    DWORD        ItemIDList[Count];    //材料所在背包物品ID列表
#};
## 家族兑换活跃令
#  @param playerIndex 玩家索引
#  @param clientData 客户端封包
#  @param tick 时间
#  @return None
def OnFamilyActivityExchange(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    if not clientData.Count:
        return
    playerID = curPlayer.GetID()
    eatIndexList = clientData.IndexList
    eatItemIDList = clientData.ItemIDList
    givePoint = 0 #分解得到活跃令
    familyDonateDict = IpyGameDataPY.GetFuncEvalCfg('FamilyDonate', 1, {})
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
    for i, index in enumerate(eatIndexList):
        eatItem = itemPack.GetAt(index)
        if not ItemCommon.CheckItemCanUse(eatItem):
            GameWorld.DebugLog("物品不可用,无法兑换!itemIndex=%s" % index)
            continue
        eatItemID = eatItem.GetItemTypeID()
        if eatItemID != eatItemIDList[i]:
            GameWorld.Log('家族兑换活跃令 发的物品ID不对应index=%s eatItemID=%s,ItemIDList[i]=%s' % (index, eatItemID, eatItemIDList[i]), playerID)
            continue
        if eatItem.GetIsBind():
            GameWorld.DebugLog("装备已绑定,无法兑换!itemIndex=%s" % index)
            continue
        if eatItem.GetEndureReduceType():
            GameWorld.DebugLog("有时效耐久物品,无法兑换!itemIndex=%s" % index)
            continue
        if not ItemCommon.CheckItemIsEquip(eatItem):
            GameWorld.DebugLog("非装备,无法兑换!itemIndex=%s" % index)
            continue
        itemColor = eatItem.GetItemColor()
        if str(itemColor) not in familyDonateDict:
            continue
        isSuite = eatItem.GetSuiteID()
        addPoint = familyDonateDict[str(itemColor)][1 if isSuite else 0]
        givePoint += addPoint
        ItemCommon.DelItem(curPlayer, eatItem, 1, True, ChConfig.ItemDel_ZhuXianDecompose, {'addPoint':addPoint}, True)
    if not givePoint:
        GameWorld.DebugLog("家族兑换活跃令,没有装备可兑换!")
        return
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, givePoint)
    #通知结果
    packData = ChPyNetSendPack.tagMCFamilyActivityExchangeResult()
    packData.Clear()
    packData.Point = givePoint
    NetPackCommon.SendFakePack(curPlayer, packData)
    return