From 7d249be8ea05b26827e39a2409e06931aefb4949 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 四月 2019 16:55:10 +0800
Subject: [PATCH] 6430 【后端】【2.0】属性级战力算法优化 6426 【后端】【2.0】装备战力划分

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_514.py           |   32 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py                       |  130 ++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                        |   26 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_515.py           |   32 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py                  |   12 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py        |   28 +
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                             |   27 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py               |  261 +++++++++++----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py             |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                           |  137 +++-------
 14 files changed, 329 insertions(+), 375 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index ab51ac3..5ffca38 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -531,6 +531,7 @@
 Def_Effect_JXWeaponAttrPer = 119 # 诛仙剑4属性加成百分比
 
 Def_Effect_Luck = 120 # 气运
+Def_Effect_LuckPer = 133 # 气运百分率
 
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
@@ -1301,10 +1302,10 @@
 )=range(5)
 
 # 战斗力模块类型
-Def_MFPType_Max = 44
+Def_MFPType_Max = 26
 ModuleFightPowerTypeList = (
 Def_MFPType_Role, # 角色 0
-Def_MFPType_Equip, # 装备(基本装备位) 1  - 废弃
+Def_MFPType_Equip, # 装备(装备本身) 1
 Def_MFPType_Plus, # 强化 2
 Def_MFPType_Stone, # 宝石 3
 Def_MFPType_LingGen, # 灵根 4
@@ -1316,7 +1317,7 @@
 Def_MFPType_GodWeapon, # 神兵 10
 Def_MFPType_Dienstgrad, #称号 11
 Def_MFPType_Rune, # 符印 12
-Def_MFPType_13, #
+Def_MFPType_Star, # 升星 13
 Def_MFPType_MagicWeapon1, # 人族法宝 14
 Def_MFPType_StoveYao, # 炼丹炉丹药 15
 Def_MFPType_MagicWeapon2, # 魔族法宝 16
@@ -1328,27 +1329,7 @@
 Def_MFPType_GatherSoul, # 聚魂 22
 Def_MFPType_MagicWeapon4, # 王者法宝 23
 Def_MFPType_Coat, # 时装 24
-Def_MFPType_ZhuXian, # 诛仙 25  - 废弃
-Def_MFPType_Equip1, # 境界装备1阶 26
-Def_MFPType_Equip2, # 境界装备2阶 27
-Def_MFPType_Equip3, # 境界装备3阶 28
-Def_MFPType_Equip4, # 境界装备4阶 29
-Def_MFPType_Equip5, # 境界装备5阶 30
-Def_MFPType_Equip6, # 境界装备6阶 31
-Def_MFPType_Equip7, # 境界装备7阶 32
-Def_MFPType_Equip8, # 境界装备8阶 33
-Def_MFPType_Equip9, # 境界装备9阶 34
-Def_MFPType_Equip10, # 境界装备10阶 35
-Def_MFPType_Equip11, # 境界装备11阶 36
-Def_MFPType_Equip12, # 境界装备12阶 37
-Def_MFPType_Equip13, # 境界装备13阶 38
-Def_MFPType_Equip14, # 境界装备14阶 39
-Def_MFPType_Equip15, # 境界装备15阶 40
 Def_MFPType_Other, # 其他
-
-#以下暂时没用到,改时再处理
-Def_MFPType_Passive, #被动技能
-Def_MFPType_ClothesCoat, #衣服时装
 ) = range(Def_MFPType_Max)
 
 #事件汇报用户行为-----------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 1fb7fb3..3661e71 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4222,90 +4222,62 @@
 #刷属性功能分类索引
 CalcAttrFuncList = (
 Def_CalcAttrFunc_RoleBase, # 角色基础 0
-Def_CalcAttrFunc_1,
-Def_CalcAttrFunc_2,
-Def_CalcAttrFunc_LingGenQuailty, # 灵根品质附加属性 3
-Def_CalcAttrFunc_LingGen, # 灵根 4
+Def_CalcAttrFunc_LingGen, # 灵根 1
+Def_CalcAttrFunc_LingGenQuailty, # 灵根品质附加属性 2
+Def_CalcAttrFunc_Equip, # 装备 3
+Def_CalcAttrFunc_Star, # 升星 4
 Def_CalcAttrFunc_Plus, # 装备位强化 5
-Def_CalcAttrFunc_6,
-Def_CalcAttrFunc_Stone, # 装备宝石 7
-Def_CalcAttrFunc_8,
-Def_CalcAttrFunc_Wing, # 翅膀 9
-Def_CalcAttrFunc_Wash, # 洗练 10
-Def_CalcAttrFunc_Pet, # 灵宠 11
-Def_CalcAttrFunc_Horse, # 坐骑 12
-Def_CalcAttrFunc_Prestige, # 境界 13
-Def_CalcAttrFunc_GodWeapon, # 神兵 14
-Def_CalcAttrFunc_Dienstgrad, # 称号 15
-Def_CalcAttrFunc_Rune, # 符印 16
-Def_CalcAttrFunc_17,
-Def_CalcAttrFunc_MagicWeapon1, # 人族法宝属性 18
-Def_CalcAttrFunc_EquipOutOfPrint, # 绝版属性随等级变化 19
-Def_CalcAttrFunc_20,
-Def_CalcAttrFunc_Success, # 成就属性 21
-Def_CalcAttrFunc_VIP, # VIP属性 22
-Def_CalcAttrFunc_Stove, # 炼丹炉 23
-Def_CalcAttrFunc_FamilyTech, # 仙盟心法 24
-Def_CalcAttrFunc_MagicWeapon2, # 魔族法宝属性 25
-Def_CalcAttrFunc_EquipDecompose, # 装备分解属性 26
-Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 27
-Def_CalcAttrFunc_PetSoul, # 宠物魂石 28
-Def_CalcAttrFunc_HorseSoul, # 坐骑魂石 29
-Def_CalcAttrFunc_HorseSkill,    # 坐骑技能属性 30
-Def_CalcAttrFunc_PetSkill,    # 宠物技能属性 31
-Def_CalcAttrFunc_StoveYao, # 炼丹炉丹药 32
-Def_CalcAttrFunc_PetSign, # 宠物签到 33
-Def_CalcAttrFunc_34,
-Def_CalcAttrFunc_Dogz, # 神兽35
-Def_CalcAttrFunc_DogzBattleSkill, # 助战神兽技能36
-Def_CalcAttrFunc_DogzEquip, # 神兽装备37
-Def_CalcAttrFunc_DogzEquipPlus, # 神兽装备强化38
-Def_CalcAttrFunc_GatherSoul, # 聚魂39
-Def_CalcAttrFunc_MagicWeapon4, # 王者法宝40
-Def_CalcAttrFunc_Coat, # 时装41
-Def_CalcAttrFunc_ZXEquip, # 诛仙装备42
-Def_CalcAttrFunc_ZXEquipSuit, # 诛仙装备套装43    -     废弃
-Def_CalcAttrFunc_ZXEquipStone, # 诛仙宝石属性44    -     废弃
-Def_CalcAttrFunc_45,
-Def_CalcAttrFunc_Equip1, # 境界装备1阶 46
-Def_CalcAttrFunc_Equip2, # 境界装备2阶 47
-Def_CalcAttrFunc_Equip3, # 境界装备3阶 48
-Def_CalcAttrFunc_Equip4, # 境界装备4阶 49
-Def_CalcAttrFunc_Equip5, # 境界装备5阶 50
-Def_CalcAttrFunc_Equip6, # 境界装备6阶 51
-Def_CalcAttrFunc_Equip7, # 境界装备7阶 52
-Def_CalcAttrFunc_Equip8, # 境界装备8阶 53
-Def_CalcAttrFunc_Equip9, # 境界装备9阶 54
-Def_CalcAttrFunc_Equip10, # 境界装备10阶 55
-Def_CalcAttrFunc_Equip11, # 境界装备11阶 56
-Def_CalcAttrFunc_Equip12, # 境界装备12阶 57
-Def_CalcAttrFunc_Equip13, # 境界装备13阶 58
-Def_CalcAttrFunc_Equip14, # 境界装备14阶 59
-Def_CalcAttrFunc_Equip15, # 境界装备15阶 60
-) = range(61)
+Def_CalcAttrFunc_Stone, # 装备宝石 6
+Def_CalcAttrFunc_Wash, # 洗练 7
+Def_CalcAttrFunc_Wing, # 翅膀 8
+Def_CalcAttrFunc_Pet, # 灵宠 9
+Def_CalcAttrFunc_Horse, # 坐骑 10
+Def_CalcAttrFunc_Prestige, # 境界 11
+Def_CalcAttrFunc_GodWeapon, # 神兵 12
+Def_CalcAttrFunc_Dienstgrad, # 称号 13
+Def_CalcAttrFunc_Rune, # 符印 14
+Def_CalcAttrFunc_EquipOutOfPrint, # 绝版属性随等级变化 15
+Def_CalcAttrFunc_Success, # 成就属性 16
+Def_CalcAttrFunc_VIP, # VIP属性 17
+Def_CalcAttrFunc_Stove, # 炼丹炉 18
+Def_CalcAttrFunc_FamilyTech, # 仙盟心法 19
+Def_CalcAttrFunc_EquipDecompose, # 装备分解属性 20
+Def_CalcAttrFunc_PetSoul, # 宠物魂石 21
+Def_CalcAttrFunc_HorseSoul, # 坐骑魂石 22
+Def_CalcAttrFunc_HorseSkill,    # 坐骑技能属性 23
+Def_CalcAttrFunc_PetSkill,    # 宠物技能属性 24
+Def_CalcAttrFunc_StoveYao, # 炼丹炉丹药 25
+Def_CalcAttrFunc_PetSign, # 宠物签到 26
+Def_CalcAttrFunc_Dogz, # 神兽 27
+Def_CalcAttrFunc_DogzBattleSkill, # 助战神兽技能 28
+Def_CalcAttrFunc_DogzEquip, # 神兽装备 29
+Def_CalcAttrFunc_DogzEquipPlus, # 神兽装备强化 30
+Def_CalcAttrFunc_GatherSoul, # 聚魂 31
+Def_CalcAttrFunc_MagicWeapon1, # 人族法宝属性 32
+Def_CalcAttrFunc_MagicWeapon2, # 魔族法宝属性 33
+Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 34
+Def_CalcAttrFunc_MagicWeapon4, # 王者法宝 35
+Def_CalcAttrFunc_Coat, # 时装 36
+) = range(37)
 
-# 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
-CalcAttrExFuncList = [Def_CalcAttrFunc_MagicWeapon1, Def_CalcAttrFunc_MagicWeapon2, Def_CalcAttrFunc_MagicWeapon3, Def_CalcAttrFunc_MagicWeapon4,
-                      Def_CalcAttrFunc_Stove, Def_CalcAttrFunc_VIP, Def_CalcAttrFunc_PetSoul, Def_CalcAttrFunc_HorseSoul,
-                      Def_CalcAttrFunc_StoveYao, Def_CalcAttrFunc_PetSign
-                      ]
-
-# 在此列表中的功能属性,不享受百分比加成,--属性不参与战力计算,战力由技能配置决定
-CalcAttrExFuncListNoFightPower = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
-
+# 技能功能点列表  - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
+CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
+# 不计算战力的功能点列表 - 由其他方式计算的战力的功能点,如装备用评分计算
+CalcAttrFuncNoFightPowerList = [Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_DogzEquip]
 
 #战斗力分组类型对应功能点属性分类索引列表,并不是一一对应的,有些战斗力类型可由多个功能点组成
+#***注意***: 以下功能点需包含上面定义的所有功能点,不然会导致有些属性无法加上
 MFPTypeAttrFuncIndexDict = {ShareDefine.Def_MFPType_Role:[Def_CalcAttrFunc_RoleBase],
-# 因为装备评分和实际战力一直出现不匹配的情况,所以装备战力修改为直接由装备评分做为参数计算战力,所以装备评分计算的所有属性不列入战力计算,祥见评分计算函数 ItemCommom.CalcEquipGS
-#                            ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_EquipOutOfPrint],
+                            ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_EquipOutOfPrint],
                             ShareDefine.Def_MFPType_LingGen:[Def_CalcAttrFunc_LingGenQuailty, Def_CalcAttrFunc_LingGen],
+                            ShareDefine.Def_MFPType_Star:[Def_CalcAttrFunc_Star],
                             ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
                             ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
                             ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing],
                             ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
-                            ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign],
+                            ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill],
                             ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
-                            ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse],
+                            ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse, Def_CalcAttrFunc_HorseSkill],
                             ShareDefine.Def_MFPType_HorseSoul:[Def_CalcAttrFunc_HorseSoul],
                             ShareDefine.Def_MFPType_Prestige:[Def_CalcAttrFunc_Prestige],
                             ShareDefine.Def_MFPType_GodWeapon:[Def_CalcAttrFunc_GodWeapon],
@@ -4318,24 +4290,7 @@
                             ShareDefine.Def_MFPType_StoveYao:[Def_CalcAttrFunc_StoveYao],
                             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, Def_CalcAttrFunc_ZXEquipStone],
-                            ShareDefine.Def_MFPType_Equip1:[Def_CalcAttrFunc_Equip1],
-                            ShareDefine.Def_MFPType_Equip2:[Def_CalcAttrFunc_Equip2],
-                            ShareDefine.Def_MFPType_Equip3:[Def_CalcAttrFunc_Equip3],
-                            ShareDefine.Def_MFPType_Equip4:[Def_CalcAttrFunc_Equip4],
-                            ShareDefine.Def_MFPType_Equip5:[Def_CalcAttrFunc_Equip5],
-                            ShareDefine.Def_MFPType_Equip6:[Def_CalcAttrFunc_Equip6],
-                            ShareDefine.Def_MFPType_Equip7:[Def_CalcAttrFunc_Equip7],
-                            ShareDefine.Def_MFPType_Equip8:[Def_CalcAttrFunc_Equip8],
-                            ShareDefine.Def_MFPType_Equip9:[Def_CalcAttrFunc_Equip9],
-                            ShareDefine.Def_MFPType_Equip10:[Def_CalcAttrFunc_Equip10],
-                            ShareDefine.Def_MFPType_Equip11:[Def_CalcAttrFunc_Equip11],
-                            ShareDefine.Def_MFPType_Equip12:[Def_CalcAttrFunc_Equip12],
-                            ShareDefine.Def_MFPType_Equip13:[Def_CalcAttrFunc_Equip13],
-                            ShareDefine.Def_MFPType_Equip14:[Def_CalcAttrFunc_Equip14],
-                            ShareDefine.Def_MFPType_Equip15:[Def_CalcAttrFunc_Equip15],
+                            ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquip, Def_CalcAttrFunc_DogzEquipPlus, Def_CalcAttrFunc_DogzBattleSkill],
                             ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
                             }
 
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 861f642..07f97a7 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
@@ -28,12 +28,14 @@
 #  @return None
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, msgList):
-    
     mfpTypeName = {ShareDefine.Def_MFPType_Role:"角色",
+                   ShareDefine.Def_MFPType_LingGen:"灵根",
+                   ShareDefine.Def_MFPType_Equip:"装备",
+                   ShareDefine.Def_MFPType_Star:"升星",
                    ShareDefine.Def_MFPType_Plus:"强化",
                    ShareDefine.Def_MFPType_Stone:"宝石",
-                   ShareDefine.Def_MFPType_Wing:"翅膀",
                    ShareDefine.Def_MFPType_Wash:"洗练",
+                   ShareDefine.Def_MFPType_Wing:"翅膀",
                    ShareDefine.Def_MFPType_Pet:"灵宠",
                    ShareDefine.Def_MFPType_Horse:"坐骑",
                    ShareDefine.Def_MFPType_Prestige:"境界",
@@ -41,11 +43,11 @@
                    ShareDefine.Def_MFPType_Dienstgrad:"称号",
                    ShareDefine.Def_MFPType_Rune:"符印",
                    ShareDefine.Def_MFPType_GatherSoul:"聚魂",
-                   ShareDefine.Def_MFPType_MagicWeapon1:"人族",
                    ShareDefine.Def_MFPType_StoveYao:"丹药",
+                   ShareDefine.Def_MFPType_MagicWeapon1:"人族",
                    ShareDefine.Def_MFPType_MagicWeapon2:"魔族",
                    ShareDefine.Def_MFPType_MagicWeapon3:"仙族",
-                   ShareDefine.Def_MFPType_MagicWeapon4:"王者法宝",
+                   ShareDefine.Def_MFPType_MagicWeapon4:"王者",
                    ShareDefine.Def_MFPType_PetSoul:"宠魂",
                    ShareDefine.Def_MFPType_HorseSoul:"骑魂",
                    ShareDefine.Def_MFPType_Dogz:"神兽",
@@ -55,6 +57,10 @@
     
     funcIndexName = {
                      ChConfig.Def_CalcAttrFunc_RoleBase:"角色基础",
+                     ChConfig.Def_CalcAttrFunc_LingGen:"灵根",
+                     ChConfig.Def_CalcAttrFunc_LingGenQuailty:"灵根品质",
+                     ChConfig.Def_CalcAttrFunc_Equip:"装备",
+                     ChConfig.Def_CalcAttrFunc_Star:"升星",
                      ChConfig.Def_CalcAttrFunc_Plus:"强化",
                      ChConfig.Def_CalcAttrFunc_Stone:"宝石",
                      ChConfig.Def_CalcAttrFunc_Wash:"洗练",
@@ -65,12 +71,8 @@
                      ChConfig.Def_CalcAttrFunc_GodWeapon:"神兵",
                      ChConfig.Def_CalcAttrFunc_Dienstgrad:"称号",
                      ChConfig.Def_CalcAttrFunc_Rune:"符印",
+                     ChConfig.Def_CalcAttrFunc_EquipOutOfPrint:"绝版属性",
                      ChConfig.Def_CalcAttrFunc_GatherSoul:"聚魂",
-                     ChConfig.Def_CalcAttrFunc_MagicWeapon1:"人族法宝属性",
-                     ChConfig.Def_CalcAttrFunc_MagicWeapon2:"魔族法宝属性", 
-                     ChConfig.Def_CalcAttrFunc_MagicWeapon3:"仙族法宝属性", 
-                     ChConfig.Def_CalcAttrFunc_MagicWeapon4:"王者法宝属性", 
-                     ChConfig.Def_CalcAttrFunc_EquipOutOfPrint:"绝版属性随等级变化",
                      ChConfig.Def_CalcAttrFunc_Success:"成就",
                      ChConfig.Def_CalcAttrFunc_VIP:"VIP",
                      ChConfig.Def_CalcAttrFunc_Stove:"炼丹炉",
@@ -84,6 +86,10 @@
                      ChConfig.Def_CalcAttrFunc_PetSign:"宠物签到",
                      ChConfig.Def_CalcAttrFunc_Dogz:"神兽",
                      ChConfig.Def_CalcAttrFunc_Coat:"时装",
+                     ChConfig.Def_CalcAttrFunc_MagicWeapon1:"人族法宝属性",
+                     ChConfig.Def_CalcAttrFunc_MagicWeapon2:"魔族法宝属性", 
+                     ChConfig.Def_CalcAttrFunc_MagicWeapon3:"仙族法宝属性", 
+                     ChConfig.Def_CalcAttrFunc_MagicWeapon4:"王者法宝属性", 
                      }
     
     GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
@@ -96,8 +102,10 @@
         GameWorld.DebugAnswer(curPlayer, "--- %s战力(%s): %s" % (mfpTypeName[mfpType], mfpType, fightPower))
         for funcIndex in ChConfig.MFPTypeAttrFuncIndexDict[mfpType]:
             funcName = funcIndexName.get(funcIndex, "属性(%s)" % funcIndex)
-            attrInfo = PlayerControl.GetCalcAttrListValue(curPlayer, funcIndex)
+            attrInfo, insidePerAttrDict = PlayerControl.GetCalcAttrListValue(curPlayer, funcIndex)
             GameWorld.DebugAnswer(curPlayer, "%s:%s" % (funcName, attrInfo))
+            if insidePerAttrDict:
+                GameWorld.DebugAnswer(curPlayer, "%s内部加成:%s" % (funcName, insidePerAttrDict))
         return
     
     GameWorld.DebugAnswer(curPlayer, "===== 总战力: %s" % curPlayer.GetFightPower())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index 083c2fa..cb5b84d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -415,43 +415,37 @@
 
 def __CalcEquips_Effect(curPlayer, classLV):
     ''' 境界装备系统属性
-    1. 装备模块(装备本身属性+装备位升星属性+装备位套装属性),每个境界阶独立,每个境界战力独立模块计算
-                    装备基础属性 = 装备物品表配置属性 + 星级基础属性加成
+    1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
         1.1 装备本身属性: 不能有影响其他境界装备的属性
                                 基础属性: 物品表中的配置
                                 传奇属性: 
                                 绝版属性: 
-                    
-        1.2 装备位升星属性:不能有影响其他境界装备的属性
+                                
+    2.装备位星级模块    
+        2.1 装备位升星属性:不能有影响其他境界装备的属性
                                 升星基础属性,属性属于装备基础
                                 升星等级属性,会影响本阶装备基础
                                 星级套装属性,详见套装属性
                     
-        1.3 装备位套装属性:不能有影响其他境界装备的属性
+        2.2 装备位套装属性:不能有影响其他境界装备的属性
                                 由装备位是否套装及星级数决定套装属性
             
-    2.装备位强化模块:战力为所有境界装备位强化属性总和战力
+    3.装备位强化模块:战力为所有境界装备位强化属性总和战力
                     强化等级属性    
                     进化等级属性,影响本部位本境界装备基础
                     
-    3.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
+    4.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
                     宝石等级属性
                     宝石觉醒属性,会影响本阶装备基础
                     
-    4.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
+    5.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
                     洗练等级属性
                     洗练套装属性,会影响本阶装备基础
     '''
     
-    equipMFPTypeList = range(ShareDefine.Def_MFPType_Equip1, ShareDefine.Def_MFPType_Equip15 + 1)
-    if classLV < 1 or classLV > len(equipMFPTypeList):
+    if classLV < 1:
         GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶模块: classLV=%s" % classLV)
         return
-    Def_MFPType_EquipClassLV = equipMFPTypeList[classLV - 1]
-    if Def_MFPType_EquipClassLV not in ChConfig.MFPTypeAttrFuncIndexDict:
-        GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶属性: classLV=%s" % classLV)
-        return
-    Def_CalcAttrFunc_EquipClassLV = ChConfig.MFPTypeAttrFuncIndexDict[Def_MFPType_EquipClassLV][0]
     #GameWorld.DebugLog("----- 刷境界装备战力: classLV=%s" % (classLV))
     
     allEquipBaseAttrDict = {} # 所有装备基础属性 {attrID:value, ...}
@@ -459,13 +453,15 @@
     equipBaseAttrDict = {} # 装备基础属性 {装备位:{attrID:value, ...}, ...}
     
     allAttrListEquip = [{} for _ in range(4)]  # 装备属性
-    equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息
+    equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
+    allAttrListStar = [{} for _ in range(4)]  # 升星属性
+    star_addEquipBaseAttrPerList = [{}, {}, {}] # 升星功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
     allAttrListPlus = [{} for _ in range(4)]  # 强化属性
-    plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息
+    plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
     allAttrListStone = [{} for _ in range(4)]  # 宝石属性
-    #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息
+    #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
     allAttrListWash = [{} for _ in range(4)]  # 洗练属性
-    #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息
+    #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
     #allAttrListOutOfPrintEquip = [{} for _ in range(4)]  # 绝版装备属性 需在等级变化独立计算
     
     packType = IPY_GameWorld.rptEquip
@@ -525,7 +521,7 @@
             ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classLV, equipPlace, equipPartStar)
             starBaseAttrDict = {} if not ipyData else ipyData.GetBaseAttrInfo() # 星级基础
             for starBaseAttrID, starBaseAttrValue in starBaseAttrDict.items():
-                PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListEquip)
+                PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListStar)
                 baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
                 allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
                 if isBaseEquip:
@@ -534,9 +530,9 @@
                     
             starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # 星级附加
             for starAttrID, starAttrValue in starAttrDict.items():
-                PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListEquip)
+                PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar)
                 #GameWorld.DebugLog("    星级附加属性: ID=%s +%s" % (starAttrID, starAttrValue))
-                __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, equip_addEquipBaseAttrPerList)
+                __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList)
                 
         equipBaseAttrDict[equipPlace] = baseAttrDict
         
@@ -571,67 +567,87 @@
         Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrListWash)
     
 #    GameWorld.DebugLog("    装备循环属性: %s" % (allAttrListEquip))
+#    GameWorld.DebugLog("    升星循环属性: %s" % (allAttrListStar))
 #    GameWorld.DebugLog("    强化循环属性: %s" % (allAttrListPlus))
 #    GameWorld.DebugLog("    宝石循环属性: %s" % (allAttrListStone))
 #    GameWorld.DebugLog("    洗练循环属性: %s" % (allAttrListWash))
 #    GameWorld.DebugLog("    -----" )
     # 2. 计算遍历后的附加属性
-    #套装属性
-    CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip)
+    #套装属性,暂归为星级套装属性
+    CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListStar)
     
-    #GameWorld.DebugLog("    装备属性套装: %s" % (allAttrListEquip))
+#    GameWorld.DebugLog("    升星属性套装: %s" % (allAttrListEquip))
     
     # 3. 计算对装备基础的附加加成
 #    GameWorld.DebugLog("    -----" )
 #    GameWorld.DebugLog("    所有装备基础属性: %s" % (allEquipBaseAttrDict))
 #    GameWorld.DebugLog("    基础装备基础属性: %s" % (baseEquipBaseAttrDict))
 #    GameWorld.DebugLog("    单件装备基础属性: %s" % (equipBaseAttrDict))
+#    GameWorld.DebugLog("    -----" )
     #计算功能点对装备基础的加成
-    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, allAttrListEquip, "Equip")
-    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, allAttrListPlus, "Plus")
-    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, allAttrListStone, "Stone")
-    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, allAttrListWash, "Wash")
-    
-    #GameWorld.DebugLog("    本阶装备属性: %s" % (allAttrListEquip))
+    insideAttrDictEquip, insideAttrDictStar, insideAttrDictPlus, insideAttrDictStone, insideAttrDictWash = {}, {}, {}, {}, {}
+    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, insideAttrDictEquip, "Equip")
+    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, star_addEquipBaseAttrPerList, insideAttrDictStar, "Star")
+    __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, insideAttrDictPlus, "Plus")
+    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone")
+    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash")
     
     #保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, Def_CalcAttrFunc_EquipClassLV, allAttrListEquip)
     #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
     #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
     equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
-    #GameWorld.DebugLog("    装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % Def_MFPType_EquipClassLV, equipFightPowerEx)
     
     # 4. 累加所有阶装备位属性
     playerID = curPlayer.GetPlayerID()
     if playerID not in PyGameData.g_playerEquipPartAttrDict:
         PyGameData.g_playerEquipPartAttrDict[playerID] = {}
     equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID]
-    equipPartAttrDict[classLV] = [allAttrListPlus, allAttrListStone, allAttrListWash]
-    
-    allPartAttrListPlus = [{} for _ in range(4)]
-    allPartAttrListStone = [{} for _ in range(4)]
-    allPartAttrListWash = [{} for _ in range(4)]
+    equipPartAttrDict[classLV] = [equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar,
+                                  allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash]
     
 #    GameWorld.DebugLog("    ----- 累加所有阶装备位养成属性")
-#    GameWorld.DebugLog("    本阶强化属性: %s" % (allAttrListPlus))
-#    GameWorld.DebugLog("    本阶宝石属性: %s" % (allAttrListStone))
-#    GameWorld.DebugLog("    本阶洗练属性: %s" % (allAttrListWash))
+#    GameWorld.DebugLog("    本阶装备战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
+#    GameWorld.DebugLog("    本阶装备属性: %s, 内部加成=%s" % (allAttrListEquip, insideAttrDictEquip))
+#    GameWorld.DebugLog("    本阶升星属性: %s, 内部加成=%s" % (allAttrListStar, insideAttrDictStar))
+#    GameWorld.DebugLog("    本阶强化属性: %s, 内部加成=%s" % (allAttrListPlus, insideAttrDictPlus))
+#    GameWorld.DebugLog("    本阶宝石属性: %s, 内部加成=%s" % (allAttrListStone, insideAttrDictStone))
+#    GameWorld.DebugLog("    本阶洗练属性: %s, 内部加成=%s" % (allAttrListWash, insideAttrDictWash))
     
+    allClassEquipFightPowerEx = 0
+    allClassAttrListEquip, allClassInsideAttrDictEquip = [{} for _ in range(4)], {}
+    allClassAttrListStar, allClassInsideAttrDictStar = [{} for _ in range(4)], {}
+    allClassAttrListPlus, allClassInsideAttrDictPlus = [{} for _ in range(4)], {}
+    allClassAttrListStone, allClassInsideAttrDictStone = [{} for _ in range(4)], {}
+    allClassAttrListWash, allClassInsideAttrDictWash = [{} for _ in range(4)], {}
     for classLV, attrList in equipPartAttrDict.items():
-        allAttrListPlus, allAttrListStone, allAttrListWash = attrList
+        equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar, \
+            allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash = attrList
         #GameWorld.DebugLog("    classLV=%s, %s" % (classLV, attrList))
+        allClassEquipFightPowerEx += equipFightPowerEx
         for i in xrange(4):
-            PlayerControl.AddAttrDictValue(allPartAttrListPlus[i], allAttrListPlus[i])
-            PlayerControl.AddAttrDictValue(allPartAttrListStone[i], allAttrListStone[i])
-            PlayerControl.AddAttrDictValue(allPartAttrListWash[i], allAttrListWash[i])
-            
-#    GameWorld.DebugLog("    所有阶强化属性: %s" % (allPartAttrListPlus))
-#    GameWorld.DebugLog("    所有阶宝石属性: %s" % (allPartAttrListStone))
-#    GameWorld.DebugLog("    所有阶洗练属性: %s" % (allPartAttrListWash))
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allPartAttrListPlus)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allPartAttrListStone)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allPartAttrListWash)
+            PlayerControl.AddAttrDictValue(allClassAttrListEquip[i], allAttrListEquip[i])
+            PlayerControl.AddAttrDictValue(allClassAttrListStar[i], allAttrListStar[i])
+            PlayerControl.AddAttrDictValue(allClassAttrListPlus[i], allAttrListPlus[i])
+            PlayerControl.AddAttrDictValue(allClassAttrListStone[i], allAttrListStone[i])
+            PlayerControl.AddAttrDictValue(allClassAttrListWash[i], allAttrListWash[i])
+        PlayerControl.AddAttrDictValue(allClassInsideAttrDictEquip, insideAttrDictEquip)
+        PlayerControl.AddAttrDictValue(allClassInsideAttrDictStar, insideAttrDictStar)
+        PlayerControl.AddAttrDictValue(allClassInsideAttrDictPlus, insideAttrDictPlus)
+        PlayerControl.AddAttrDictValue(allClassInsideAttrDictStone, insideAttrDictStone)
+        PlayerControl.AddAttrDictValue(allClassInsideAttrDictWash, insideAttrDictWash)
+        
+#    GameWorld.DebugLog("    所有阶装备战力: %s" % (allClassEquipFightPowerEx))
+#    GameWorld.DebugLog("    所有阶装备属性: %s, 内部加成=%s" % (allClassAttrListEquip, allClassInsideAttrDictEquip))
+#    GameWorld.DebugLog("    所有阶升星属性: %s, 内部加成=%s" % (allClassAttrListStar, allClassInsideAttrDictStar))
+#    GameWorld.DebugLog("    所有阶强化属性: %s, 内部加成=%s" % (allClassAttrListPlus, allClassInsideAttrDictPlus))
+#    GameWorld.DebugLog("    所有阶宝石属性: %s, 内部加成=%s" % (allClassAttrListStone, allClassInsideAttrDictStone))
+#    GameWorld.DebugLog("    所有阶洗练属性: %s, 内部加成=%s" % (allClassAttrListWash, allClassInsideAttrDictWash))
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone)
+    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash)
     return
 
 def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList):
@@ -670,7 +686,7 @@
     
     return
 
-def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrList, sign=""):
+def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""):
     ## 计算其他功能属性对装备基础属性加成的属性具体值
     allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList
     #GameWorld.DebugLog("    计算功能点对装备基础属性加成: %s" % sign)
@@ -680,7 +696,7 @@
             continue
         baseValue = allEquipBaseAttrDict[attrID]
         addValue = int(baseValue * addPer / 10000.0)
-        PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
+        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
         #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
     
     #GameWorld.DebugLog("        基础装备属性: %s, 加成%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict))
@@ -689,7 +705,7 @@
             continue
         baseValue = baseEquipBaseAttrDict[attrID]
         addValue = int(baseValue * addPer / 10000.0)
-        PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
+        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
         #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
         
     #GameWorld.DebugLog("        指定装备属性: %s, 加成%s" % (equipBaseAttrDict, assignPlaceAddPerDict))
@@ -702,7 +718,7 @@
                 continue
             baseValue = baseAttrDict[attrID]
             addValue = int(baseValue * addPer / 10000.0)
-            PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
+            PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
             #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
index ddf0f1d..41696ec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -184,8 +184,8 @@
 
 
 def RefreshZhuXianAttr(curPlayer):
-    CalcZhuXianAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() 
+    #CalcZhuXianAttr(curPlayer)
+    #PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() 
     return
 
 
@@ -362,14 +362,14 @@
                 PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListZXStone)
         
     # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
+    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
+    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
+    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
     
     #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
     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)
+    #curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
     return
 
 
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 e043a34..faa901d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4214,40 +4214,34 @@
     
     def RefreshPlayerAttrStateEx(self):
         ''' 本项目刷属性规则
-                功能属性层级一(线性层级、非线性层级)
-                功能属性层级二(线性层级、非线性层级)
-                ...
-                固定属性层级
-              buff层级
-              
-            1. 初始化
+                    属性:
+            1.固定属性:如攻击+100
+            2.百分比属性: 如攻击+5%,百分比加成基值仅为固定属性,百分比加成属性值不被除buff百分比外的任何百分比属性二次加成
             
-            功能属性层级一、
-            2.基础属性计算
-            3.战斗属性计算
-                线性层级属性:  基础层级属性 + 功能层级属性
-                    基础层级属性:角色基础属性(等级提升 + 属性点提升) + 装备物品表基础属性 + 部位强化基础属性
-                    功能层级属性:神兵 + 坐骑 + 全身部位强化星级累加 + 珍品 + 时装 + 套装 + 宝石 + 战盟科技 + 符文 + 守护 等
+                    层级:
+            1.属性层级:所有功能同一层级
+            2.buff层级:百分比可对功能百分比加成的属性进行二次加成
+            
+                    功能模块:定义一个功能,比如灵根模块,一个模块可能包含多个功能点
+                    功能点:某个模块下的各个属性功能点,如灵根模块可能包含 灵根基础、灵根品质 两个功能点属性
+        
+                    百分比加成值:百分比加成属性值不被除buff百分比外的任何百分比属性2次加成
+            1.功能内部属性百分比加成:功能百分比属性对自己功能固定值加成
+            2.功能交叉属性百分比加成:功能百分比属性对其他功能固定值加成
+            3.功能固定属性百分比加成:功能百分比属性对所有功能固定值加成
+            4.buff层级百分比:对所有属性进行二次加成
+            
+                    技能属性:固定值不享受固定百分比加成
                     
-                                    注意:该层中还包含针对基础属性或功能属性的数值百分比提升,此提升值也是累加到线性层级属性
-                                    如: 【基础攻击百分比】即对 基础属性 中攻击属性百分比提升
-                                    【神兵生命属性百分比】即对 神兵功能属性 中生命属性百分比提升
-                                    类似此类属性并不是真正意义上的非线性属性,仅是对某个功能或功能组的对应属性进行百分比提升,最终的提升值还是算如线性属性层
-                    
-                非线性层级属性: 即整体层级百分比增加属性
-                    直接以当前属性为基值进行属性百分比提升
-            功能属性层级二、
-            ...
-              
-            4.固定属性:
-                    附加的固定值属性,该属性在非线性计算之后,直接累加,不算入非线性属性的基值
+        buff层级:
+            1.不算战力
+            2.先算百分比加成再加固定值
             
-            5.计算以上所有属性的战斗力
-            
-            6.buff层级:
-                    固定值buff, 直接累加数值
-                    百分比buff: 真正的最最最外层,直接按百分比提升对应的属性值
-                    注:该层提升的属性不算战斗力
+                    属性算法:
+                       模块固定属性    = 功能点A固定值 + 功能点B固定值 + ...
+                        固定总属性        = 模块A固定值 + 模块B固定值 + ...
+                        无buff总属性  = 固定总属性 + 内部百分比加成值 + 交叉百分比加成  + 固定总属性百分比加成   + 技能百分比对固定属性加成  + 技能固定值
+                        含buff总属性  = 无buff总属性 * buff百分比加成  +  buff固定值
         '''
         curPlayer = self.__Player
         
@@ -4273,7 +4267,7 @@
         notAttrList = [{} for _ in range(4)]
         
         # 1.初始化人物各项状态及属性
-        self.InitPlayerState()        
+        self.InitPlayerState()
         #self.PrintAttr(curPlayer, "初始化")
         
         # 功能属性层级一...
@@ -4281,21 +4275,19 @@
         #    2.1 获取所有功能计算点计算的属性值, 统计基础属性累加
         baseAttrDict = {}
         baseAttrNolineDict = {}
-        funcAttrInfoList = []
+        funcAttrLen = len(ChConfig.CalcAttrFuncList)
+        funcAttrInfoList = [[{} for _ in range(4)]] * funcAttrLen
+        funcInsidePerAttrList = [{}] * funcAttrLen # 功能内部百分比附加属性
         for funcIndex in ChConfig.CalcAttrFuncList:
-            if funcIndex in ChConfig.CalcAttrExFuncListNoFightPower:
-                # 此类功能不算战斗力
-                funcAttrInfoList.append([{} for _ in range(4)]) # 只为防止后面访问列表元素时不越界, 功能点分类可无视编号顺序
-                continue
-            
             # 基础属性等功能汇总完后统一刷新,因为各功能可能会加属性点数
             if funcIndex in [ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.Def_CalcAttrFunc_LingGenQuailty]:
-                funcAttrInfoList.append([{} for _ in range(4)])
                 continue
-            attrInfo = GetCalcAttrListValue(curPlayer, funcIndex)
-            if attrInfo != notAttrList:
-                GameWorld.DebugLog("功能点属性: %s, %s" % (funcIndex, attrInfo))
-            funcAttrInfoList.append(attrInfo)
+            attrInfo, insidePerAttrDict = GetCalcAttrListValue(curPlayer, funcIndex)
+            if attrInfo == notAttrList and not insidePerAttrDict:
+                continue
+            GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (funcIndex, attrInfo, insidePerAttrDict))
+            funcAttrInfoList[funcIndex] = attrInfo
+            funcInsidePerAttrList[funcIndex] = insidePerAttrDict
             # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
             AddAttrDictValue(baseAttrDict, attrInfo[ChConfig.CalcAttr_Base])
             AddAttrDictValue(baseAttrNolineDict, attrInfo[ChConfig.CalcAttr_BaseNoline])
@@ -4309,12 +4301,14 @@
             
         # 功能有加基础属性值,这里再重新刷新一下基础属性, 基础属性会影响战斗属性, 每次都刷新角色基础属性
         self.CalcRoleBaseAttr(curPlayer)
-        roleBaseAttrInfo = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)
-        lingGenQualityAttrList = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)
+        roleBaseAttrInfo, roleInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)
+        lingGenQualityAttrList, lingGenQualityInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)
         funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleBaseAttrInfo
+        funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleInsidePerAttrDict
         funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] =  lingGenQualityAttrList
-        GameWorld.DebugLog("功能点属性: %s, %s" % (ChConfig.Def_CalcAttrFunc_RoleBase, roleBaseAttrInfo))
-        GameWorld.DebugLog("功能点属性: %s, %s" % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList))
+        funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] =  lingGenQualityInsidePerAttrDict
+        GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (ChConfig.Def_CalcAttrFunc_RoleBase, roleBaseAttrInfo, roleInsidePerAttrDict))
+        GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList, lingGenQualityInsidePerAttrDict))
         
         #self.PrintAttr(curPlayer, "基础后")
         
@@ -4341,7 +4335,7 @@
                            ChConfig.TYPE_Calc_WingHPPer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Wing],
                            }
         #    3.2 统计各功能之间非线性属性交叉影响累加
-        funcAddAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
+        funcCrossAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
         for i, funcAttrList in enumerate(funcAttrInfoList):
             battleNoLineAttrDict = funcAttrList[ChConfig.CalcAttr_BattleNoline] # 暂写死只取战斗非线性的
             if not battleNoLineAttrDict:
@@ -4367,80 +4361,90 @@
             if addAttrDict:
                 # 增加的数值统计到百分比属性所属功能点
                 # 如符文有个武器攻击百分比增加属性,增加的数值属于符文功能,不属于武器功能点的,只是基值使用了武器攻击     
-                funcAddAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
+                funcCrossAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
                 
-        GameWorld.DebugLog("交叉影响属性: %s" % funcAddAttrPerInfoDict)
-        #        交叉提升的属性值累加到对应功能上
-        for i, addAttrDict in funcAddAttrPerInfoDict.items():
-            # 这里累加的是到相同的功能点,直接累加,不做衰减处理
-            GameWorld.AddDictValue(funcAttrInfoList[i][ChConfig.CalcAttr_Battle], addAttrDict)
+        GameWorld.DebugLog("交叉影响属性: %s" % funcCrossAttrPerInfoDict)
+        
+        #    3.3 统计所有功能固定属性影响累加
+        allFixAttrDict = {} # 固定属性层级总属性基值
+        for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
+            # 技能模块不算计入功能固定属性、不计战力
+            if funcIndex in ChConfig.CalcAttrFuncSkillList:
+                continue
+            AddAttrDictValue(allFixAttrDict, funcAttrList[ChConfig.CalcAttr_Battle])
             
-        #    3.3 累加以上已统计的所有属性(视为整体层级,即非线性属性所需要的基值)
-        allFuncAttrIndexList = []
-        allFuncAttrInfoList, attrInfoExList = [], [] # 整理功能层级属性信息列表, 额外附加固定值属性信息列表
-        for funcIndex, attrInfo in enumerate(funcAttrInfoList):
-            if funcIndex not in ChConfig.CalcAttrExFuncList:
-                allFuncAttrIndexList.append(funcIndex)
-                allFuncAttrInfoList.append(attrInfo)
-            else:
-                attrInfoExList.append(attrInfo)
-        allAttrList = AddAttrListValue(allFuncAttrInfoList) # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
-        GameWorld.DebugLog("整体层级功能点: %s" % allFuncAttrIndexList)
-        GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList)
-        
-        #        第二层级属性
-        allAttrExList = AddAttrListValue(attrInfoExList)
-        GameWorld.DebugLog("附加层级功能点: %s" % ChConfig.CalcAttrExFuncList)
-        GameWorld.DebugLog("附加层级线性属性: %s" % allAttrExList)
-        
-        #        初始化各功能点战斗力计算模块
-        mfpObjAttrDict = {}
-        for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
-            if len(attrFuncIndexList) == 1:
-                mfpAttrList = funcAttrInfoList[attrFuncIndexList[0]]
-            else:
-                mfpAttrList = AddAttrListValue([funcAttrInfoList[i] for i in attrFuncIndexList])
+        fixAttrPerAddExDict = {} # 固定总属性百分比影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
+        for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
+            fixAddPerDict = funcAttrList[ChConfig.CalcAttr_BattleNoline]
+            if not fixAddPerDict:
+                continue
+            addValueExDict = {}
+            for fixAttrType, addPer in fixAddPerDict.items():
+                if fixAttrType not in allFixAttrDict:
+                    continue
+                curFixValue = allFixAttrDict[fixAttrType]
+                addValueEx = int(curFixValue * addPer / 10000.0)
+                addValueExDict[fixAttrType] = addValueEx
+            fixAttrPerAddExDict[funcIndex] = addValueExDict
             
-            #GameWorld.DebugLog("模块线性属性: mfpType=%s,%s" % (mfpType, mfpAttrList))
-            mfpObj = self.GetModuleFightPowerObj(mfpType)
-            mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
-            mfpObjAttrDict[mfpObj] = mfpAttrList[ChConfig.CalcAttr_BattleNoline]
-            
-        #         不加战力,但是有算属性的功能属性,如一些被动技能(战力在技能表里配置)
-        skillNoFightPowerAttrList = [{} for _ in range(4)]
-        SkillShell.CalcPassiveAttr_Effect(curPlayer, skillNoFightPowerAttrList)  # 属性类技能与buff同层
-        for funcIndex in ChConfig.CalcAttrExFuncListNoFightPower:
-            skillNoFightPowerAttrList = AddAttrListValue([skillNoFightPowerAttrList, GetCalcAttrListValue(curPlayer, funcIndex)])    
-        GameWorld.DebugLog("无战力被动属性: %s" % skillNoFightPowerAttrList)
+        GameWorld.DebugLog("固定属性总和: %s" % allFixAttrDict)
+        GameWorld.DebugLog("固定百分比附加属性: %s" % fixAttrPerAddExDict)
         
-        # 总属性 = 整体功能层级固定值*(1+功能层级百分比+特殊固定层级百分比+永久技能层级百分比)+特殊固定层级固定值+永久技能层级固定值
-        allNoLineAttrDict = {}
-        AddAttrDictValue(allNoLineAttrDict, allAttrList[ChConfig.CalcAttr_BattleNoline])
-        AddAttrDictValue(allNoLineAttrDict, allAttrExList[ChConfig.CalcAttr_BattleNoline])
-        AddAttrDictValue(allNoLineAttrDict, skillNoFightPowerAttrList[ChConfig.CalcAttr_BattleNoline])
-        GameWorld.DebugLog("最终非线性属性: %s" % allNoLineAttrDict)
-        
-        #        整体层级属性增加到玩家身上
-        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, allAttrList[ChConfig.CalcAttr_Battle])
-        #self.PrintAttr(curPlayer, "整体线")
-        CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, allNoLineAttrDict, mfpObjAttrDict)
-        #self.PrintAttr(curPlayer, "整非线")
-        
-        
-        # 4.计算战力, 需在计算buff层之前计算
+        # 4. 计算属性及战力, 需在计算buff层之前计算
         curLV = curPlayer.GetLV()
         fpParam = IpyGameDataPY.GetIpyGameData("FightPowerParam", curLV)
         mfpDict = {} # 模块战斗力
-        for mfpObj in mfpObjAttrDict.keys():
-            mfp = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam)
-            mfp += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
-            mfp += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
-            mfpDict[mfpObj.mfpType] = mfp
+        for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
+            mfpAttrList = [{} for _ in range(4)]
+            mfpAttrExDict = {}
+            for funcIndex in attrFuncIndexList:
+                funcAttrList = funcAttrInfoList[funcIndex]
+                funcInsidePerAttrDict = funcInsidePerAttrList[funcIndex] # 功能点内部百分比加成属性
+                funcCrossPerAttrDict = funcCrossAttrPerInfoDict.get(funcIndex, {}) # 功能点交叉百分比加成属性
+                fixPerAttrDict = fixAttrPerAddExDict.get(funcIndex, {}) # 功能总固定属性百分比加成属性
+                
+                CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcAttrList[ChConfig.CalcAttr_Battle])
+                CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcInsidePerAttrDict)
+                CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcCrossPerAttrDict)
+                CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, fixPerAttrDict)
+                # 不算战力的
+                if funcIndex in ChConfig.CalcAttrFuncNoFightPowerList or funcIndex in ChConfig.CalcAttrFuncSkillList:
+                    continue
+                mfpAttrList = AddAttrListValue([mfpAttrList, funcAttrList])
+                AddAttrDictValue(mfpAttrExDict, funcInsidePerAttrDict)
+                AddAttrDictValue(mfpAttrExDict, funcCrossPerAttrDict)
+                AddAttrDictValue(mfpAttrExDict, fixPerAttrDict)
+                
+            mfpObj = self.GetModuleFightPowerObj(mfpType)
+            mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
+            for attrIndex, value in mfpAttrExDict.items():
+                mfpObj.AddCalcMFPAttr(attrIndex, value)
+                
+            mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam)
+            mfpSkill = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
+            mfpEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
+            mfpTotal = mfpValue + mfpSkill + mfpEx
+            mfpDict[mfpObj.mfpType] = mfpTotal
             
-        #        最后在附加上特殊附加层级线性属性、永久技能层级固定值
-        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, allAttrExList[ChConfig.CalcAttr_Battle])
-        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillNoFightPowerAttrList[ChConfig.CalcAttr_Battle])
-        #self.PrintAttr(curPlayer, "固定层级")
+        #GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList)
+        
+        # 5.被动技能附加属性,不算战力
+        passiveSkillAttrList = [{} for _ in range(4)]
+        SkillShell.CalcPassiveAttr_Effect(curPlayer, passiveSkillAttrList)  # 属性类技能与buff同层
+        for funcIndex in ChConfig.CalcAttrFuncSkillList:
+            passiveSkillAttrList = AddAttrListValue([passiveSkillAttrList, funcAttrInfoList[funcIndex]])    
+        GameWorld.DebugLog("无战力被动属性: %s" % passiveSkillAttrList)
+        
+        skillFixAttrExDict = {}
+        skillFixAddPerDict = passiveSkillAttrList[ChConfig.CalcAttr_BattleNoline]
+        for fixAttrType, addPer in skillFixAddPerDict.items():
+            if fixAttrType not in allFixAttrDict:
+                continue
+            curFixValue = allFixAttrDict[fixAttrType]
+            addValueEx = int(curFixValue * addPer / 10000.0)
+            skillFixAttrExDict[fixAttrType] = addValueEx
+        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, passiveSkillAttrList[ChConfig.CalcAttr_Battle])
+        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillFixAttrExDict)
         
         #护盾值刷新
         self.__RefreshMaxProDef(beforeMaxProDef)
@@ -6083,6 +6087,19 @@
         GameWorld.AddDictValue(attrDict, {i:value})
     return
 
+def CalcAttrDict_TypeEx(attrType, value, allAttrDict):
+    ## 统计玩家属性,累加
+    if value == 0:
+        return
+    
+    #[属性索引, 是否基础属性,(非)线性]
+    attrInfo = ChConfig.ItemEffect_AttrDict.get(attrType, [])
+    if attrInfo == []:
+        return
+    for i in attrInfo[0]:
+        GameWorld.AddDictValue(allAttrDict, {i:value})
+    return
+
 #===============================================================================
 # CalcAttr_Base,
 # CalcAttr_BaseNoline,
@@ -6574,7 +6591,7 @@
 #-------------------------------------------------------------------------------
 
 ## 设置保存功能事先计算好的属性值
-def SetCalcAttrListValue(curPlayer, funcIndex, allAttrList):
+def SetCalcAttrListValue(curPlayer, funcIndex, allAttrList, insidePerAttrDict={}):
     # 设置值之前先清空重置
     ClearCalcAttrListValue(curPlayer, funcIndex)
     
@@ -6594,32 +6611,34 @@
     if playerID not in PyGameData.g_playerFuncAttrDict:
         PyGameData.g_playerFuncAttrDict[playerID] = {}
     funcAttrDict = PyGameData.g_playerFuncAttrDict[playerID]
-    funcAttrDict[funcIndex] = allAttrList
-    #GameWorld.DebugLog("保存功能点属性: funcIndex=%s, %s" % (funcIndex, allAttrList))
+    funcAttrDict[funcIndex] = [allAttrList, insidePerAttrDict]
+    #GameWorld.DebugLog("保存功能点属性: funcIndex=%s, %s, %s" % (funcIndex, allAttrList, insidePerAttrDict))
     return
 
 def GetCalcAttrListValue(curPlayer, funcIndex):
     ## 获取功能点预先计算的所加属性值
     attrList = [{} for _ in range(4)]
+    insidePerAttrDict = {}
     if isinstance(funcIndex, int):
         funcIndexList = [funcIndex]
     elif isinstance(funcIndex, list):
         funcIndexList = funcIndex
     else:
-        return attrList
+        return attrList, insidePerAttrDict
     
     playerID = curPlayer.GetPlayerID()
     if playerID not in PyGameData.g_playerFuncAttrDict:
-        return attrList
+        return attrList, insidePerAttrDict
     funcAttrDict = PyGameData.g_playerFuncAttrDict[playerID]
     for funcIndex in funcIndexList:
         if funcIndex not in funcAttrDict:
             continue
-        funcAttrList = funcAttrDict[funcIndex]
+        funcAttrList, funcInsidePerAttrDict = funcAttrDict[funcIndex]
         for i, attrDict in enumerate(attrList):
             curAttrDict = funcAttrList[i]
             AddAttrDictValue(attrDict, curAttrDict)
-    return attrList
+        AddAttrDictValue(insidePerAttrDict, funcInsidePerAttrDict)
+    return attrList, insidePerAttrDict
 
 ## 重置缓存
 def ClearCalcAttrListValue(curPlayer, funcIndex):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 438b8fc..5ffca38 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1302,10 +1302,10 @@
 )=range(5)
 
 # 战斗力模块类型
-Def_MFPType_Max = 44
+Def_MFPType_Max = 26
 ModuleFightPowerTypeList = (
 Def_MFPType_Role, # 角色 0
-Def_MFPType_Equip, # 装备(基本装备位) 1  - 废弃
+Def_MFPType_Equip, # 装备(装备本身) 1
 Def_MFPType_Plus, # 强化 2
 Def_MFPType_Stone, # 宝石 3
 Def_MFPType_LingGen, # 灵根 4
@@ -1317,7 +1317,7 @@
 Def_MFPType_GodWeapon, # 神兵 10
 Def_MFPType_Dienstgrad, #称号 11
 Def_MFPType_Rune, # 符印 12
-Def_MFPType_13, #
+Def_MFPType_Star, # 升星 13
 Def_MFPType_MagicWeapon1, # 人族法宝 14
 Def_MFPType_StoveYao, # 炼丹炉丹药 15
 Def_MFPType_MagicWeapon2, # 魔族法宝 16
@@ -1329,27 +1329,7 @@
 Def_MFPType_GatherSoul, # 聚魂 22
 Def_MFPType_MagicWeapon4, # 王者法宝 23
 Def_MFPType_Coat, # 时装 24
-Def_MFPType_ZhuXian, # 诛仙 25  - 废弃
-Def_MFPType_Equip1, # 境界装备1阶 26
-Def_MFPType_Equip2, # 境界装备2阶 27
-Def_MFPType_Equip3, # 境界装备3阶 28
-Def_MFPType_Equip4, # 境界装备4阶 29
-Def_MFPType_Equip5, # 境界装备5阶 30
-Def_MFPType_Equip6, # 境界装备6阶 31
-Def_MFPType_Equip7, # 境界装备7阶 32
-Def_MFPType_Equip8, # 境界装备8阶 33
-Def_MFPType_Equip9, # 境界装备9阶 34
-Def_MFPType_Equip10, # 境界装备10阶 35
-Def_MFPType_Equip11, # 境界装备11阶 36
-Def_MFPType_Equip12, # 境界装备12阶 37
-Def_MFPType_Equip13, # 境界装备13阶 38
-Def_MFPType_Equip14, # 境界装备14阶 39
-Def_MFPType_Equip15, # 境界装备15阶 40
 Def_MFPType_Other, # 其他
-
-#以下暂时没用到,改时再处理
-Def_MFPType_Passive, #被动技能
-Def_MFPType_ClothesCoat, #衣服时装
 ) = range(Def_MFPType_Max)
 
 #事件汇报用户行为-----------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
index ca8511d..08ba180 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
@@ -27,7 +27,7 @@
 #  @param curPlayer 当前玩家
 #  @param effectDict 效果列表
 #  @return None
-def ChangePlayerAttrInNoLineEffectList(curPlayer, effectDict, mfpObjAttrDict=None, isBuffAttr=False):
+def ChangePlayerAttrInNoLineEffectList(curPlayer, effectDict, isBuffAttr=False):
     for key, value in effectDict.items():
         if value == 0:
             continue
@@ -64,15 +64,6 @@
 ##            # 衰减算法
 ##            EffGetSet.SetValueByEffIndex(curPlayer, key, tmpValue)
 #        else:
-        if mfpObjAttrDict:
-            for mfpObj, attrDict in mfpObjAttrDict.items():
-                #if not attrDict.has_key(key): # 如果该模块没有增加该属性,则跳过
-                if key not in attrDict: # 如果该模块没有增加该属性,则跳过
-                    continue
-                curMValue = attrDict[key]
-                curMAddValue = curValue * curMValue / ChConfig.Def_MaxRateValue # 相对增加值
-                mfpObj.AddCalcMFPAttr(key, curMAddValue) # 给对应模块累加上非线性增加的战斗属性值
-                
         EffGetSet.SetValueByEffIndex(curPlayer, key, curValue * (ChConfig.Def_MaxRateValue + value) / ChConfig.Def_MaxRateValue)
     
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_514.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_514.py
index c9ddba4..9c9c749 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_514.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_514.py
@@ -21,22 +21,24 @@
 
 
 def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return
-    suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Normal, ChConfig.EquipGroupType_Armor)
-    if not suitsLV:
-        return
-    attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
-    attrType = curEffect.GetEffectValue(1)
-    attrTypeList = [attrType]
-    # 攻击力有最大最小 特殊处理
-    if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
-        attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
-    for tmpType in attrTypeList:
-        value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
-        calcDict[tmpType] = calcDict.get(tmpType, 0) + value
-        
+    # 境界装备改版,暂取消
     return
+#    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
+#        return
+#    suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Normal, ChConfig.EquipGroupType_Armor)
+#    if not suitsLV:
+#        return
+#    attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
+#    attrType = curEffect.GetEffectValue(1)
+#    attrTypeList = [attrType]
+#    # 攻击力有最大最小 特殊处理
+#    if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
+#        attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
+#    for tmpType in attrTypeList:
+#        value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
+#        calcDict[tmpType] = calcDict.get(tmpType, 0) + value
+#        
+#    return
 
 
 ## 返回buff类型,线性与否
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_515.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_515.py
index f3af3eb..7c1e664 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_515.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_515.py
@@ -21,22 +21,24 @@
 
 
 def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return
-    suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Plus, ChConfig.EquipGroupType_Armor)
-    if not suitsLV:
-        return
-    attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
-    attrType = curEffect.GetEffectValue(1)
-    attrTypeList = [attrType]
-    # 攻击力有最大最小 特殊处理
-    if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
-        attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
-    for tmpType in attrTypeList:
-        value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
-        calcDict[tmpType] = calcDict.get(tmpType, 0) + value
-        
+    # 境界装备改版,暂取消
     return
+#    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
+#        return
+#    suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Plus, ChConfig.EquipGroupType_Armor)
+#    if not suitsLV:
+#        return
+#    attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
+#    attrType = curEffect.GetEffectValue(1)
+#    attrTypeList = [attrType]
+#    # 攻击力有最大最小 特殊处理
+#    if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
+#        attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
+#    for tmpType in attrTypeList:
+#        value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
+#        calcDict[tmpType] = calcDict.get(tmpType, 0) + value
+#        
+#    return
 
 
 ## 返回buff类型,线性与否
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py
index 234c943..a113497 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py
@@ -24,7 +24,7 @@
     if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
         return
     
-    attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_GodWeapon)
+    attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_GodWeapon)[0]
     
     value = attrList[2].get(curEffect.GetEffectValue(0), 0)*curEffect.GetEffectValue(1)/ChConfig.Def_MaxRateValue
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
index e9b5042..d1ac624 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
@@ -22,7 +22,7 @@
 #  @return None
 def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
     attrType = curEffect.GetEffectValue(1)
-    attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])
+    attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])[0]
     value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
 
     calcDict[attrType] = calcDict.get(attrType, 0) + value
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
index 5a26f5d..122cc24 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
@@ -20,7 +20,7 @@
 
 
 def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
-    attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_GodWeapon)
+    attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_GodWeapon)[0]
     
     hp = attrList[2].get(ChConfig.TYPE_Calc_AttrMaxHP, 0)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py
index b53c6c5..f46ccd0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4511.py
@@ -21,5 +21,5 @@
 
 
 def GetValue(attacker, defender, passiveEffect):
-    attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_Horse)
+    attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_Horse)[0]
     return int(attrList[2].get(ChConfig.TYPE_Calc_AttrATKMax, 0)*passiveEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)

--
Gitblit v1.8.0