From b1daad2394ff6f0322696df50fcc53236f4ea9b1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 七月 2024 17:11:39 +0800
Subject: [PATCH] 10215 10213 【越南】【主干】【港台】【砍树】古宝升星效果与古宝共鸣(增加古宝星级属性;增加古宝共鸣;增加boss最终伤害属性;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                     |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                     |   52 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                 |  108 ++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py               |   22 ++
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                                          |   52 +++++
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                      |  108 ++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py                 |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py              |   99 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                             |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                   |   60 +++++
 PySysDB/PySysDBPY.h                                                                                    |   21 ++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                          |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py            |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                        |   15 +
 15 files changed, 558 insertions(+), 9 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index f9cf77b..b808352 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -494,6 +494,24 @@
 	BYTE		UnlockItemCnt;	//解锁所需物品数量
 };
 
+//古宝共鸣属性表
+
+struct tagGubaoResonanceAttr
+{
+	WORD		_ResonanceID;	//共鸣ID
+	BYTE		_ResonanceStar;	//共鸣星级
+	list		ResonanceAttrIDList;	//共鸣总属性ID列表
+	list		ResonanceAttrValueList;	//共鸣总属性值列表
+};
+
+//古宝共鸣组合表
+
+struct tagGubaoResonance
+{
+	WORD		_ResonanceID;	//共鸣ID
+	list		GubaoIDList;	//古宝ID列表
+};
+
 //古宝升星表
 
 struct tagGubaoStar
@@ -501,6 +519,8 @@
 	WORD		_GubaoID;	//古宝ID
 	BYTE		_GubaoStar;	//古宝星级
 	list		StarUPNeedItemInfo;	//升星所需物品 [[物品ID,个数], ...]
+	list		StarAttrIDList;	//累计总属性ID列表
+	list		StarAttrValueList;	//累计总属性值列表
 	list		StarEffIDList;	//星级特殊效果ID列表
 };
 
@@ -785,6 +805,7 @@
 	DWORD		CftFamilyWarHPPer;	//仙盟联赛生命加成
 	DWORD		CftFamilyWarAtkPer;	//仙盟联赛攻击加成
 	DWORD		CftFamilySitExpPer;	//仙盟打坐经验加成
+	DWORD		CftBossFinalHurtPer;	//Boss最终伤害加成系数
 };
 
 //NPC掉落表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 89efac0..6e7bbd6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -19058,6 +19058,58 @@
 
 
 #------------------------------------------------------
+# B2 15 古宝共鸣激活 #tagCMGubaoResonanceActivate
+
+class  tagCMGubaoResonanceActivate(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ResonanceID", c_ushort),    # 共鸣ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB2
+        self.SubCmd = 0x15
+        self.ResonanceID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGubaoResonanceActivate)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 15 古宝共鸣激活 //tagCMGubaoResonanceActivate:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ResonanceID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ResonanceID
+                                )
+        return DumpString
+
+
+m_NAtagCMGubaoResonanceActivate=tagCMGubaoResonanceActivate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoResonanceActivate.Cmd,m_NAtagCMGubaoResonanceActivate.SubCmd))] = m_NAtagCMGubaoResonanceActivate
+
+
+#------------------------------------------------------
 # B2 17 古宝升星 #tagCMGubaoStarUp
 
 class  tagCMGubaoStarUp(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index abdd8c8..e723e65 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -23190,6 +23190,114 @@
 
 
 #------------------------------------------------------
+# A3 CF 古宝共鸣信息 #tagMCGubaoResonanceInfo
+
+class  tagMCGubaoResonance(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ResonanceID", c_ushort),    # 共鸣ID
+                  ("ResonanceStar", c_ubyte),    # 已激活共鸣星级
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ResonanceID = 0
+        self.ResonanceStar = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCGubaoResonance)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 CF 古宝共鸣信息 //tagMCGubaoResonanceInfo:
+                                ResonanceID:%d,
+                                ResonanceStar:%d
+                                '''\
+                                %(
+                                self.ResonanceID,
+                                self.ResonanceStar
+                                )
+        return DumpString
+
+
+class  tagMCGubaoResonanceInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    ResonanceInfoList = list()    #(vector<tagMCGubaoResonance> ResonanceInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xCF
+        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):
+            temResonanceInfoList = tagMCGubaoResonance()
+            _pos = temResonanceInfoList.ReadData(_lpData, _pos)
+            self.ResonanceInfoList.append(temResonanceInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xCF
+        self.Count = 0
+        self.ResonanceInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ResonanceInfoList[i].GetLength()
+
+        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.WriteString(data, self.ResonanceInfoList[i].GetLength(), self.ResonanceInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ResonanceInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCGubaoResonanceInfo=tagMCGubaoResonanceInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoResonanceInfo.Head.Cmd,m_NAtagMCGubaoResonanceInfo.Head.SubCmd))] = m_NAtagMCGubaoResonanceInfo
+
+
+#------------------------------------------------------
 # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
 
 class  tagMCHistoryReChargeAwardRecord(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 5bd3312..985d761 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -713,6 +713,8 @@
 Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
 Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
 
+Def_Effect_BossFinalHurtPer = 166   # Boss最终伤害万分率
+
 Def_Effect_ComboDefRate = 210 # 抗连击概率
 Def_Effect_AtkBackRate = 211 # 反击概率
 Def_Effect_AtkBackDefRate = 212 # 抗反击概率
@@ -1123,7 +1125,8 @@
 CDBPlayerRefresh_Lingyu, # 灵玉 261
 CDBPlayerRefresh_BossTrial, # 凭证积分 262
 CDBPlayerRefresh_GatherSoul, # 聚魂精华 263
-) = range(146, 264)
+CDBPlayerRefresh_BossFinalHurtPer,  # Boss最终输出伤害百分比 264
+) = range(146, 265)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index cb537c8..593e56c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1835,7 +1835,7 @@
 Writer = hxp
 Releaser = hxp
 RegType = 0
-RegisterPackCount = 3
+RegisterPackCount = 4
 
 PacketCMD_1=0xB2
 PacketSubCMD_1=0x16
@@ -1849,6 +1849,10 @@
 PacketSubCMD_3=0x18
 PacketCallFunc_3=OnGubaoLVUp
 
+PacketCMD_4=0xB2
+PacketSubCMD_4=0x15
+PacketCallFunc_4=OnGubaoResonanceActivate
+
 ;神通
 [PlayerShentong]
 ScriptName = Player\PlayerShentong.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 65105ee..60aa0d4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -2414,6 +2414,12 @@
     if atkObjType == IPY_GameWorld.gotPlayer and mapID == ChConfig.Def_FBMapID_FamilyBossMap:
         aFinalHurtPer += PlayerControl.GetFamilyBossHurtPer(atkObj)
         
+    if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(defObj):
+        killBossCntLimitDict = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit') 
+        limitIndex = GameWorld.GetDictValueByKey(killBossCntLimitDict, defObj.GetNPCID())
+        if limitIndex != None:
+            aFinalHurtPer += PlayerControl.GetBossFinalHurtPer(atkObj)
+            
     atkStateMark = GetObjAtkStateMark(atkObj)
     defStateMark = GetObjAtkStateMark(defObj)
     hurtFormulaKey = "%sV%s_%s" % (atkStateMark, defStateMark, atkType)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 1905399..a595e3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -80,7 +80,7 @@
 Def_BuffValue_Count = 3     # buff记录的value个数
 
 #游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 176
+Def_Calc_AllAttrType_MAX = 177
 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
 TYPE_Calc_AttrList = (
 TYPE_Calc_Metal,                        # 金 1
@@ -270,6 +270,7 @@
 TYPE_Calc_PetWeakenPer,                  # 弱化灵兽
 TYPE_Calc_SuperHitHurtPer,               # 强化暴伤
 TYPE_Calc_SuperHitHurtDefPer,            # 弱化暴伤 175
+TYPE_Calc_BossFinalHurtPer,              # boss最终伤害百分比
 ) = range(1, Def_Calc_AllAttrType_MAX)
 
 ## 支持大数值属性,超过20E
@@ -3391,6 +3392,7 @@
 Def_PlayerKey_LastHurtNPCObjID = "LastHurtNPCObjID" # 最后攻击的NPCObjID
 Def_PlayerKey_LastAttackerObjID = "LastAttackerObjID" # 被攻击者记录的最近攻击玩家ID
 Def_PlayerKey_CommMapExpRate = "CommMapExpRate" # 常规地图经验倍率加成
+Def_PlayerKey_BossFinalHurtPer = "BossFinalHurtPer" # boss最终伤害百分比
 Def_PlayerKey_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
 Def_PlayerKey_FinalHurtReducePer = "FHReducePer" # 最终伤害减免百分比
 Def_PlayerKey_FuhaoHitRate = "FuhaoHitRate" # 富豪一击概率
@@ -4470,6 +4472,7 @@
 Def_PDict_GubaoLVInfo = "GubaoLVInfo_%s"  # 古宝等级信息,参数(古宝ID),等级*100+星级
 Def_PDict_GubaoItemEffValue = "GubaoItemEffValue_%s_%s"  # 古宝效果物品进度,参数(古宝ID, 效果类型)
 Def_PDict_GubaoPiece  = "GubaoPiece_%s"  # 古宝碎片数,参数(古宝ID)
+Def_PDict_GubaoResonanceStar  = "GubaoResonanceStar_%s"  # 古宝共鸣,参数(共鸣ID)
 
 #神通
 Def_PDict_ShentongLVInfo = "ShentongLVInfo_%s"  # 神通等级信息,参数(神通ID),阶级*100+等级
@@ -4613,6 +4616,7 @@
 AttrName_GreatHitRateReduce = "GreatHitRateReduce"  # 抗卓越一击概率
 AttrName_SuperHitRateReduce = "SuperHitRateReduce"  # 抗暴击概率
 AttrName_IgnoreDefRateReduce = "IgnoreDefRateReduce"  # 抗无视防御概率
+AttrName_BossFinalHurtPer = "BossFinalHurtPer"  # Boss最终伤害百分比
 AttrName_FinalHurtPer = "FinalHurtPer"  # 最终伤害百分比
 AttrName_FuhaoHitRate = "FuhaoHitRate"  # 富豪一击概率
 AttrName_FinalHurt = "FinalHurt"  # 最终固定伤害增加
@@ -4763,6 +4767,7 @@
     ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear],
     AttrName_DamagePVPReduce:[[TYPE_Calc_DamagePVPReduce], False, TYPE_Linear],
     AttrName_DamagePVP:[[TYPE_Calc_DamagePVP], False, TYPE_Linear],
+    AttrName_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear],
     AttrName_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],
     AttrName_FuhaoHitRate:[[TYPE_Calc_FuhaoHitRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_FinalHurt:[[TYPE_Calc_FinalHurt], False, TYPE_Linear],
@@ -4796,6 +4801,7 @@
     ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear], # 暴击概率抗性
     ShareDefine.Def_Effect_LuckyHitReduce:[[TYPE_Calc_LuckyHitReduce], False, TYPE_Linear],# 会心一击伤害固定减伤
     ShareDefine.Def_Effect_DamagePVE:[[TYPE_Calc_DamagePVE], False, TYPE_Linear],  # PVE固定伤害
+    ShareDefine.Def_Effect_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear],   # Boss最终伤害万分率
     ShareDefine.Def_Effect_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],   # 最终伤害万分率
     ShareDefine.Def_Effect_FinalHurtReducePer:[[TYPE_Calc_FinalHurtReducePer], False, TYPE_Linear],   # 最终伤害减少万分
     ShareDefine.Def_Effect_YinjiTime:[[TYPE_Calc_YinjiTime], False, TYPE_Linear],   # 每X秒自动消失一个印记
@@ -5039,7 +5045,8 @@
 Def_CalcAttrFunc_TitleStar, # 称号星级 59
 Def_CalcAttrFunc_FamilyZhenfa, # 仙盟阵法 60
 Def_CalcAttrFunc_GatherTheSoul, # 聚魂新 61
-) = range(62)
+Def_CalcAttrFunc_GubaoResonance, # 古宝共鸣 62
+) = range(63)
 
 # 技能功能点列表  - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
 CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
@@ -5055,7 +5062,7 @@
                             ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
                             ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
                             ShareDefine.Def_MFPType_Enchant:[Def_CalcAttrFunc_Enchant],
-                            ShareDefine.Def_MFPType_Gubao:[Def_CalcAttrFunc_Gubao],
+                            ShareDefine.Def_MFPType_Gubao:[Def_CalcAttrFunc_Gubao, Def_CalcAttrFunc_GubaoResonance],
                             ShareDefine.Def_MFPType_Shentong:[Def_CalcAttrFunc_Shentong],
                             ShareDefine.Def_MFPType_LingQi:[Def_CalcAttrFunc_LingQi, Def_CalcAttrFunc_LingQiAttr, Def_CalcAttrFunc_LingQiJingLianAttr, Def_CalcAttrFunc_GuardTarin, 
                                                             Def_CalcAttrFunc_WingTarin, Def_CalcAttrFunc_PeerlessWeaponTrain, Def_CalcAttrFunc_PeerlessWeapon2Train],
@@ -5112,7 +5119,7 @@
                  Def_CalcAttrFunc_LoveRing:"情戒基础", Def_CalcAttrFunc_LoveRingCouple:"情戒仙侣", Def_CalcAttrFunc_Charm:"魅力", Def_CalcAttrFunc_LianTi:"炼体",
                  Def_CalcAttrFunc_Enchant:"附魔", Def_CalcAttrFunc_LingQiEnchant:"灵器附魔", Def_CalcAttrFunc_Gubao:"古宝", Def_CalcAttrFunc_Shentong:"神通",
                  Def_CalcAttrFunc_HorseStar:"坐骑星级", Def_CalcAttrFunc_PetStar:"宠物星级", Def_CalcAttrFunc_TitleStar:"称号星级", Def_CalcAttrFunc_FamilyZhenfa:"阵法",
-                 Def_CalcAttrFunc_GatherTheSoul:"聚魂新",
+                 Def_CalcAttrFunc_GatherTheSoul:"聚魂新", Def_CalcAttrFunc_GubaoResonance:"古宝共鸣",
                  }
 #-------------------------------------------------------------------------------
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 89efac0..6e7bbd6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -19058,6 +19058,58 @@
 
 
 #------------------------------------------------------
+# B2 15 古宝共鸣激活 #tagCMGubaoResonanceActivate
+
+class  tagCMGubaoResonanceActivate(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ResonanceID", c_ushort),    # 共鸣ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB2
+        self.SubCmd = 0x15
+        self.ResonanceID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGubaoResonanceActivate)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 15 古宝共鸣激活 //tagCMGubaoResonanceActivate:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ResonanceID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ResonanceID
+                                )
+        return DumpString
+
+
+m_NAtagCMGubaoResonanceActivate=tagCMGubaoResonanceActivate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoResonanceActivate.Cmd,m_NAtagCMGubaoResonanceActivate.SubCmd))] = m_NAtagCMGubaoResonanceActivate
+
+
+#------------------------------------------------------
 # B2 17 古宝升星 #tagCMGubaoStarUp
 
 class  tagCMGubaoStarUp(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index abdd8c8..e723e65 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -23190,6 +23190,114 @@
 
 
 #------------------------------------------------------
+# A3 CF 古宝共鸣信息 #tagMCGubaoResonanceInfo
+
+class  tagMCGubaoResonance(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ResonanceID", c_ushort),    # 共鸣ID
+                  ("ResonanceStar", c_ubyte),    # 已激活共鸣星级
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ResonanceID = 0
+        self.ResonanceStar = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCGubaoResonance)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 CF 古宝共鸣信息 //tagMCGubaoResonanceInfo:
+                                ResonanceID:%d,
+                                ResonanceStar:%d
+                                '''\
+                                %(
+                                self.ResonanceID,
+                                self.ResonanceStar
+                                )
+        return DumpString
+
+
+class  tagMCGubaoResonanceInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    ResonanceInfoList = list()    #(vector<tagMCGubaoResonance> ResonanceInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xCF
+        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):
+            temResonanceInfoList = tagMCGubaoResonance()
+            _pos = temResonanceInfoList.ReadData(_lpData, _pos)
+            self.ResonanceInfoList.append(temResonanceInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xCF
+        self.Count = 0
+        self.ResonanceInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ResonanceInfoList[i].GetLength()
+
+        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.WriteString(data, self.ResonanceInfoList[i].GetLength(), self.ResonanceInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ResonanceInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCGubaoResonanceInfo=tagMCGubaoResonanceInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoResonanceInfo.Head.Cmd,m_NAtagMCGubaoResonanceInfo.Head.SubCmd))] = m_NAtagMCGubaoResonanceInfo
+
+
+#------------------------------------------------------
 # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
 
 class  tagMCHistoryReChargeAwardRecord(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
index afa6fae..3af02e1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
@@ -35,6 +35,7 @@
         GameWorld.DebugAnswer(curPlayer, "重置古宝: Gubao 0")
         GameWorld.DebugAnswer(curPlayer, "设置古宝: Gubao 古宝ID 等级 星级")
         GameWorld.DebugAnswer(curPlayer, "设置效果: Gubao e 古宝ID 效果类型  进度值")
+        GameWorld.DebugAnswer(curPlayer, "设置共鸣: Gubao r 共鸣ID 共鸣星级")
         return
     
     gubaoIDList = []
@@ -59,8 +60,29 @@
                     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), 0)
                     
             PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, force=True)
+            
+            resonanceIDList = []
+            for index in range(ipyDataMgr.GetGubaoResonanceCount()):
+                ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
+                resonanceID = ipyData.GetResonanceID()
+                if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID):
+                    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoResonanceStar % resonanceID, 0)
+                    resonanceIDList.append(resonanceID)
+            PlayerGubao.Sync_GubaoResonanceInfo(curPlayer, resonanceIDList)
+            
             GameWorld.DebugAnswer(curPlayer, "重置古宝OK")
             
+    elif value1 == "r":
+        resonanceID = msgList[1] if len(msgList) > 1 else 0
+        resonanceStar = msgList[2] if len(msgList) > 2 else 0
+        if resonanceStar != 0:
+            ipyData = IpyGameDataPY.GetIpyGameData("GubaoResonanceAttr", resonanceID, resonanceStar)
+            if not ipyData:
+                GameWorld.DebugAnswer(curPlayer, "不存在该古宝共鸣!ID=%s,star=%s" % (resonanceID, resonanceStar))
+                return
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoResonanceStar % resonanceID, resonanceStar)
+        PlayerGubao.Sync_GubaoResonanceInfo(curPlayer, [resonanceID])
+        
     elif len(msgList) == 3:
         gubaoID, lv, star = msgList
         ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 76b90dd..7fb9e2f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -408,10 +408,24 @@
                         ("BYTE", "UnlockItemCnt", 0),
                         ),
 
+                "GubaoResonanceAttr":(
+                        ("WORD", "ResonanceID", 1),
+                        ("BYTE", "ResonanceStar", 1),
+                        ("list", "ResonanceAttrIDList", 0),
+                        ("list", "ResonanceAttrValueList", 0),
+                        ),
+
+                "GubaoResonance":(
+                        ("WORD", "ResonanceID", 1),
+                        ("list", "GubaoIDList", 0),
+                        ),
+
                 "GubaoStar":(
                         ("WORD", "GubaoID", 1),
                         ("BYTE", "GubaoStar", 1),
                         ("list", "StarUPNeedItemInfo", 0),
+                        ("list", "StarAttrIDList", 0),
+                        ("list", "StarAttrValueList", 0),
                         ("list", "StarEffIDList", 0),
                         ),
 
@@ -647,6 +661,7 @@
                         ("DWORD", "CftFamilyWarHPPer", 0),
                         ("DWORD", "CftFamilyWarAtkPer", 0),
                         ("DWORD", "CftFamilySitExpPer", 0),
+                        ("DWORD", "CftBossFinalHurtPer", 0),
                         ),
 
                 "NPCDropItem":(
@@ -2986,6 +3001,28 @@
     def GetUnlockItemID(self): return self.attrTuple[3] # 解锁所需物品ID DWORD
     def GetUnlockItemCnt(self): return self.attrTuple[4] # 解锁所需物品数量 BYTE
 
+# 古宝共鸣属性表
+class IPY_GubaoResonanceAttr():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetResonanceID(self): return self.attrTuple[0] # 共鸣ID WORD
+    def GetResonanceStar(self): return self.attrTuple[1] # 共鸣星级 BYTE
+    def GetResonanceAttrIDList(self): return self.attrTuple[2] # 共鸣总属性ID列表 list
+    def GetResonanceAttrValueList(self): return self.attrTuple[3] # 共鸣总属性值列表 list
+
+# 古宝共鸣组合表
+class IPY_GubaoResonance():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetResonanceID(self): return self.attrTuple[0] # 共鸣ID WORD
+    def GetGubaoIDList(self): return self.attrTuple[1] # 古宝ID列表 list
+
 # 古宝升星表
 class IPY_GubaoStar():
     
@@ -2996,7 +3033,9 @@
     def GetGubaoID(self): return self.attrTuple[0] # 古宝ID WORD
     def GetGubaoStar(self): return self.attrTuple[1] # 古宝星级 BYTE
     def GetStarUPNeedItemInfo(self): return self.attrTuple[2] # 升星所需物品 [[物品ID,个数], ...] list
-    def GetStarEffIDList(self): return self.attrTuple[3] # 星级特殊效果ID列表 list
+    def GetStarAttrIDList(self): return self.attrTuple[3] # 累计总属性ID列表 list
+    def GetStarAttrValueList(self): return self.attrTuple[4] # 累计总属性值列表 list
+    def GetStarEffIDList(self): return self.attrTuple[5] # 星级特殊效果ID列表 list
 
 # 古宝特殊效果表
 class IPY_GubaoEffAttr():
@@ -3310,7 +3349,8 @@
     def GetCftFamilyBossHurtPer(self): return self.attrTuple[30] # 仙盟BOSS伤害加成 DWORD
     def GetCftFamilyWarHPPer(self): return self.attrTuple[31] # 仙盟联赛生命加成 DWORD
     def GetCftFamilyWarAtkPer(self): return self.attrTuple[32] # 仙盟联赛攻击加成 DWORD
-    def GetCftFamilySitExpPer(self): return self.attrTuple[33] # 仙盟打坐经验加成 DWORD
+    def GetCftFamilySitExpPer(self): return self.attrTuple[33] # 仙盟打坐经验加成 DWORD
+    def GetCftBossFinalHurtPer(self): return self.attrTuple[34] # Boss最终伤害加成系数 DWORD
 
 # NPC掉落表
 class IPY_NPCDropItem():
@@ -6110,6 +6150,8 @@
         self.__LoadFileData("Horse", onlyCheck)
         self.__LoadFileData("HorseStarUp", onlyCheck)
         self.__LoadFileData("Gubao", onlyCheck)
+        self.__LoadFileData("GubaoResonanceAttr", onlyCheck)
+        self.__LoadFileData("GubaoResonance", onlyCheck)
         self.__LoadFileData("GubaoStar", onlyCheck)
         self.__LoadFileData("GubaoEffAttr", onlyCheck)
         self.__LoadFileData("GubaoLV", onlyCheck)
@@ -6785,6 +6827,20 @@
         self.CheckLoadData("Gubao")
         return self.ipyGubaoCache[index]
 
+    def GetGubaoResonanceAttrCount(self):
+        self.CheckLoadData("GubaoResonanceAttr")
+        return self.ipyGubaoResonanceAttrLen
+    def GetGubaoResonanceAttrByIndex(self, index):
+        self.CheckLoadData("GubaoResonanceAttr")
+        return self.ipyGubaoResonanceAttrCache[index]
+
+    def GetGubaoResonanceCount(self):
+        self.CheckLoadData("GubaoResonance")
+        return self.ipyGubaoResonanceLen
+    def GetGubaoResonanceByIndex(self, index):
+        self.CheckLoadData("GubaoResonance")
+        return self.ipyGubaoResonanceCache[index]
+
     def GetGubaoStarCount(self):
         self.CheckLoadData("GubaoStar")
         return self.ipyGubaoStarLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index f0e4fe7..677388c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3905,6 +3905,7 @@
         FaintDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintDefRate) * fpParam.GetCftFaintDefRate() # 击晕抵抗
         FinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurt) # 最终固定伤害增加
         FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
+        BossFinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_BossFinalHurtPer) * fpParam.GetCftBossFinalHurtPer() # Boss最终伤害万分率
         FinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtPer) * fpParam.GetCftFinalHurtPer() # 最终伤害万分率
         FinalHurtReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReducePer) * fpParam.GetCftFinalHurtReducePer() # 最终伤害减少万分率
         DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
@@ -6988,6 +6989,12 @@
     curPlayer.SetDict(ChConfig.Def_PlayerKey_BleedDamage, value)
     SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BleedDamage, value)
     
+## Boss最终伤害百分比
+def GetBossFinalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossFinalHurtPer)
+def SetBossFinalHurtPer(curPlayer, value):
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_BossFinalHurtPer, value)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, value)
+    
 ## 最终固定伤害增加
 def GetFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurt)
 def SetFinalHurt(curPlayer, value):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index c9e5643..69a3e64 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -70,6 +70,7 @@
     Sync_GubaoInfo(curPlayer)
     Sync_GubaoItemEffInfo(curPlayer)
     Sync_GubaoPieceInfo(curPlayer)
+    Sync_GubaoResonanceInfo(curPlayer)
     return
 
 def AddGubaoPiece(curPlayer, gubaoID, addCount, useItemID):
@@ -109,6 +110,49 @@
     GameWorld.DebugLog("转化古宝功能所需物品: needItemList=%s,realNeedItemList=%s,needPieceInfo=%s" 
                        % (needItemList, realNeedItemList, needPieceInfo), curPlayer.GetPlayerID())
     return needPieceInfo, realNeedItemList
+
+#// B2 15 古宝共鸣激活 #tagCMGubaoResonanceActivate
+#
+#struct    tagCMGubaoResonanceActivate
+#{
+#    tagHead         Head;
+#    WORD        ResonanceID;    
+#};
+def OnGubaoResonanceActivate(index, curPackData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    playerID = curPlayer.GetPlayerID()
+    resonanceID = curPackData.ResonanceID
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("GubaoResonance", resonanceID)
+    if not ipyData:
+        return
+    gubaoIDList = ipyData.GetGubaoIDList()
+    attrIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("GubaoResonanceAttr", {"ResonanceID":resonanceID}, True)
+    if not attrIpyDataList:
+        return
+    nextStar = resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
+    
+    for attrIpyData in attrIpyDataList:
+        star = attrIpyData.GetResonanceStar()
+        if star > nextStar:
+            nextStar = star
+            break
+        
+    if nextStar <= resonanceStar:
+        GameWorld.DebugLog("古宝共鸣没有下一星级了! resonanceID=%s,resonanceStar=%s" % (resonanceID, resonanceStar), playerID)
+        return
+    
+    for gubaoID in gubaoIDList:
+        _, star = GetGubaoLVInfo(curPlayer, gubaoID)
+        if star < nextStar:
+            GameWorld.DebugLog("古宝未达到共鸣星级,无法激活共鸣! gubaoID=%s,star=%s < %s" % (gubaoID, star, nextStar), playerID)
+            return
+        
+    GameWorld.DebugLog("古宝共鸣星级激活! resonanceID=%s,nextStar=%s" % (resonanceID, nextStar), playerID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoResonanceStar % resonanceID, nextStar)
+    RefreshGubaoAttr(curPlayer)
+    Sync_GubaoResonanceInfo(curPlayer, [resonanceID])
+    return
 
 #// B2 16 古宝激活 #tagCMGubaoActivate
 #
@@ -295,6 +339,7 @@
 def CalcGubaoAttr(curPlayer):
     
     allAttrList = [{} for _ in range(4)]
+    allAttrListResonance = [{} for _ in range(4)]
     
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetGubaoCount()):
@@ -316,6 +361,12 @@
                 
         starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
         if starIpyData:
+            starAttrIDList = starIpyData.GetStarAttrIDList()
+            starAttrValueList = starIpyData.GetStarAttrValueList()
+            for i, attrID in enumerate(starAttrIDList):
+                attrValue = starAttrValueList[i]
+                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
+                
             starEffIDList = starIpyData.GetStarEffIDList()
             effAttrInfo = {}
             #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
@@ -325,9 +376,27 @@
             for attrID, attrValue in effAttrInfo.items():
                 PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
                 
+    # 共鸣
+    for index in range(ipyDataMgr.GetGubaoResonanceCount()):
+        ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
+        resonanceID = ipyData.GetResonanceID()
+        resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
+        if not resonanceStar:
+            continue
+        resonanceAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoResonanceAttr", resonanceID, resonanceStar)
+        if not resonanceAttrIpyData:
+            continue
+        resonanceAttrIDList = resonanceAttrIpyData.GetResonanceAttrIDList()
+        resonanceAttrValueList = resonanceAttrIpyData.GetResonanceAttrValueList()
+        for i, attrID in enumerate(resonanceAttrIDList):
+            attrValue = resonanceAttrValueList[i]
+            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListResonance)
+            
     # 保存计算值
     GameWorld.DebugLog("古宝属性: %s" % allAttrList)
+    #GameWorld.DebugLog("古宝共鸣属性: %s" % allAttrListResonance)
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GubaoResonance, allAttrListResonance)
     return
 
 def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
@@ -796,6 +865,36 @@
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
+def Sync_GubaoResonanceInfo(curPlayer, resonanceIDList=None):
+    if resonanceIDList == None:
+        syncIDList = []
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in range(ipyDataMgr.GetGubaoResonanceCount()):
+            ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
+            syncIDList.append(ipyData.GetResonanceID())
+    else:
+        syncIDList = resonanceIDList
+        
+    resonanceInfoList = []
+    for resonanceID in syncIDList:
+        resonanceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoResonanceStar % resonanceID)
+        if not resonanceStar and resonanceIDList == None:
+            # 没有指定时只同步激活的
+            continue
+        resonanceInfo = ChPyNetSendPack.tagMCGubaoResonance()
+        resonanceInfo.ResonanceID = resonanceID
+        resonanceInfo.ResonanceStar = resonanceStar
+        resonanceInfoList.append(resonanceInfo)
+        
+    if not resonanceInfoList:
+        return
+    
+    clientPack = ChPyNetSendPack.tagMCGubaoResonanceInfo()
+    clientPack.ResonanceInfoList = resonanceInfoList
+    clientPack.Count = len(clientPack.ResonanceInfoList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+
 def Sync_GubaoItemEffInfo(curPlayer, gubaoID=0, effType=0, force=False):
     syncIDList = []
     if not gubaoID:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 5bd3312..985d761 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -713,6 +713,8 @@
 Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
 Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
 
+Def_Effect_BossFinalHurtPer = 166   # Boss最终伤害万分率
+
 Def_Effect_ComboDefRate = 210 # 抗连击概率
 Def_Effect_AtkBackRate = 211 # 反击概率
 Def_Effect_AtkBackDefRate = 212 # 抗反击概率
@@ -1123,7 +1125,8 @@
 CDBPlayerRefresh_Lingyu, # 灵玉 261
 CDBPlayerRefresh_BossTrial, # 凭证积分 262
 CDBPlayerRefresh_GatherSoul, # 聚魂精华 263
-) = range(146, 264)
+CDBPlayerRefresh_BossFinalHurtPer,  # Boss最终输出伤害百分比 264
+) = range(146, 265)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index 4545fe2..dbea4b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -215,6 +215,7 @@
    [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0],          # 弱化灵兽
    [lambda curObj:GameObj.GetSuperHitHurtPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, 1, 0],          # 强化暴伤
    [lambda curObj:GameObj.GetSuperHitHurtDefPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, 1, 0],          # 弱化暴伤
+   [lambda curObj:PlayerControl.GetBossFinalHurtPer(curObj), lambda curObj, value:PlayerControl.SetBossFinalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, 1, 0],        # Boss最终伤害百分比
 ]
 
 ## 通过索引获得属性值

--
Gitblit v1.8.0