From d833cc75e3925841d2c947f2c64944963192faf0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 22 一月 2019 15:26:49 +0800
Subject: [PATCH] 5931 【后端】【1.5.100】诛仙装备开发

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                     |   38 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py               |  318 +++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                      |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py     |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                             |   16 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py         |   18 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                   |   94 +++++++++
 PySysDB/PySysDBPY.h                                                                                    |   30 +++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                          |   38 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py            |   14 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                        |   16 +
 13 files changed, 584 insertions(+), 13 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 58e8825..832ed26 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -459,6 +459,12 @@
 	DWORD		CftSpeedPer;	//移动速度百分比系数
 	DWORD		CftAtkPer;	//攻击百分比系数
 	DWORD		CftMaxHPPer;	//生命百分比系数
+	DWORD		CftJobAHurtAddPer;	//对目标战士伤害加成
+	DWORD		CftJobBHurtAddPer;	//对目标法师伤害加成
+	DWORD		CftJobCHurtAddPer;	//对目标弓箭伤害加成
+	DWORD		CftJobAAtkReducePer;	//战士攻击伤害减免
+	DWORD		CftJobBAtkReducePer;	//法师攻击伤害减免
+	DWORD		CftJobCAtkReducePer;	//弓箭攻击伤害减免
 };
 
 //NPC掉落表
@@ -623,6 +629,20 @@
 	DWORD		SkillAtkRateReduceC;	// 技能减伤百分比系数
 	DWORD		HitC;	// 命中系数
 	DWORD		MissC;	// 闪避系数
+	DWORD		SkillAddPer1C;	// 技能伤害增强1系数
+	DWORD		SkillAddPer2C;	// 技能伤害增强2系数
+	DWORD		SkillAddPer3C;	// 技能伤害增强3系数
+	DWORD		SkillAddPer4C;	// 技能伤害增强4系数
+	DWORD		SkillAddPer5C;	// 技能伤害增强5系数
+	DWORD		SkillAddPer6C;	// 技能伤害增强6系数
+	DWORD		SkillAddPer7C;	// 技能伤害增强7系数
+	DWORD		SkillReducePer1C;	// 受到技能伤害减少1系数
+	DWORD		SkillReducePer2C;	// 受到技能伤害减少2系数
+	DWORD		SkillReducePer3C;	// 受到技能伤害减少3系数
+	DWORD		SkillReducePer4C;	// 受到技能伤害减少4系数
+	DWORD		SkillReducePer5C;	// 受到技能伤害减少5系数
+	DWORD		SkillReducePer6C;	// 受到技能伤害减少6系数
+	DWORD		SkillReducePer7C;	// 受到技能伤害减少7系数
 };
 
 //成就表
@@ -1581,6 +1601,16 @@
 	list		Reward;	//奖励物品
 };
 
+//诛仙装备套装属性表
+
+struct tagZhuXianSuitAttr
+{
+	BYTE		_SuitType;	//套装类型
+	BYTE		_SuitLV;	//套装等级
+	list		SuitAttrIDList;		//属性ID列表
+	list		SuitAttrValueList;	//属性值列表
+};
+
 //诛仙BOSS表
 
 struct tagZhuXianBoss
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index ab6f754..1edec26 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -478,6 +478,36 @@
 
 Def_Effect_NPCHurtAddPer = 89 # 对怪物伤害加成
 
+Def_Effect_JobAHurtAddPer = 90 # 对目标战士伤害加成
+Def_Effect_JobBHurtAddPer = 91 # 对目标法师伤害加成
+Def_Effect_JobCHurtAddPer = 92 # 对目标弓箭伤害加成
+Def_Effect_JobAAtkReducePer = 93 # 战士攻击伤害减免
+Def_Effect_JobBAtkReducePer = 94 # 法师攻击伤害减免
+Def_Effect_JobCAtkReducePer = 95 # 弓箭攻击伤害减免
+
+Def_Effect_ZXCloakAttrPer = 96 # 诛仙披风属性加成百分比
+Def_Effect_ZXMaskAttrPer = 97 # 诛仙面具属性加成百分比
+Def_Effect_ZXGloveAttrPer = 98 # 诛仙手套属性加成百分比
+Def_Effect_ZXRuyiAttrPer = 99 # 诛仙如意属性加成百分比
+Def_Effect_ZXPendantAttrPer = 100 # 诛仙吊坠属性加成百分比
+Def_Effect_ZXRingAttrPer = 101 # 诛仙戒指属性加成百分比
+
+Def_Effect_SkillAddPer1 = 102 # 技能伤害增强1
+Def_Effect_SkillAddPer2 = 103 # 技能伤害增强2
+Def_Effect_SkillAddPer3 = 104 # 技能伤害增强3
+Def_Effect_SkillAddPer4 = 105 # 技能伤害增强4
+Def_Effect_SkillAddPer5 = 106 # 技能伤害增强5
+Def_Effect_SkillAddPer6 = 107 # 技能伤害增强6
+Def_Effect_SkillAddPer7 = 108 # 技能伤害增强7
+
+Def_Effect_SkillReducePer1 = 109 # 受到技能伤害减少1
+Def_Effect_SkillReducePer2 = 110 # 受到技能伤害减少2
+Def_Effect_SkillReducePer3 = 111 # 受到技能伤害减少3
+Def_Effect_SkillReducePer4 = 112 # 受到技能伤害减少4
+Def_Effect_SkillReducePer5 = 113 # 受到技能伤害减少5
+Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
+Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
+
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
 #增加%d魔法伤害值,其中a值为伤害值
@@ -1349,7 +1379,7 @@
 )=range(5)
 
 # 战斗力模块类型
-Def_MFPType_Max = 28
+Def_MFPType_Max = 29
 ModuleFightPowerTypeList = (
 Def_MFPType_Role, # 角色 0
 Def_MFPType_Equip, # 装备(基本装备位) 1
@@ -1376,6 +1406,7 @@
 Def_MFPType_GatherSoul, # 聚魂 22
 Def_MFPType_MagicWeapon4, # 王者法宝 23
 Def_MFPType_Coat, # 时装 24
+Def_MFPType_ZhuXian, # 诛仙 25
 Def_MFPType_Other, # 其他
 
 #以下暂时没用到,改时再处理
@@ -1765,6 +1796,11 @@
     zxetWeapon4,    # 诛仙剑4 132
 ) = range(121, 121 + 12)
 
+# 共享通用装备位,可装备同一类型装备
+ShareEquipPlace = [
+                   [zxetGlove, zxetGlove2],
+                   [zxetRing, zxetRing2],
+                   ]
 
 # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
 EnterFBAskResult = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 14ea09a..885c20d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1344,6 +1344,22 @@
 PacketSubCMD_5=0xC4
 PacketCallFunc_5=OnDogzEquipPlus
 
+;诛仙装备
+[EquipZhuXian]
+ScriptName = Item\EquipZhuXian.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 2
+
+PacketCMD_1=0xA3
+PacketSubCMD_1=0x30
+PacketCallFunc_1=OnEquipZhuXianItem
+
+PacketCMD_2=0xA3
+PacketSubCMD_2=0x31
+PacketCallFunc_2=OnUnEquipZhuXianItem
+
 ;个推
 [PlayerGeTui]
 ScriptName = Player\PlayerGeTui.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 cef9985..b2df452 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
@@ -1582,7 +1582,7 @@
             # 理论伤害一致, 多加点预算伤害避免计算误差
             #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
             #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
-            hurtValue = atkObj.GetMaxAtk()*atkSkillPer*20   # 加入被动计算不准确改成估算
+            hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40   # 加入被动计算不准确改成估算
             
         clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
         if clientValue <= hurtValue:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index e3c76c7..0f289db 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4205,6 +4205,12 @@
     AttrName_SuperHit:[[TYPE_Calc_SuperHit], False, TYPE_Linear],
     AttrName_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobCHurtAddPer:[[TYPE_Calc_JobCHurtAddPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobAAtkReducePer:[[TYPE_Calc_JobAAtkReducePer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobBAtkReducePer:[[TYPE_Calc_JobBAtkReducePer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_JobCAtkReducePer:[[TYPE_Calc_JobCAtkReducePer], False, TYPE_Linear],
     AttrName_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
     AttrName_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
     AttrName_JobCHurtAddPer:[[TYPE_Calc_JobCHurtAddPer], False, TYPE_Linear],
@@ -4386,7 +4392,9 @@
 Def_CalcAttrFunc_GatherSoul, # 聚魂39
 Def_CalcAttrFunc_MagicWeapon4, # 王者法宝40
 Def_CalcAttrFunc_Coat, # 时装41
-) = range(42)
+Def_CalcAttrFunc_ZXEquip, # 诛仙装备42
+Def_CalcAttrFunc_ZXEquipSuit, # 诛仙装备套装43
+) = range(44)
 
 
 # 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
@@ -4428,8 +4436,9 @@
                             ShareDefine.Def_MFPType_MagicWeaponSoul:[Def_CalcAttrFunc_MagicWeaponSoul],
                             ShareDefine.Def_MFPType_GatherSoul:[Def_CalcAttrFunc_GatherSoul],
                             ShareDefine.Def_MFPType_Coat:[Def_CalcAttrFunc_Coat],
-                            # 神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
+                            # 诛仙装备战力、神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
                             ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquipPlus],
+                            ShareDefine.Def_MFPType_ZhuXian:[Def_CalcAttrFunc_ZXEquipSuit],
                             ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
                             }
 
@@ -5068,7 +5077,8 @@
 Def_SkillFuncType_SkillRoll,  #10为翻滚    服务端未用到
 Def_SkillFuncType_RealmSuppress,  #11为境界压制 目前是NPC在用
 Def_SkillFuncType_Dogz,     #12 神兽技能
-) = range(13)
+Def_SkillFuncType_ZhuXian,     #13 诛仙技能
+) = range(14)
 
 # 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
 Def_SkillAttack_NPCIsBoss = [ Def_NPCType_Ogre_Normal     ,  #平凡小怪 0    # c++ 定义为普通NPC视野刷新
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
index 7e7c431..6a4209a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
@@ -54,6 +54,7 @@
                    ShareDefine.Def_MFPType_MagicWeaponSoul:"法宝之魂",
                    ShareDefine.Def_MFPType_Dogz:"神兽",
                    ShareDefine.Def_MFPType_Coat:"时装",
+                   ShareDefine.Def_MFPType_ZhuXian:"诛仙",
                    ShareDefine.Def_MFPType_Other:"其他",
                    }
     
@@ -97,6 +98,8 @@
                      ChConfig.Def_CalcAttrFunc_MagicWeaponSoul:"法宝之魂",
                      ChConfig.Def_CalcAttrFunc_Dogz:"神兽",
                      ChConfig.Def_CalcAttrFunc_Coat:"时装",
+                     ChConfig.Def_CalcAttrFunc_ZXEquip:"诛仙装备",
+                     ChConfig.Def_CalcAttrFunc_ZXEquipSuit:"诛仙装备套装",
                      }
     
     GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index a7f3b91..c646e09 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -386,6 +386,12 @@
                         ("DWORD", "CftSpeedPer", 0),
                         ("DWORD", "CftAtkPer", 0),
                         ("DWORD", "CftMaxHPPer", 0),
+                        ("DWORD", "CftJobAHurtAddPer", 0),
+                        ("DWORD", "CftJobBHurtAddPer", 0),
+                        ("DWORD", "CftJobCHurtAddPer", 0),
+                        ("DWORD", "CftJobAAtkReducePer", 0),
+                        ("DWORD", "CftJobBAtkReducePer", 0),
+                        ("DWORD", "CftJobCAtkReducePer", 0),
                         ),
 
                 "NPCDropItem":(
@@ -526,6 +532,20 @@
                         ("DWORD", "SkillAtkRateReduceC", 0),
                         ("DWORD", "HitC", 0),
                         ("DWORD", "MissC", 0),
+                        ("DWORD", "SkillAddPer1C", 0),
+                        ("DWORD", "SkillAddPer2C", 0),
+                        ("DWORD", "SkillAddPer3C", 0),
+                        ("DWORD", "SkillAddPer4C", 0),
+                        ("DWORD", "SkillAddPer5C", 0),
+                        ("DWORD", "SkillAddPer6C", 0),
+                        ("DWORD", "SkillAddPer7C", 0),
+                        ("DWORD", "SkillReducePer1C", 0),
+                        ("DWORD", "SkillReducePer2C", 0),
+                        ("DWORD", "SkillReducePer3C", 0),
+                        ("DWORD", "SkillReducePer4C", 0),
+                        ("DWORD", "SkillReducePer5C", 0),
+                        ("DWORD", "SkillReducePer6C", 0),
+                        ("DWORD", "SkillReducePer7C", 0),
                         ),
 
                 "Success":(
@@ -1240,6 +1260,13 @@
                         ("DWORD", "TotalTimes", 0),
                         ("WORD", "SingleTimes", 0),
                         ("list", "Reward", 0),
+                        ),
+
+                "ZhuXianSuitAttr":(
+                        ("BYTE", "SuitType", 1),
+                        ("BYTE", "SuitLV", 1),
+                        ("list", "SuitAttrIDList", 0),
+                        ("list", "SuitAttrValueList", 0),
                         ),
 
                 "ZhuXianBoss":(
@@ -1977,7 +2004,13 @@
         self.CftLuckyHit = 0
         self.CftSpeedPer = 0
         self.CftAtkPer = 0
-        self.CftMaxHPPer = 0
+        self.CftMaxHPPer = 0
+        self.CftJobAHurtAddPer = 0
+        self.CftJobBHurtAddPer = 0
+        self.CftJobCHurtAddPer = 0
+        self.CftJobAAtkReducePer = 0
+        self.CftJobBAtkReducePer = 0
+        self.CftJobCAtkReducePer = 0
         return
         
     def GetLV(self): return self.LV # 等级
@@ -2002,7 +2035,13 @@
     def GetCftLuckyHit(self): return self.CftLuckyHit # 会心一击系数
     def GetCftSpeedPer(self): return self.CftSpeedPer # 移动速度百分比系数
     def GetCftAtkPer(self): return self.CftAtkPer # 攻击百分比系数
-    def GetCftMaxHPPer(self): return self.CftMaxHPPer # 生命百分比系数
+    def GetCftMaxHPPer(self): return self.CftMaxHPPer # 生命百分比系数
+    def GetCftJobAHurtAddPer(self): return self.CftJobAHurtAddPer # 对目标战士伤害加成
+    def GetCftJobBHurtAddPer(self): return self.CftJobBHurtAddPer # 对目标法师伤害加成
+    def GetCftJobCHurtAddPer(self): return self.CftJobCHurtAddPer # 对目标弓箭伤害加成
+    def GetCftJobAAtkReducePer(self): return self.CftJobAAtkReducePer # 战士攻击伤害减免
+    def GetCftJobBAtkReducePer(self): return self.CftJobBAtkReducePer # 法师攻击伤害减免
+    def GetCftJobCAtkReducePer(self): return self.CftJobCAtkReducePer # 弓箭攻击伤害减免
 
 # NPC掉落表
 class IPY_NPCDropItem():
@@ -2260,7 +2299,21 @@
         self.AtkSpeedC = 0
         self.SkillAtkRateReduceC = 0
         self.HitC = 0
-        self.MissC = 0
+        self.MissC = 0
+        self.SkillAddPer1C = 0
+        self.SkillAddPer2C = 0
+        self.SkillAddPer3C = 0
+        self.SkillAddPer4C = 0
+        self.SkillAddPer5C = 0
+        self.SkillAddPer6C = 0
+        self.SkillAddPer7C = 0
+        self.SkillReducePer1C = 0
+        self.SkillReducePer2C = 0
+        self.SkillReducePer3C = 0
+        self.SkillReducePer4C = 0
+        self.SkillReducePer5C = 0
+        self.SkillReducePer6C = 0
+        self.SkillReducePer7C = 0
         return
         
     def GetClassLV(self): return self.ClassLV #  装备阶级
@@ -2290,7 +2343,21 @@
     def GetAtkSpeedC(self): return self.AtkSpeedC #  攻击速度系数
     def GetSkillAtkRateReduceC(self): return self.SkillAtkRateReduceC #  技能减伤百分比系数
     def GetHitC(self): return self.HitC #  命中系数
-    def GetMissC(self): return self.MissC #  闪避系数
+    def GetMissC(self): return self.MissC #  闪避系数
+    def GetSkillAddPer1C(self): return self.SkillAddPer1C #  技能伤害增强1系数
+    def GetSkillAddPer2C(self): return self.SkillAddPer2C #  技能伤害增强2系数
+    def GetSkillAddPer3C(self): return self.SkillAddPer3C #  技能伤害增强3系数
+    def GetSkillAddPer4C(self): return self.SkillAddPer4C #  技能伤害增强4系数
+    def GetSkillAddPer5C(self): return self.SkillAddPer5C #  技能伤害增强5系数
+    def GetSkillAddPer6C(self): return self.SkillAddPer6C #  技能伤害增强6系数
+    def GetSkillAddPer7C(self): return self.SkillAddPer7C #  技能伤害增强7系数
+    def GetSkillReducePer1C(self): return self.SkillReducePer1C #  受到技能伤害减少1系数
+    def GetSkillReducePer2C(self): return self.SkillReducePer2C #  受到技能伤害减少2系数
+    def GetSkillReducePer3C(self): return self.SkillReducePer3C #  受到技能伤害减少3系数
+    def GetSkillReducePer4C(self): return self.SkillReducePer4C #  受到技能伤害减少4系数
+    def GetSkillReducePer5C(self): return self.SkillReducePer5C #  受到技能伤害减少5系数
+    def GetSkillReducePer6C(self): return self.SkillReducePer6C #  受到技能伤害减少6系数
+    def GetSkillReducePer7C(self): return self.SkillReducePer7C #  受到技能伤害减少7系数
 
 # 成就表
 class IPY_Success():
@@ -3799,6 +3866,21 @@
     def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
     def GetReward(self): return self.Reward # 奖励物品
 
+# 诛仙装备套装属性表
+class IPY_ZhuXianSuitAttr():
+    
+    def __init__(self):
+        self.SuitType = 0
+        self.SuitLV = 0
+        self.SuitAttrIDList = []
+        self.SuitAttrValueList = []
+        return
+        
+    def GetSuitType(self): return self.SuitType # 套装类型
+    def GetSuitLV(self): return self.SuitLV # 套装等级
+    def GetSuitAttrIDList(self): return self.SuitAttrIDList # 属性ID列表
+    def GetSuitAttrValueList(self): return self.SuitAttrValueList # 属性值列表
+
 # 诛仙BOSS表
 class IPY_ZhuXianBoss():
     
@@ -4095,6 +4177,8 @@
         self.ipyActLoginAwardLen = len(self.ipyActLoginAwardCache)
         self.ipyLoginAwardCache = self.__LoadFileData("LoginAward", IPY_LoginAward)
         self.ipyLoginAwardLen = len(self.ipyLoginAwardCache)
+        self.ipyZhuXianSuitAttrCache = self.__LoadFileData("ZhuXianSuitAttr", IPY_ZhuXianSuitAttr)
+        self.ipyZhuXianSuitAttrLen = len(self.ipyZhuXianSuitAttrCache)
         self.ipyZhuXianBossCache = self.__LoadFileData("ZhuXianBoss", IPY_ZhuXianBoss)
         self.ipyZhuXianBossLen = len(self.ipyZhuXianBossCache)
         self.ipyZhuXianTowerCache = self.__LoadFileData("ZhuXianTower", IPY_ZhuXianTower)
@@ -4501,6 +4585,8 @@
     def GetActLoginAwardByIndex(self, index): return self.ipyActLoginAwardCache[index]
     def GetLoginAwardCount(self): return self.ipyLoginAwardLen
     def GetLoginAwardByIndex(self, index): return self.ipyLoginAwardCache[index]
+    def GetZhuXianSuitAttrCount(self): return self.ipyZhuXianSuitAttrLen
+    def GetZhuXianSuitAttrByIndex(self, index): return self.ipyZhuXianSuitAttrCache[index]
     def GetZhuXianBossCount(self): return self.ipyZhuXianBossLen
     def GetZhuXianBossByIndex(self, index): return self.ipyZhuXianBossCache[index]
     def GetZhuXianTowerCount(self): return self.ipyZhuXianTowerLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
new file mode 100644
index 0000000..8f79049
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -0,0 +1,318 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package EquipZhuXian
+#
+# @todo:诛仙装备
+# @author hxp
+# @date 2019-01-22
+# @version 1.0
+#
+# 详细描述: 诛仙装备
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2019-01-22 15:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ItemCommon
+import ShareDefine
+import PlayerControl
+import DataRecordPack
+import IpyGameDataPY
+import SkillCommon
+import PyGameData
+import ChConfig
+
+def GetZhuXianEquipIndexByPlace(equipPlace):
+    ## 获取诛仙装备位对应的索引
+    return equipPlace - 1 - 120
+
+def GetZhuXianEquipPlaceByIndex(equipIndex):
+    ## 获取诛仙装备索引对应装备位
+    return equipIndex + 1 + 120
+
+def GetZhuXianEquipPlaceIndexIsUnlock(curPlayer, equipPlaceIndex):
+    ## 获取诛仙装备位是否解锁
+    # @param equipPlaceIndex: 注意传入的参数是装备位索引
+    equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex)
+    placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
+    if str(equipPlace) not in placeUnlockDict:
+        return True
+    needTowerLV = placeUnlockDict[str(equipPlace)]
+    curTowerLV = 20 # 已过关的诛仙塔层数
+    return curTowerLV >= needTowerLV
+
+def CheckLearnZhuXianSkill(curPlayer, skillID):
+    ## 检查诛仙装备位装备阶数
+    
+    zhuxianSkillCondition = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 3, {})
+    if str(skillID) not in zhuxianSkillCondition:
+        return True
+    classLVPlaceListDict = zhuxianSkillCondition[str(skillID)]
+    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
+    for classLV, placeList in classLVPlaceListDict.items():
+        needClassLV = int(classLV)
+        for equipPlace in placeList:
+            placeIndex = GetZhuXianEquipIndexByPlace(equipPlace)
+            if placeIndex < 0 or placeIndex >= zhuXianEquipPack.GetCount():
+                return
+            curEquip = zhuXianEquipPack.GetAt(placeIndex)
+            if curEquip.IsEmpty():
+                GameWorld.DebugLog("诛仙装备位无装备,无法激活神技! equipPlace=%s" % equipPlace)
+                return
+            curClassLV = ItemCommon.GetItemClassLV(curEquip)
+            if curClassLV < needClassLV:
+                GameWorld.DebugLog("诛仙装备位装备阶级不足,无法激活神技! equipPlace=%s,curClassLV=%s < needClassLV=%s" % (equipPlace, curClassLV, needClassLV))
+                return
+            
+    return True
+
+#// A3 30 装备诛仙装备 #tagCMEquipZhuXianItem
+#
+#struct    tagCMEquipZhuXianItem
+#{
+#    tagHead        Head;
+#    BYTE        EquipIndex;    //装备在诛仙装备背包中的索引
+#    BYTE        ItemIndex;    //装备在诛仙物品背包中的索引
+#};
+def OnEquipZhuXianItem(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    playerID = curPlayer.GetPlayerID()
+    reqEquipPlaceIndex = clientData.EquipIndex
+    itemIndex = clientData.ItemIndex
+    
+    GameWorld.DebugLog("诛仙穿戴装备: EquipIndex=%s,ItemIndex=%s" % (reqEquipPlaceIndex, itemIndex), playerID)
+    
+    zhuXianItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
+    curEquip = zhuXianItemPack.GetAt(itemIndex)
+    if not ItemCommon.CheckItemCanUse(curEquip):
+        GameWorld.DebugLog("物品为空或不可用: itemIndex=%s" % itemIndex, playerID)
+        return
+    if not ItemCommon.GetIsZhuXianEquip(curEquip):
+        GameWorld.DebugLog("非诛仙装备: itemIndex=%s" % itemIndex, playerID)
+        return
+    
+    equipPlace = curEquip.GetEquipPlace()
+    equipPlaceIndex = GetZhuXianEquipIndexByPlace(equipPlace)
+    if reqEquipPlaceIndex != equipPlaceIndex:
+        canPlace = False
+        for sharePlaceList in ShareDefine.ShareEquipPlace:
+            if reqEquipPlaceIndex in sharePlaceList and equipPlaceIndex in sharePlaceList:
+                canPlace = True
+                break
+        if not canPlace:
+            GameWorld.DebugLog("该装备位不可装备该物品!equipPlace=%s,equipPlaceIndex=%s != reqEquipPlaceIndex=%s" % (equipPlace, equipPlaceIndex, reqEquipPlaceIndex), playerID)
+            return
+    
+    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
+    if reqEquipPlaceIndex < 0 or reqEquipPlaceIndex >= zhuXianEquipPack.GetCount():
+        GameWorld.ErrLog("诛仙装备背包索引异常: EquipIndex=%s" % (reqEquipPlaceIndex), playerID)
+        return
+    
+    if not GetZhuXianEquipPlaceIndexIsUnlock(curPlayer, reqEquipPlaceIndex):
+        GameWorld.DebugLog("诛仙装备位未解锁: equipPlace=%s,EquipIndex=%s" % (equipPlace, reqEquipPlaceIndex))
+        return
+    
+    destEquip = zhuXianEquipPack.GetAt(reqEquipPlaceIndex)
+    desItemID, desUserData = [0, ''] if destEquip.IsEmpty() else [destEquip.GetItemTypeID(), destEquip.GetUserData()]
+    srcItemID, srcUserData = curEquip.GetItemTypeID(), curEquip.GetUserData()
+    if not ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptZhuXianEquip):
+        return
+    dataDict = {'dotype':'EquipZhuXianItem', 'desItemID':desItemID, 'desUserData':desUserData, 'srcItemID':srcItemID, 'srcUserData':srcUserData}
+    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
+    
+    RefreshZhuXianAttr(curPlayer)   
+    return
+
+#// A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem
+#
+#struct    tagCMUnEquipZhuXianItem
+#{
+#    tagHead        Head;
+#    BYTE        EquipIndex;    //装备在诛仙装备背包中的索引
+#};
+def OnUnEquipZhuXianItem(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    playerID = curPlayer.GetPlayerID()
+    EquipIndex = clientData.EquipIndex
+    
+    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
+    if EquipIndex < 0 or EquipIndex >= zhuXianEquipPack.GetCount():
+        GameWorld.ErrLog("诛仙装备背包索引异常: EquipIndex=%s" % (EquipIndex), playerID)
+        return
+    curEquip = zhuXianEquipPack.GetAt(EquipIndex)
+    if not ItemCommon.CheckItemCanUse(curEquip):
+        GameWorld.DebugLog("诛仙装备为空或不可用: EquipIndex=%s" % EquipIndex, playerID)
+        return
+    
+    emptyIndex = ItemCommon.GetEmptyIndexInPack(curPlayer, ShareDefine.rptZhuXianItem)
+    if not ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptZhuXianEquip, ShareDefine.rptZhuXianItem, EquipIndex, emptyIndex):
+        GameWorld.DebugLog("诛仙卸下装备失败: EquipIndex=%s" % (EquipIndex), playerID)
+        return
+    RefreshZhuXianAttr(curPlayer)
+    return
+
+def RefreshZhuXianAttr(curPlayer):
+    CalcZhuXianAttr(curPlayer)
+    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() 
+    return
+
+def CalcZhuXianAttr(curPlayer):
+    ## 刷新诛仙属性
+    playerID = curPlayer.GetPlayerID()
+    PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
+    PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
+    
+    allAttrList = [{} for _ in range(4)]
+    allAttrListZXSuit = [{} for _ in range(4)]
+    equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
+    equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...}
+    equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...}
+    
+    attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {}) # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...}
+    addAttrIDList = range(ShareDefine.Def_Effect_SkillAddPer1, ShareDefine.Def_Effect_SkillAddPer7 + 1)
+    reduceAttrIDList = range(ShareDefine.Def_Effect_SkillReducePer1, ShareDefine.Def_Effect_SkillReducePer7 + 1)
+    zxSkillPlusAttrDict = {} # 玩家诛仙装备影响技能TypeID属性字典 {属性ID:值, ...}
+    
+    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
+    equipPackCount = zhuXianEquipPack.GetCount()
+    
+    for equipIndex in range(len(ShareDefine.ZhuXianEquipPlace)):
+        if equipIndex < 0 or equipIndex >= equipPackCount:
+            break
+        curEquip = zhuXianEquipPack.GetAt(equipIndex)            
+        if curEquip.IsEmpty():
+            continue
+        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
+        equipPlace = GetZhuXianEquipPlaceByIndex(equipIndex)
+        equipPlaceClassLVDict[equipPlace] = ItemCommon.GetItemClassLV(curEquip)
+        
+        # 基础属性
+        baseAttrDict = {}
+        for effIndex in xrange(curEquip.GetEffectCount()):
+            curEffect = curEquip.GetEffectByIndex(effIndex)
+            if not curEffect or not curEffect.GetEffectID():
+                break
+            effID = curEffect.GetEffectID()
+            if not effID:
+                continue
+            effValue = curEffect.GetEffectValue(0)
+            PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList)
+            baseAttrDict[effID] = baseAttrDict.get(effID, 0) + effValue
+        equipPlaceBaseAttrDict[equipPlace] = baseAttrDict
+        
+        # 传奇属性
+        if curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID) == curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue):
+            for i in xrange(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)):
+                legendAttrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
+                legendAttrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
+                if legendAttrID in attrIDSkillPlusDict:
+                    zxSkillPlusAttrDict[legendAttrID] = zxSkillPlusAttrDict.get(legendAttrID, 0) + legendAttrValue
+                else:
+                    PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrList)
+                    
+    GameWorld.DebugLog("诛仙装备属性: allAttrList=%s" % (allAttrList))
+    GameWorld.DebugLog("    zxSkillPlusAttrDict=%s" % (zxSkillPlusAttrDict))
+    
+    # 缓存技能增强比例,目前暂写死对指定技能伤害百分比提升
+    for attrID, plusValue in zxSkillPlusAttrDict.items():
+        if attrID not in attrIDSkillPlusDict:
+            continue
+        skillTypeIDList = attrIDSkillPlusDict[attrID]
+        effSkillTypeID = 0
+        for skillTypeID in skillTypeIDList:
+            skillData = curPlayer.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
+            if not skillData:
+                continue
+            if SkillCommon.CheckSkillJob(curPlayer, skillData):
+                effSkillTypeID = skillTypeID
+                break
+        if not effSkillTypeID:
+            continue
+        
+        if attrID in addAttrIDList:
+            skillAddPerDict = PyGameData.g_zhuXianSkillAddPerDict.get(playerID, {})
+            skillAddPerDict[effSkillTypeID] = plusValue
+            PyGameData.g_zhuXianSkillAddPerDict[playerID] = skillAddPerDict
+        elif attrID in reduceAttrIDList:
+            skillReducePerDict = PyGameData.g_zhuXianSkillReducePerDict.get(playerID, {})
+            skillReducePerDict[effSkillTypeID] = plusValue
+            PyGameData.g_zhuXianSkillReducePerDict[playerID] = skillReducePerDict
+            
+    # 计算套装,目前暂写死对诛仙装备部位基础属性提升
+    suitAttrIDPlusPlaceDict = {
+                               ShareDefine.Def_Effect_ZXCloakAttrPer:ShareDefine.zxetCloak,
+                               ShareDefine.Def_Effect_ZXMaskAttrPer:ShareDefine.zxetMask,
+                               ShareDefine.Def_Effect_ZXGloveAttrPer:ShareDefine.zxetGlove,
+                               ShareDefine.Def_Effect_ZXRuyiAttrPer:ShareDefine.zxetRuyi,
+                               ShareDefine.Def_Effect_ZXPendantAttrPer:ShareDefine.zxetPendant,
+                               ShareDefine.Def_Effect_ZXRingAttrPer:ShareDefine.zxetRing,
+                               }
+    suitPlaceGroupDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 2, {})
+    for suitType, placeGroupList in suitPlaceGroupDict.items():
+        suitType = int(suitType)
+        suitLV = 0
+        isSuit = True
+        for place in placeGroupList:
+            if place not in equipPlaceClassLVDict:
+                isSuit = False
+                GameWorld.DebugLog("    未穿戴装备,无法激活诛仙套装! suitType=%s,placeGroupList=%s,place=%s" % (suitType, placeGroupList, place))
+                break
+            if not suitLV:
+                suitLV = equipPlaceClassLVDict[place]
+            else:
+                suitLV = min(suitLV, equipPlaceClassLVDict[place])
+                
+        if not isSuit or not suitLV:
+            continue
+        
+        suitAttrIpyData = IpyGameDataPY.GetIpyGameData("ZhuXianSuitAttr", suitType, suitLV)
+        if not suitAttrIpyData:
+            continue
+        suitAttrIDList = suitAttrIpyData.GetSuitAttrIDList()
+        suitAttrValueList = suitAttrIpyData.GetSuitAttrValueList()
+        if len(suitAttrIDList) != len(suitAttrValueList):
+            continue
+        for i, suitEffID in enumerate(suitAttrIDList):
+            suitEffValue = suitAttrValueList[i]
+            if suitEffID in suitAttrIDPlusPlaceDict:
+                plusPlace = suitAttrIDPlusPlaceDict[suitEffID]
+                if plusPlace not in equipPlaceBaseAttrDict:
+                    continue
+                plusEffDict = equipPlaceBaseAttrDict[plusPlace]
+                for plusEffID, plusEffValue in plusEffDict.items():
+                    addValue = int(plusEffValue * (10000 + suitEffValue) / 10000.0)
+                    PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXSuit)
+            else:
+                PlayerControl.CalcAttrDict_Type(suitEffID, suitEffValue, allAttrListZXSuit)
+                
+    # 保存计算值
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
+    
+    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
+    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
+    GameWorld.DebugLog("诛仙装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
+    return
+
+def GetZhuXianEquipSkillAddPer(playerID, skillTypeID):
+    ## 获取诛仙装备伤害百分比提升值
+    if playerID not in PyGameData.g_zhuXianSkillAddPerDict:
+        return 0
+    skillAddPerDict = PyGameData.g_zhuXianSkillAddPerDict[playerID]
+    if skillTypeID not in skillAddPerDict:
+        return 0
+    return skillAddPerDict[skillTypeID]
+
+def GetZhuXianEquipSkillReducePer(playerID, skillTypeID):
+    ## 获取诛仙装备减伤百分比提升值
+    if playerID not in PyGameData.g_zhuXianSkillReducePerDict:
+        return 0
+    skillReducePerDict = PyGameData.g_zhuXianSkillReducePerDict[playerID]
+    if skillTypeID not in skillReducePerDict:
+        return 0
+    return skillReducePerDict[skillTypeID]
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 1ba3c18..a93cdda 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -458,6 +458,20 @@
     SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
     Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
     Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
+    SkillAddPer1 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
+    SkillAddPer2 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
+    SkillAddPer3 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
+    SkillAddPer4 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
+    SkillAddPer5 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
+    SkillAddPer6 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
+    SkillAddPer7 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
+    SkillReducePer1 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
+    SkillReducePer2 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
+    SkillReducePer3 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
+    SkillReducePer4 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
+    SkillReducePer5 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
+    SkillReducePer6 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
+    SkillReducePer7 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
     
     # 攻速不默认乘,仅作为参数提供策划使用
     AtkSpeed = attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
@@ -1692,7 +1706,7 @@
 #  @remarks 函数详细说明.
 def SwitchItem(curPlayer, curItem, switchItem, putInPackIndex):
     ##物品绑定字段判定 -> 装备绑定
-    if putInPackIndex == IPY_GameWorld.rptEquip:
+    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
         
     # 装备技能书、坐骑装备绑定
@@ -1717,7 +1731,7 @@
         return
     
     ##物品绑定字段判定 -> 装备绑定
-    if putInPackIndex == IPY_GameWorld.rptEquip:
+    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
     
     # 装备技能书、坐骑装备绑定
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 17a6cb5..92eeea5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -89,6 +89,7 @@
 import CrossRealmPlayer
 import CrossPlayerData
 import ChNetSendPack
+import EquipZhuXian
 import PlayerCoat
 import PlayerState
 import QuestCommon
@@ -1213,6 +1214,11 @@
     
     if not isDisconnect:
         CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
+        
+    #清除地图玩家缓存
+    playerID = curPlayer.GetPlayerID()
+    PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
+    PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
     return
 
 ##更新保存玩家在线时间
@@ -3541,6 +3547,13 @@
         FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
         DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
         DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
+        JobAHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAHurtAddPer) * fpParam.GetCftJobAHurtAddPer() # 对目标战士伤害加成
+        JobBHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBHurtAddPer) * fpParam.GetCftJobBHurtAddPer() # 对目标法师伤害加成
+        JobCHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCHurtAddPer) * fpParam.GetCftJobCHurtAddPer() # 对目标弓箭伤害加成
+        JobAAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAAtkReducePer) * fpParam.GetCftJobAAtkReducePer() # 战士攻击伤害减免
+        JobBAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBAtkReducePer) * fpParam.GetCftJobBAtkReducePer() # 法师攻击伤害减免
+        JobCAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCAtkReducePer) * fpParam.GetCftJobCAtkReducePer() # 弓箭攻击伤害减免
+        
         ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
         ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
         #MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
@@ -4133,6 +4146,7 @@
         PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
         PlayerEquipDecompose.RefreshEDAttr(curPlayer)
         PlayerDogz.RefreshDogzAttr(curPlayer)
+        EquipZhuXian.CalcZhuXianAttr(curPlayer)
         PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
         PlayerCoat.CalcClothesCoatSkinAttr(curPlayer)
         self.RefreshAllState(isForce=True)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 37d22ac..b397a8b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -88,4 +88,6 @@
 g_crossPlayerItemsChangeInfo = {} #跨服玩家物品变化信息 {playerID:{"背包类型-物品位":itemMD5, ...}, ...}
 g_crossPlayerSkillsChangeInfo = {} #跨服玩家技能变化信息 {playerID:[技能ID], ...}
 
-g_ZhuXianBossPlayerHurtDict = {} #诛仙BOSS玩家伤害排行信息
\ No newline at end of file
+g_ZhuXianBossPlayerHurtDict = {} #诛仙BOSS玩家伤害排行信息
+g_zhuXianSkillAddPerDict = {} # 诛仙装备对技能增强缓存 {playerID:{技能TypeID:数值, ...}, ...}
+g_zhuXianSkillReducePerDict = {} # 诛仙装备对技能减伤缓存 {playerID:{技能TypeID:数值, ...}, ...}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ab6f754..1edec26 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -478,6 +478,36 @@
 
 Def_Effect_NPCHurtAddPer = 89 # 对怪物伤害加成
 
+Def_Effect_JobAHurtAddPer = 90 # 对目标战士伤害加成
+Def_Effect_JobBHurtAddPer = 91 # 对目标法师伤害加成
+Def_Effect_JobCHurtAddPer = 92 # 对目标弓箭伤害加成
+Def_Effect_JobAAtkReducePer = 93 # 战士攻击伤害减免
+Def_Effect_JobBAtkReducePer = 94 # 法师攻击伤害减免
+Def_Effect_JobCAtkReducePer = 95 # 弓箭攻击伤害减免
+
+Def_Effect_ZXCloakAttrPer = 96 # 诛仙披风属性加成百分比
+Def_Effect_ZXMaskAttrPer = 97 # 诛仙面具属性加成百分比
+Def_Effect_ZXGloveAttrPer = 98 # 诛仙手套属性加成百分比
+Def_Effect_ZXRuyiAttrPer = 99 # 诛仙如意属性加成百分比
+Def_Effect_ZXPendantAttrPer = 100 # 诛仙吊坠属性加成百分比
+Def_Effect_ZXRingAttrPer = 101 # 诛仙戒指属性加成百分比
+
+Def_Effect_SkillAddPer1 = 102 # 技能伤害增强1
+Def_Effect_SkillAddPer2 = 103 # 技能伤害增强2
+Def_Effect_SkillAddPer3 = 104 # 技能伤害增强3
+Def_Effect_SkillAddPer4 = 105 # 技能伤害增强4
+Def_Effect_SkillAddPer5 = 106 # 技能伤害增强5
+Def_Effect_SkillAddPer6 = 107 # 技能伤害增强6
+Def_Effect_SkillAddPer7 = 108 # 技能伤害增强7
+
+Def_Effect_SkillReducePer1 = 109 # 受到技能伤害减少1
+Def_Effect_SkillReducePer2 = 110 # 受到技能伤害减少2
+Def_Effect_SkillReducePer3 = 111 # 受到技能伤害减少3
+Def_Effect_SkillReducePer4 = 112 # 受到技能伤害减少4
+Def_Effect_SkillReducePer5 = 113 # 受到技能伤害减少5
+Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
+Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
+
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
 #增加%d魔法伤害值,其中a值为伤害值
@@ -1349,7 +1379,7 @@
 )=range(5)
 
 # 战斗力模块类型
-Def_MFPType_Max = 28
+Def_MFPType_Max = 29
 ModuleFightPowerTypeList = (
 Def_MFPType_Role, # 角色 0
 Def_MFPType_Equip, # 装备(基本装备位) 1
@@ -1376,6 +1406,7 @@
 Def_MFPType_GatherSoul, # 聚魂 22
 Def_MFPType_MagicWeapon4, # 王者法宝 23
 Def_MFPType_Coat, # 时装 24
+Def_MFPType_ZhuXian, # 诛仙 25
 Def_MFPType_Other, # 其他
 
 #以下暂时没用到,改时再处理
@@ -1765,6 +1796,11 @@
     zxetWeapon4,    # 诛仙剑4 132
 ) = range(121, 121 + 12)
 
+# 共享通用装备位,可装备同一类型装备
+ShareEquipPlace = [
+                   [zxetGlove, zxetGlove2],
+                   [zxetRing, zxetRing2],
+                   ]
 
 # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
 EnterFBAskResult = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index af21d9c..1f5de80 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -46,6 +46,7 @@
 import SkillShell
 import FBCommon
 import IpyGameDataPY
+import EquipZhuXian
 #---------------------------------------------------------------------
 GameWorld.ImportAll("Script\\Skill\\" , "GameSkills")
 GameWorld.ImportAll("Script\\Skill\\" , "GameBuffs")
@@ -1878,6 +1879,11 @@
     if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
         if not PlayerGreatMaster.GetGreatMasterFreeSkillPoint(curPlayer):
             return False
+    #诛仙技能学习判断
+    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_ZhuXian:
+        if not EquipZhuXian.CheckLearnZhuXianSkill(curPlayer, curSkillTypeID):
+            return False
+        
     #经验检测
     skillLvUpNeedExp = upSkill.GetLVUpCostExp()
     

--
Gitblit v1.8.0