From a9e5ae2ed13bffe82038291776ffa68f65becce6 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 10 六月 2019 10:57:18 +0800
Subject: [PATCH] 7145 【2.0】【后端】仙盟新增兑换活跃令功能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py |   65 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                 |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py         |  129 ++++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py     |   88 +++++++-
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                              |   85 ++++++++
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                          |  224 +++++++++++++--------
 6 files changed, 461 insertions(+), 136 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 4a9855a..82e2247 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/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):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 2c62392..53f7a9d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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
                   ]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index f97cd5b..d00e85e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index aa0e755..82e2247 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 10ec851..53f7a9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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
                   ]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index 5697e1b..74471cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/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
\ No newline at end of file
+    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

--
Gitblit v1.8.0