From f198885f31c9c7eb19eb28adce562e39e64d581c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 18 七月 2025 16:23:11 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(属性计算、战斗力计算;新角色初始给默认装备、默认阵容武将;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py                     |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                             |  128 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini                                             |   18 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py                                 | 1136 --------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py                          |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                                  |   52 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                              |   88 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py                                  |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py                     |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py                       |   15 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                                   |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py                            |   14 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py      |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py                            |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                |  114 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py                            |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                              |   99 
 PySysDB/PySysDBPY.h                                                                                                 |   47 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                         | 2081 ---------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py                     |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py                           |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py                           |  536 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                  |   38 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py                               |   72 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py   |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py                           |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py              |  273 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py                           |  348 --
 /dev/null                                                                                                           |   95 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py                              |  290 --
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py                            |  180 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py                          |  619 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                          |   12 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py                      |  188 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py                               |   31 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py                            |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                                |  145 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py   |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py                                      |  311 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py                          |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py                    |   15 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py                 |  229 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py                        |   62 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                     |  536 +--
 46 files changed, 1,549 insertions(+), 6,290 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 513a1e7..dd16eba 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -40,6 +40,7 @@
 	WORD		DefInheritPer;	//防御继承
 	WORD		HPInheritPer;	//生命继承
 	dict		BatAttrDict;	//其他战斗属性字典 {"属性ID":值, ...}
+	list		FetterIDList;	//羁绊ID列表
 };
 
 //武将星级天赋表
@@ -80,6 +81,15 @@
 {
 	WORD		_FetterID;	//羁绊ID
 	list		HeroIDList;	// 武将ID组合列表
+	list		AttrIDList;	// 属性ID列表
+	list		AttrValueList;	// 属性值列表
+};
+
+//阵容光环表
+struct	HeroLineupHalo
+{
+	WORD		_Country;	//国家
+	BYTE		NeedHeroCount;	// 所需武将数
 	list		AttrIDList;	// 属性ID列表
 	list		AttrValueList;	// 属性值列表
 };
@@ -133,6 +143,13 @@
 	DWORD		_Quality;	//品质
 	DWORD		_HeroLV;	//武将等级
 	list		UPCostItem;	// 升级到下级消耗道具
+};
+
+//属性条目表
+struct	PlayerAttr
+{
+	DWORD		_AttrID;	//属性ID
+	char		Parameter;	//属性名、参数名
 };
 
 //主线章节表
@@ -874,33 +891,9 @@
 {
 	WORD		_LV;	//玩家等级
 	DWORD		Exp;	//升级所需经验
-	BYTE		TalentPoint;	//等级获得的天赋点
-	DWORD		ReExp;	//等级经验效率(second)
-	DWORD		ReMaxHP;	//生命
-	DWORD		ReAtk;	//攻击
-	DWORD		ReDef;	//防御
-	DWORD		ReHit;	//命中
-	DWORD		ReMiss;	//闪避
-	DWORD		ReAtkSpeed;	//攻速
-	DWORD		ReSkillAtkRate;	//技能伤害比例
-	DWORD		ReDamagePer;	//增加伤害
-	DWORD		ReDamReduce;	//减少伤害
-	DWORD		ReIgnoreDefRate;	//无视防御比例
-	DWORD		ReLuckyHitRate;	//会心一击率
-	DWORD		ReLuckyHit;	//会心一击伤害
-	DWORD		ReBleedDamage;	//流血伤害增加
-	DWORD		ReIceAtk;	//真实伤害
-	DWORD		ReIceDef;	//真实抵御
-	DWORD		RePetAtk;	//灵宠攻击
-	DWORD		RePetSkillAtkRate;	//灵宠技能
-	DWORD		RePetDamPer;	//灵宠伤害增加
-	DWORD		ReFinalHurt;	//固定伤害增加
-	DWORD		ReFinalHurtReduce;	//固定伤害减少
-	DWORD		RePotionReply;	//血瓶恢复量
-	DWORD		RePotionCD;	//血瓶CD
-	DWORD		AttackEff;	//挂机效率
-	DWORD		ReFightPower;	//战斗力
-	DWORD		IceLodeFightPower;	//冰晶矿脉扫荡战斗力
+	DWORD		MaxHP;	//生命
+	DWORD		Atk;	//攻击
+	DWORD		Def;	//防御
 };
 
 //特殊地图玩家属性公式表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 47e278f..b3b91b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -668,18 +668,6 @@
 PacketSubCMD_25=0x20
 PacketCallFunc_25=OnMoneyExchange
 
-;购买相关的
-[BuySomething]
-ScriptName = Event\EventSrc\Operate_PlayerBuyZhenQi.py
-Writer = xcc
-Releaser = xcc
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1 = 0xA5
-PacketSubCMD_1 = 0x30
-PacketCallFunc_1 = OnPlayerBuySomething
-
 ;签到
 [PlayerSignDay]
 ScriptName = Player\PlayerSignDay.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
index a61f4ff..6aa7b63 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -441,24 +441,6 @@
 PacketSubCMD_11=0x21
 PacketCallFunc_11=GetBackItemInFabao
 
-
-;装备
-[Equip]
-ScriptName = Item\ChEquip.py
-Writer = eggxp
-Releaser = eggxp
-RegType = 0
-RegisterPackCount = 3
-PacketCMD_1=0x7
-PacketSubCMD_1=0x3
-PacketCallFunc_1=PlayerEquipItem
-PacketCMD_2=0x7
-PacketSubCMD_2=0x4
-PacketCallFunc_2=PlayerUnEquip
-PacketCMD_3=0x3
-PacketSubCMD_3=0x2F
-PacketCallFunc_3=RequestEquipShowHide
-
 ;事件
 [Event]
 ScriptName = Event\EventShell.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 d4639ce..4f4bdcb 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
@@ -31,7 +31,6 @@
 import PlayerControl
 import NPCCommon
 import SkillCommon
-import EffGetSet
 import FBLogic
 import ReadChConfig
 import PetControl
@@ -374,15 +373,6 @@
     AddHurtValue(defender, attacker.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, 1)
     return
 
-## 被攻击者被动buff触发
-#  @param curTagPlayer 被攻击者
-#  @param tick 当前时间
-#  @param isSuperHit 暴击
-#  @return None
-#  @remarks 函数详细说明.
-def DefenderSpringBuff(curTagPlayer, tick, isSuperHit=False):
-    return
-   
 #---------------------------------------------------------------------
 
 def GetBattleRelationType(attacker, defender):
@@ -470,44 +460,6 @@
     
     return ChConfig.AtkDistType_Short
 
-## 输入基础数值,返回增强后的值 - 技能加强
-#  @param value 基础值
-#  @param skill 技能
-#  @return 增强后的值
-#  @remarks 函数详细说明.
-def GetEnhanceValue(value, skill):
-    per = skill.GetEffect(0).GetEffectValue(0)
-    eff = skill.GetEffect(0).GetEffectValue(1)
-    #GameWorld.Log("被动 -> 自身属性,技能ID = %s,技能增强 = %s,附加 = %s , 基础值 = %s"%(skill.GetSkillName(),per,eff,value))
-    return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础数值,返回增强后的值 (LV)- 效果加强
-#  @param value 基础值
-#  @param eff 效果
-#  @return 增强后的值
-#  @remarks 函数详细说明.
-def GetEnhanceValue_Eff(value, eff):
-    per = eff.GetEffectValue(0)
-    eff = eff.GetEffectValue(1)
-    #GameWorld.Log("value = %s,per = %s,erf = %s"%(value,per,eff))
-    return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础效果值,(玩家索引) -> 技能增强
-#  @param curPlayer 当前玩家
-#  @param curEffect 当前效果
-#  @return 增强后的值
-#  @remarks 函数详细说明.
-def GetEnhanceIndexValue_Eff(curPlayer, curEffect):
-    index = curEffect.GetEffectValue(0)
-    skillPer = curEffect.GetEffectValue(1)
-    effect = curEffect.GetEffectValue(2)
-    maxValue = EffGetSet.GetValueByEffIndex(curPlayer, index)
-    #GameWorld.Log("-----%s,%s,%s,%s"%(index,skillPer,effect,maxValue))
-    
-    if maxValue == None:
-        return 0
-    
-    return max(maxValue * skillPer / ChConfig.Def_MaxRateValue + effect , 1)
 #--------------------------------------------------------------------------
 ## 设置玩家进入战斗状态
 #  @param defender 当前玩家(被攻击了)
@@ -1379,25 +1331,6 @@
             
     return hurtType, hurtTypeResultDict
 
-
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
-    ''' 判断伤害类型是否发生 - 会心一击
-    @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
-    '''
-    if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_LuckyHit):
-        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
-    
-    aLuckyHitRate = atkObj.GetLuckyHitRate()
-    dLuckyHitRateReduce = PlayerControl.GetLuckyHitRateReduce(defObj)
-    
-
-    atkLuckyHitRate = eval(ReadChConfig.GetChConfig("CalcLuckyHitRate"))
-    if atkLuckyHitRate <= 0:
-        return
-    if GameWorld.CanHappen(atkLuckyHitRate):
-        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
-    return
-
 def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 暴击
     @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
@@ -1423,22 +1356,12 @@
     ''' 判断伤害类型是否发生 - 防守方抵御
     @return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
     '''
-    chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
-    if not chanceDefPer:
-        return
-    if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
-        return True, 0, chanceDefPer
-    return
-
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
-#    """诛仙一击"""
-#    rate = PlayerControl.GetZhuXianRate(atkObj)
-#    if not rate:
+#    chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
+#    if not chanceDefPer:
 #        return
-#    
-#    if GameWorld.CanHappen(rate):
-#        return True, PlayerControl.GetZhuXianHurtPer(atkObj), 0
-#    return
+#    if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
+#        return True, 0, chanceDefPer
+    return
 
 # 致命一击
 def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
@@ -1483,21 +1406,21 @@
     if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
         reducePer = SkillCommon.GetSkillReducePerByID(defObj, skillTypeID)
         
-        #根据防守方职业 计算攻击方伤害加成
-        if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
-            addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
-        elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
-            addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
-        elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
-            addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
-        
-        #根据攻击方职业 计算防守方伤害减免
-        if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
-            reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
-        elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
-            reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
-        elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
-            reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
+#        #根据防守方职业 计算攻击方伤害加成
+#        if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+#            addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
+#        elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+#            addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
+#        elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+#            addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
+#        
+#        #根据攻击方职业 计算防守方伤害减免
+#        if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+#            reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
+#        elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+#            reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
+#        elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+#            reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
         
     if addPer or reducePer:
         addSkillPer = addPer - reducePer
@@ -1620,24 +1543,25 @@
     
 # 攻击时防守方神兵护盾的处理
 def CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick):
-    if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return hurtValue
-    
-    if not CheckIsPlayerOnwer(atkObj):
-        return hurtValue
-
-    curProDef = PlayerControl.GetProDef(defObj)
-    if not curProDef:
-        return hurtValue
-    
-    absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
-    
-    PlayerControl.SetProDef(defObj, curProDef - absortValue)
-    
-    # 被动技能触发
-    defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
-    PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
-    return hurtValue - absortValue
+    return hurtValue
+#    if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
+#        return hurtValue
+#    
+#    if not CheckIsPlayerOnwer(atkObj):
+#        return hurtValue
+#
+#    curProDef = PlayerControl.GetProDef(defObj)
+#    if not curProDef:
+#        return hurtValue
+#    
+#    absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
+#    
+#    PlayerControl.SetProDef(defObj, curProDef - absortValue)
+#    
+#    # 被动技能触发
+#    defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
+#    PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
+#    return hurtValue - absortValue
 
 
 # 设置玩家一次主动型攻击中的第一个防御者
@@ -1646,7 +1570,7 @@
         return
     
     if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
-                                          ChConfig.Def_SkillFuncType_TurnNormaAttack]:
+                                          ChConfig.Def_SkillFuncType_TurnNormaSkill]:
         return
     
     if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
@@ -1817,20 +1741,20 @@
     fightPowerMax = ipyData.GetFightPowerMax()
     everyFightPower = ipyData.GetEveryFightPower()
     everyFightPowerLostHPEx = ipyData.GetEveryFightPowerLostHPEx()
-    if fightPowerMinByLV and fightPowerMin:
-        npcLV = NPCCommon.GetNPCLV(curNPC)
-        playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
-        if not playerCurLVIpyData:
-            return
-        ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
-        reRate = ReFightPower / float(fightPowerMin)
-        #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s" 
-        #                   % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
-        fightPowerMin = ReFightPower
-        fightPowerMax = int(fightPowerMax * reRate)
-        everyFightPower = int(everyFightPower * reRate)
-        #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s" 
-        #                   % (fightPowerMin, fightPowerMax, everyFightPower))
+    #if fightPowerMinByLV and fightPowerMin:
+    #    npcLV = NPCCommon.GetNPCLV(curNPC)
+    #    playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
+    #    if not playerCurLVIpyData:
+    #        return
+    #   ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
+    #    reRate = ReFightPower / float(fightPowerMin)
+    #    #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s" 
+    #    #                   % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
+    #    fightPowerMin = ReFightPower
+    #    fightPowerMax = int(fightPowerMax * reRate)
+    #    everyFightPower = int(everyFightPower * reRate)
+    #    #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s" 
+    #    #                   % (fightPowerMin, fightPowerMax, everyFightPower))
         
     effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower) \
                     + curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx) * ChConfig.Def_PerPointValue
@@ -2035,7 +1959,7 @@
     
     turnFightPosInfo = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo)
     mustHit = False
-    if SkillCommon.isXPSkill(curSkill):
+    if SkillCommon.isAngerSkill(curSkill):
         mustHit = True
         GameWorld.DebugLog("        XP必命中")
         angerOverflow = max(GameObj.GetXP(atkObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
@@ -2096,13 +2020,13 @@
     atkSkillPer = ChangeSkillHurtPer(atkObj, defObj, curSkill, atkSkillPer)
     
     # --- 新增普通攻击的数值和技能攻击的数值,根据类型各自计算
-    if atkObjType == IPY_GameWorld.gotPlayer:
-        if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaAttack:
-            atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
-            atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
-        elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
-            atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
-            atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
+    #if atkObjType == IPY_GameWorld.gotPlayer:
+    #    if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill:
+    #        atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
+    #        atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
+    #    elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
+    #        atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
+    #        atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
           
     atkSkillValue += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
     atkSkillValue += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
@@ -2149,19 +2073,19 @@
     if atkObjType == IPY_GameWorld.gotPlayer:
         aIgnoreDefRate = atkObj.GetIgnoreDefRate()  # 无视防御比率
         aSkillAtkRate = atkObj.GetSkillAtkRate()    # 技能攻击力加成
-        aDamagePVP = PlayerControl.GetDamagePVP(atkObj)     # PVP固定伤害
-        aDamagePVE = PlayerControl.GetDamagePVE(atkObj)     # PVE固定伤害
+        aDamagePVP = 0 #PlayerControl.GetDamagePVP(atkObj)     # PVP固定伤害
+        aDamagePVE = 0 #PlayerControl.GetDamagePVE(atkObj)     # PVE固定伤害
         
-        aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj)     # PVE伤害加成
-        aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj)     # 外层PVP伤害加成
+        aNPCHurtAddPer = 0 #PlayerControl.GetNPCHurtAddPer(atkObj)     # PVE伤害加成
+        aDamagePerPVP = 0 #PlayerControl.GetDamagePerPVP(atkObj)     # 外层PVP伤害加成
         aDamagePerPVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddPVPDamagePer)
         
-        aFinalHurt = PlayerControl.GetFinalHurt(atkObj)     # 最终固定伤害
+        aFinalHurt = 0#PlayerControl.GetFinalHurt(atkObj)     # 最终固定伤害
         # 被动增加最终伤害
         aFinalHurt += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
         aFinalHurt += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
         
-        aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
+        aOnlyFinalHurt = 0 #PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
         aFightPower = PlayerControl.GetFightPower(atkObj)
     else:
         aIgnoreDefRate = 0  # 无视防御比率
@@ -2182,14 +2106,14 @@
     dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
     dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
     if defObjType == IPY_GameWorld.gotPlayer:
-        dIgnoreDefRateReduce = PlayerControl.GetIgnoreDefRateReduce(defObj)  # 无视防御比率抗性
-        dSkillAtkRateReduce = PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
-        dDamagePVPReduce = PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
+        dIgnoreDefRateReduce = 0 #PlayerControl.GetIgnoreDefRateReduce(defObj)  # 无视防御比率抗性
+        dSkillAtkRateReduce = 0 #PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
+        dDamagePVPReduce = 0 #PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
         #dDamReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReduce)
-        dDamagePerPVPReduce = PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
+        dDamagePerPVPReduce = 0 #PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
         dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
-        dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
-        dBeHurtPer = PlayerControl.GetBeHurtPer(defObj)      # 加深受到伤害百分比
+        dFinalHurtReduce = 0 #PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
+        dBeHurtPer = 0#PlayerControl.GetBeHurtPer(defObj)      # 加深受到伤害百分比
         dFightPower = PlayerControl.GetFightPower(defObj)
         
     else:
@@ -2233,10 +2157,10 @@
     elif not curSkill:
         hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3))
         GameWorld.DebugLog("    普攻伤害=%s" % (hurtValue))
-    elif SkillCommon.isTurnNormalAtkSkill(curSkill):
+    elif SkillCommon.isTurnNormalSkill(curSkill):
         hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 1))
         GameWorld.DebugLog("    普攻技能伤害=%s" % (hurtValue))
-    elif SkillCommon.isXPSkill(curSkill):
+    elif SkillCommon.isAngerSkill(curSkill):
         hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2))
         GameWorld.DebugLog("    怒气技能伤害=%s" % (hurtValue))
     else:
@@ -2482,10 +2406,10 @@
         suckHP += atkObj.GetKillBackHP()
     
     # 攻击吸血
-    atkBackHP = PlayerControl.GetAtkBackHPPer(atkObj)
-    if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        #PVP 攻击回血
-        atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
+    atkBackHP = 0 #PlayerControl.GetAtkBackHPPer(atkObj)
+    #if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+    #    #PVP 攻击回血
+    #    atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
     # 百分比吸血
     atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
     atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
@@ -2506,39 +2430,6 @@
     GameObj.SetHP(atkObj, min(GameObj.GetMaxHP(atkObj), GameObj.GetHP(atkObj) + suckHP), False)
     
     ChangeHPView(atkObj, None, 0, suckHP, ChConfig.Def_HurtTYpe_Recovery)
-    return
-
-## 攻击者回蓝逻辑
-#  @param atkObj 攻击者
-#  @param defObj 防守者
-#  @return None
-def CalcSuckMagic(atkObj, defObj, hurtValue):
-
-    if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return
-    
-    tick = GameWorld.GetGameWorld().GetTick()
-    if tick - atkObj.GetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic) \
-        < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_SuckMagic]:
-        return
-    
-    atkObj.SetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic, tick)
-    
-    suckMP = 0
-    
-    # 杀怪回蓝
-    if defObj.GetGameObjType() == IPY_GameWorld.gotNPC and GameObj.GetHP(defObj) <= 0:
-        suckMP += atkObj.GetKillBackMP()
-    
-    # 攻击吸蓝
-    atkBackMPPer = PlayerControl.GetAtkBackMPPer(atkObj)
-    if atkBackMPPer > 0:
-        suckMP += int(hurtValue * atkBackMPPer / float(ChConfig.Def_MaxRateValue))
-    
-    if suckMP <= 0:
-        return
-    
-    atkObj.SetMP(min(atkObj.GetMaxMP(), atkObj.GetMP() + suckMP))
     return
 
 #---------------------------------------------------------------------
@@ -2852,13 +2743,13 @@
         return
 
     attackLV = curPlayer.GetLV()    # 攻击者等级
-    attackPrestige = PlayerControl.GetPrestige(curPlayer)    # 攻击者威望
+    attackPrestige = 0 #PlayerControl.GetPrestige(curPlayer)    # 攻击者威望
     attackNotoriety = curPlayer.GetInfamyValue()    # 攻击者恶名值
     attackPkValue = curPlayer.GetPKValue()  # 攻击者pk值
     attackFightPower = PlayerControl.GetFightPower(curPlayer) # 攻击者战斗力
     
     defendLV = defender.GetLV()    # 防守者等级
-    defendPrestige = PlayerControl.GetPrestige(defender)    # 防守者威望
+    defendPrestige = 0 #PlayerControl.GetPrestige(defender)    # 防守者威望
     defendNotoriety = defender.GetInfamyValue()    # 防守者恶名值
     defendPkValue = defender.GetPKValue()  # 防守者pk值
     defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
index 7b987b7..678d07c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
@@ -105,8 +105,6 @@
         #被攻击玩家进入战斗状态
         AttackCommon.OnNPCHitPlayer(curNormalNPC, curTagPlayer, tick)
         AttackCommon.SetPlayerBattleState(curTagPlayer, tick)
-        #触发被动buff
-        #AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
     else:
         #通知玩家
         if curTagPlayer.GetMapID() != ChConfig.Def_FBMapID_XMZZ:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
index c5f5266..ae825f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
@@ -122,8 +122,6 @@
 
     #防守方血量
     curTagPlayerHP = GameObj.GetHP(curTagPlayer)
-    #防守方被动Buff触发
-#    AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
     
     #是否同国籍
     #获得攻击方拥有者
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
index a877200..eb1e2ee 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
@@ -129,7 +129,6 @@
     if curTagPlayerHP > 0:
         #被攻击的玩家也进入战斗状态
         AttackCommon.SetPlayerBattleState(curTagPlayer, tick)
-#        AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
         AttackCommon.OnPlayerHitPlayer(curPlayer, curTagPlayer, tick)
          
     else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
index 2bdd44b..e3e790f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
@@ -125,9 +125,6 @@
     curTagPlayerHP = GameObj.GetHP(curTagPlayer)
     curTagPlayerFBHP = FBLogic.OnGetFBCurHP(curTagPlayer)
     
-    #防守方被动Buff触发
-#    AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
-    
     #是否同国籍
     #获得攻击方拥有者
     curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index cc94e04..c5ef889 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1676,7 +1676,7 @@
                          curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill,
                                                     ChConfig.Def_SkillFuncType_PetSkill,
                                                     ChConfig.Def_SkillFuncType_NormalAttack,
-                                                    ChConfig.Def_SkillFuncType_TurnNormaAttack]):
+                                                    ChConfig.Def_SkillFuncType_TurnNormaSkill]):
         # 攻击减层级 优先处理,因为同个技能触发buff后,会再处理层级,导致立即减层级
         PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick)
     
@@ -1823,7 +1823,7 @@
     #===========================================================================
     
     #----------扣XP点
-    #if SkillCommon.isXPSkill(curSkill):
+    #if SkillCommon.isAngerSkill(curSkill):
     #    GameObj.SetXP(curObj, 0)
         
     #----------扣HP点
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 0311541..e1e95ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -517,14 +517,6 @@
         self.turnFight.clearFight()
         return
     
-    def playerLogin(self, curPlayer):
-        self.turnFight.curPlayer = curPlayer
-        return
-    
-    def playerOffline(self, curPlayer):
-        self.turnFight.curPlayer = None
-        return
-    
 def GetMainFightMgr(curPlayer):
     ## 获取主线战斗管理
     olPlayer = PlayerOnline.GetOnlineMgr().GetOnlinePlayer(curPlayer)
@@ -1412,7 +1404,7 @@
                 continue
             skillTypeID = useSkill.GetSkillTypeID()
             # 常规攻击优先xp
-            if SkillCommon.isXPSkill(useSkill) and turnBattleType == ChConfig.TurnBattleType_Normal:
+            if SkillCommon.isAngerSkill(useSkill) and turnBattleType == ChConfig.TurnBattleType_Normal:
                 if curXP < xpMax:
                     continue
                 useCnt = -1 # xp技能优先释放
@@ -1704,11 +1696,11 @@
         return
     
     skillID = curSkill.GetSkillID() if curSkill else 0
-    isXP = SkillCommon.isXPSkill(curSkill)
+    isXP = SkillCommon.isAngerSkill(curSkill)
     if isXP:
         GameObj.SetXP(curObj, 0)
     elif curSkill:
-        if SkillCommon.isTurnNormalAtkSkill(curSkill):
+        if SkillCommon.isTurnNormalSkill(curSkill):
             addXP = IpyGameDataPY.GetFuncCfg("AngerXP", 3)
             AddTurnFightXP(curObj, addXP, "skillID:%s" % skillID)
             
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5c4acdc..966c29e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -11,6 +11,7 @@
 #---------------------------------------------------------------------
 import os
 import IPY_GameWorld
+import IPY_PlayerDefine
 import ShareDefine
 
 
@@ -93,6 +94,147 @@
 Def_BuffValue_Count = 3     # buff记录的value个数
 
 #游戏对象属性--------------------------------------------
+# 属性ID列表,所有对象类型通用,如Player、NPC
+AttrIDList = (
+AttrID_1,
+AttrID_2,
+AttrID_3,
+AttrID_4,
+AttrID_5,
+AttrID_Atk,                                 # 攻击 6
+AttrID_Def,                                 # 防御 7
+AttrID_MaxHP,                               # 最大生命 8
+AttrID_HP,                                  # 当前生命 9
+AttrID_Speed,                               # 移速 10
+AttrID_AtkSpeed,                            # 攻速 11
+AttrID_XP,                                  # 当前XP 12
+AttrID_AtkInheritPer,                       # 攻击继承 13
+AttrID_DefInheritPer,                       # 防御继承 14
+AttrID_HPInheritPer,                        # 生命继承 15
+AttrID_AtkPer,                              # 攻击加成 16
+AttrID_DefPer,                              # 防御加成 17
+AttrID_MaxHPPer,                            # 生命加成 18
+AttrID_19,
+AttrID_20,
+AttrID_StunRate,                            # 击晕 21
+AttrID_StunRateDef,                         # 抗击晕 22
+AttrID_SuperHitRate,                        # 暴击 23
+AttrID_SuperHitRateDef,                     # 抗暴击 24
+AttrID_ComboRate,                           # 连击 25
+AttrID_ComboRateDef,                        # 抗连击 26
+AttrID_MissRate,                            # 闪避 27
+AttrID_MissRateDef,                         # 抗闪避 28
+AttrID_ParryRate,                           # 格挡 29
+AttrID_ParryRateDef,                        # 抗格挡 30
+AttrID_SuckHPPer,                           # 吸血 31
+AttrID_SuckHPPerDef,                        # 抗吸血 32
+AttrID_33,
+AttrID_34,
+AttrID_FinalDamPer,                         # 最终增伤 35
+AttrID_FinalDamPerDef,                      # 最终减伤 36
+AttrID_PhyDamPer,                           # 物理增伤 37
+AttrID_PhyDamPerDef,                        # 物理减伤 38
+AttrID_MagDamPer,                           # 法术增伤 39
+AttrID_MagDamPerDef,                        # 法术减伤 40
+AttrID_NormalSkillPer,                      # 普技增伤 41
+AttrID_NormalSkillPerDef,                   # 普技减伤 42
+AttrID_AngerSkillPer,                       # 怒技增伤 43
+AttrID_AngerSkillPerDef,                    # 怒技减伤 44
+AttrID_SuperDamPer,                         # 强化暴伤 45
+AttrID_SuperDamPerDef,                      # 弱化暴伤 46
+AttrID_47,
+AttrID_48,
+AttrID_49,
+AttrID_50,
+AttrID_CurePer,                             # 强化治疗 51
+AttrID_CurePerDef,                          # 弱化治疗 52
+AttrID_ShieldPer,                           # 强化护盾 53
+AttrID_ShieldPerDef,                        # 弱化护盾 54
+AttrID_DOTPer,                              # 持续增伤 55 (中毒、燃烧、流血)
+AttrID_DOTPerDef,                           # 持续减伤 56
+) = range(1, 1 + 56)
+
+# 需要计算的武将战斗属性ID列表
+CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef, 
+                        AttrID_SuperHitRate, AttrID_SuperHitRateDef, AttrID_ComboRate, AttrID_ComboRateDef,
+                        AttrID_MissRate, AttrID_MissRateDef, AttrID_ParryRate, AttrID_ParryRateDef,
+                        AttrID_SuckHPPer, AttrID_SuckHPPerDef, AttrID_FinalDamPer, AttrID_FinalDamPerDef,
+                        AttrID_PhyDamPer, AttrID_PhyDamPerDef, AttrID_MagDamPer, AttrID_MagDamPerDef,
+                        AttrID_NormalSkillPer, AttrID_NormalSkillPerDef, AttrID_AngerSkillPer, AttrID_AngerSkillPerDef,
+                        AttrID_SuperDamPer, AttrID_SuperDamPerDef, AttrID_CurePer, AttrID_CurePerDef,
+                        AttrID_ShieldPer, AttrID_ShieldPerDef, AttrID_DOTPer, AttrID_DOTPerDef,
+                        ]
+
+# 基础三维属性ID列表
+BaseAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP]
+BaseAttrPerIDList = [AttrID_AtkPer, AttrID_DefPer, AttrID_MaxHPPer]
+
+# 属性ID对应可对其百分比提升的属性ID {属性ID:百分比属性ID, ...}
+AttrPerDict = {
+               AttrID_Atk:AttrID_AtkPer,
+               AttrID_Def:AttrID_DefPer,
+               AttrID_MaxHP:AttrID_MaxHPPer,
+               }
+
+# 属性ID对应的继承属性ID {属性ID:继承属性ID, ...}
+AttrInheritPerDict = {
+               AttrID_Atk:AttrID_AtkInheritPer,
+               AttrID_Def:AttrID_DefInheritPer,
+               AttrID_MaxHP:AttrID_HPInheritPer,
+               }
+
+# 属性ID对应0418刷新类型 {属性ID:[刷新同步类型, 是否支持超20亿的大数值], ...}
+# 卡牌项目玩家/主公属性仅为中间层属性,并非最终属性,最终属性体现在卡牌上,暂定全部前端自己算
+# 所以仅配置战斗场景需要同步的属性即可
+CDBRefresh_AttrIDDict = {
+#                      AttrID_Atk:[IPY_PlayerDefine.CDBPlayerRefresh_MAXATK, 0],
+#                      AttrID_Def:[IPY_PlayerDefine.CDBPlayerRefresh_DEF, 0],
+                      AttrID_MaxHP:[IPY_PlayerDefine.CDBPlayerRefresh_MaxHP, 1],
+                      AttrID_HP:[IPY_PlayerDefine.CDBPlayerRefresh_HP, 1],
+#                      AttrID_Speed:[ShareDefine.CDBPlayerRefresh_SpeedValue, 0],
+#                      AttrID_AtkSpeed:[IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 0],
+                      AttrID_XP:[IPY_GameWorld.CDBPlayerRefresh_XP, 0],
+#                      AttrID_StunRate:[ShareDefine.CDBPlayerRefresh_StunRate, 0],
+#                      AttrID_StunRateDef:[ShareDefine.CDBPlayerRefresh_StunRateDef, 0],
+#                      AttrID_SuperHitRate:[IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 0],
+#                      AttrID_SuperHitRateDef:[ShareDefine.CDBPlayerRefresh_SuperHitRateDef, 0],
+#                      AttrID_ComboRate:[ShareDefine.CDBPlayerRefresh_ComboRate, 0],
+#                      AttrID_ComboRateDef:[ShareDefine.CDBPlayerRefresh_ComboRateDef, 0],
+#                      AttrID_MissRate:[IPY_PlayerDefine.CDBPlayerRefresh_Miss, 0],
+#                      AttrID_MissRateDef:[IPY_PlayerDefine.CDBPlayerRefresh_HIT, 0],
+#                      AttrID_ParryRate:[ShareDefine.CDBPlayerRefresh_ParryRate, 0],
+#                      AttrID_ParryRateDef:[ShareDefine.CDBPlayerRefresh_ParryRateDef, 0],
+#                      AttrID_SuckHPPer:[ShareDefine.CDBPlayerRefresh_SuckHPPer, 0],
+#                      AttrID_SuckHPPerDef:[ShareDefine.CDBPlayerRefresh_SuckHPPerDef, 0],
+#                      AttrID_FinalDamPer:[ShareDefine.CDBPlayerRefresh_FinalDamPer, 0],
+#                      AttrID_FinalDamPerDef:[ShareDefine.CDBPlayerRefresh_FinalDamPerDef, 0],
+#                      AttrID_PhyDamPer:[ShareDefine.CDBPlayerRefresh_PhyDamPer, 0],
+#                      AttrID_PhyDamPerDef:[ShareDefine.CDBPlayerRefresh_PhyDamPerDef, 0],
+#                      AttrID_MagDamPer:[ShareDefine.CDBPlayerRefresh_MagDamPer, 0],
+#                      AttrID_MagDamPerDef:[ShareDefine.CDBPlayerRefresh_MagDamPerDef, 0],
+#                      AttrID_NormalSkillPer:[ShareDefine.CDBPlayerRefresh_NormalSkillPer, 0],
+#                      AttrID_NormalSkillPerDef:[ShareDefine.CDBPlayerRefresh_NormalSkillPerDef, 0],
+#                      AttrID_AngerSkillPer:[ShareDefine.CDBPlayerRefresh_AngerSkillPer, 0],
+#                      AttrID_AngerSkillPerDef:[ShareDefine.CDBPlayerRefresh_AngerSkillPerDef, 0],
+#                      AttrID_SuperDamPer:[ShareDefine.CDBPlayerRefresh_SuperDamPer, 0],
+#                      AttrID_SuperDamPerDef:[ShareDefine.CDBPlayerRefresh_SuperDamPerDef, 0],
+#                      AttrID_CurePer:[ShareDefine.CDBPlayerRefresh_CurePer, 0],
+#                      AttrID_CurePerDef:[ShareDefine.CDBPlayerRefresh_CurePerDef, 0],
+#                      AttrID_ShieldPer:[ShareDefine.CDBPlayerRefresh_ShieldPer, 0],
+#                      AttrID_ShieldPerDef:[ShareDefine.CDBPlayerRefresh_ShieldPerDef, 0],
+#                      AttrID_DOTPer:[ShareDefine.CDBPlayerRefresh_DOTPer, 0],
+#                      AttrID_DOTPerDef:[ShareDefine.CDBPlayerRefresh_DOTPerDef, 0],
+                      }
+
+#刷属性分类索引
+Def_CalcAttrList = (
+Def_CalcAttr_LV, # 角色等级 0
+Def_CalcAttr_MainEquip, # 主装备 1
+Def_CalcAttr_HeroBook, # 武将图鉴 2
+) = range(3)
+
+##-----------------------------------------------------------------------------------------------
+
 Def_Calc_AllAttrType_MAX = 192
 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
 TYPE_Calc_AttrList = (
@@ -507,6 +649,9 @@
                       #ShareDefine.retGuard1:[Def_ItemType_retGuard1],
                       #ShareDefine.retGuard2:[Def_ItemType_retGuard2],
                       }
+# 主线装备部位
+Def_MainEquipPlaces = range(ShareDefine.retWeapon, ShareDefine.retAmulet + 1)
+
 #---------------------------------------------------------------------
 #写死的物品效果ID都放这边------请按数值顺序存放
 Def_Effect_GivePlayerMoneySilver = 201  #给人物金钱 铜钱道具效果ID
@@ -1511,8 +1656,6 @@
 Def_RecycleReturnMoney = 1000
 #玩家换装的最短时间
 Def_MinChangeEquipTime = 300
-#玩家一键换装的最短时间
-Def_OneKeyChangeEquipTime = 3000
 #背包重整的最短时间间隔
 Def_ItemPackResetInterval = 3000
 #自动恢复计算间隔
@@ -1962,7 +2105,6 @@
                 'TrialTower':[Def_FBMapID_TrialTower], # 试炼之塔
                 'ClearDevil':[Def_FBMapID_ClearDevil], # 除魔卫道
                 'MagicWeapon':[Def_FBMapID_MagicWeapon], # 法宝副本
-                'IceLode':[Def_FBMapID_IceLode], # 冰晶矿脉
                 'DuJie':[Def_FBMapID_DuJie], #渡劫
                 'KirinHome':[Def_FBMapID_KirinHome], #麒麟之府
                 'BZZD':[Def_FBMapID_BZZD], # 百战之地(仙界秘境)
@@ -3049,32 +3191,18 @@
 # key的长度不能超过29个字节
 Def_PlayerKey_BurnOwnerID =  "burnOwnerID"  # 灼烧BUFF特殊处理,部分buff跟随灼烧消失
 Def_PlayerKey_SkillInDelBuff = "SkillInDelBuff"   # buff中释放技能添加buff要特殊记录给后续处理,直接删除/添加会导致错乱
-Def_PlayerKey_TheFBSkillsCD = "TheFBSkillsCD"    # 减少指定技能组CD XX%
-Def_PlayerKey_BurnValue = "BurnValue"    # 灼烧固定伤害
-Def_PlayerKey_BurnTimePer = "BurnTimePer"    # 延长灼烧时间百分比
-Def_PlayerKey_SubSpeedPer = "SubSpeedPer"    # 减移动速度百分比
-Def_PlayerKey_YinjiCnt = "YinjiCnt"   # 当前印记数
-Def_PlayerKey_LostYinjiTime = "LostYinjiTime"   # 每X秒自动消失一个印记
 Def_PlayerKey_1314HurtCount = "1314cnt"   # 类剑刃风暴技能的1314效果,伤害次数处理
 Def_PlayerKey_FirstDefender = "FDID"   # 第一个防守者,只用于比较
 Def_PlayerKey_SelectObjID = "selectID"   # 锁定模式选中,不用SetActionObj
 Def_PlayerKey_SelectObjType = "selectType"   # 锁定模式选中
-Def_PlayerKey_NormalHurt = "NormalHurt"   # 属性普通攻击增伤:普通攻击附加的固定值伤害
-Def_PlayerKey_NormalHurtPer = "NormalHurtPer"    # 属性普通攻击加成:普通攻击附加的伤害百分比
-Def_PlayerKey_FabaoHurt = "FabaoHurt"    # 属性法宝技能增伤:法宝技能攻击附加的固定值伤害
-Def_PlayerKey_FabaoHurtPer = "FabaoHurtPer"    # 属性法宝技能加成:法宝技能攻击附加的伤害百分比
 Def_PlayerKey_AddBuffLayer = "addBuffLayer" # buff当前层数
 Def_PlayerKey_BuffHurtCnt = "BuffHurtCnt" # 持续buff掉血次数
 Def_PlayerKey_Zhansha = "zhansha"   # 斩杀标志
-Def_PlayerKey_ZhuxianRate = "ZXRate"   # 诛仙一击的概率
-Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer"   # 诛仙一击的伤害%
 Def_PlayerKey_LockHPSkillID = "LockHPSkillID"   # 锁血功能的技能
 Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD"   # 神兵护盾被攻击前的值
 Def_PlayerKey_curHurtValue = "curHurtValue"     # 计算中的临时伤害值,技能特殊用
 Def_PlayerKey_curHurtValueEx = "curHurtValueEx"     # 计算中的临时伤害值,技能特殊用
 Def_PlayerKey_SomersaultTime = "Somersault"     # 翻滚一定时间内无敌,表现为MISS
-Def_PlayerKey_CopyFuncAttr = "CopyFuncAttr%s"     # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
-Def_PlayerKey_CopyFuncAttrEx = "CopyFuncAttrEx%s"     # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
 Def_Player_RefreshAttrByBuff = "PlayerAttrByBuff"   # 玩家属性刷新功能属性缓存,便于buff刷新计算, 间隔刷新
 Def_Player_HadRefreshAttr = "HadRefreshAttr"   # 玩家在本地图是否刷新过属性
 Def_PlayerKey_ClientCustomScene = "ClientCustomScene"     # 客户端自定义场景状态
@@ -3086,9 +3214,6 @@
 Def_PlayerKey_ResetFBLinePosY = "ResetFBLinePosY"     # 请求切换副本多合一地图功能线路ID
 Def_PlayerKey_AttackFollowMaster = "FollowAtk"     # 召唤兽跟随攻击
 Def_PlayerKey_MoreHurtValue = "MoreHurtValue"     # 额外的伤害值,一般用于不走公式
-Def_PlayerKey_BloodShiledHurt = "BSHurt"     # 伤害值用于血盾抵消
-Def_PlayerKey_BloodShiledHurtEx = "BSHurtEx"     # 伤害值用于血盾抵消
-Def_PlayerKey_EquipTime = "EquipTime"     # 时效装备
 Def_PlayerKey_PowerPartTime = "PowerPartTime"     # 蓄力每次消耗时间,因攻速改变
 Def_PlayerKey_PowerPartCount = "PowerPartCount"     # 蓄力技能能量次数
 Def_Player_RefreshAttr = "Player_RefreshAttr"   # 玩家刷新属性标志
@@ -3117,16 +3242,10 @@
 Def_PlayerKey_MirrorBattleTime = 'MirrorBattleTime'    # 最近一次请求镜像战斗时间戳
 Def_PlayerKey_MirrorBattleID = 'MirrorBattleID'    # 镜像战斗ID,有值时代表处于镜像战斗中
 
-Def_PlayerKey_FamilyArrestQueryState = 'ArrestQueryState'  # 家族悬赏任务完成查询状态
 Def_PlayerKey_Frist_Lock = "Frist_Lock"  # 是否接受了任务1
 Def_PlayerKey_TaskExpRewardMultiple = "TaskExpRewardMultiple"  # 任务经验奖励倍值
 Def_PlayerKey_BuyItemCnt = "BuyItemCnt"  # 购买物品数量
-Def_PlayerKey_SpeedValueNotBuff = "SpeedValueNotBuff"  # 玩家移动速度数值参数, 非实际移动速度,不含buff
-Def_PlayerKey_SpeedValue = "SpeedValue"  # 玩家移动速度数值参数, 非实际移动速度,含buff
 Def_PlayerKey_SpeedHorse = "SpeedHorse"  # 骑乘时附加移动速度值
-Def_PlayerKey_AtkSpeedSet = "AtkSpeedSet"  # 攻击速度固定值, 大于0表示攻击速度强制为该值
-Def_PlayerKey_AtkInterval = "NormalAtkInterval_%s"  # 公共技能CD类型
-Def_PlayerKey_AtkTick = "NormalAtkTick_%s"  # 公共技能CD类型
 Def_PlayerKey_QueryOpenServerAwardState = "QueryOpenServerAwardState"  # 查询开服奖励状态
 Def_PlayerKey_QueryFamilyStoreTick = "QueryFamilyStoreTick"  # 战盟仓库操作tick
 
@@ -3134,10 +3253,6 @@
 Def_PlayerKey_QueryNewGuyCardType = 'QueryNewGuyCardType'  # 查询的新手卡类型
 Def_PlayerKey_TradeTagNPC = "TradeTagNPC"    # 当前商店的npcid
 
-Def_PlayerKey_LastSkillComboTick = "LastSkillComboTick"    #上次技能连击tick
-Def_PlayerKey_SkillComboCnt = "SkillComboCnt"    #技能连击数
-Def_PlayerKey_ComboSkillTypeID = "ComboSkillTypeID"    #当前连击的技能TypeID
-Def_PlayerKey_ComboAddHurtPer = "ComboAddHurtPer"    #当前连击的伤害加成万分率
 Def_PlayerKey_ComboBuffProcessState = "ComboBuffProcessState"    #持续性buff连击处理状态
 Def_PlayerKey_LvAwardQueryState = 'LvAwardQueryState'  # 等级奖励领奖查询状态
 Def_PlayerKey_StoreQueryState = 'StoreQueryState'  # 商店全服购买次数查询状态
@@ -3153,40 +3268,8 @@
 Def_PlayerKey_TeamMemCount = "TeamMemCount"      #队伍在线玩家数
 Def_PlayerKey_CurState = "PlayerCurState" # 当前状态信息, 标记详见 Def_PlayerStateList
 Def_PlayerKey_AttrFaintCD = "AttrFaintCD"        #击晕CD控制
-Def_PlayerKey_AttrFaintRate = "FaintRate"        #触发击晕
-Def_PlayerKey_AttrFaintDefRate = "FaintDefRate"        #击晕抵抗
-Def_PlayerKey_AttrAtkerFreezed = "AttrAtkerFreezed_50"        #玩家被攻击触发定身
-Def_PlayerKey_AttrAddAngry = "AttrAddAngry_51"        #玩家攻击增加额外仇恨
-Def_PlayerKey_AttrComboRate = "ComboRate"        #连击几率
-Def_PlayerKey_AttrComboDamPer = "ComboDamPer"        #连击伤害
-Def_PlayerKey_SkillAtkRateReduce = "SkillAtkRateReduce"    #技能攻击比例减少
-Def_PlayerKey_AttrDropEquipPer = "DropEquipPer"    #装备掉率
-Def_PlayerKey_AttrDamagePVP = "DamagePVP"    #PVP固定伤害输出
-Def_PlayerKey_AttrDamagePVPReduce = "DamagePVPReduce"    #PVP固定伤害减少
-Def_PlayerKey_AttrDamagePVE = "DamagePVE"    #伤害输出计算固定值PVE
-Def_PlayerKey_AttrDamagePerPVP = "DamagePerPVP"    #伤害输出计算百分比PVP
-Def_PlayerKey_AttrDamagePerPVPReduce = "DamagePerPVPReduce"    #伤害输出计算百分比PVP减少
-Def_PlayerKey_AttrHurtPer = "AttrHurtPer"    #受伤计算百分比
-Def_PlayerKey_AttrDamChanceDef = "DamChanceDef"    #20%的概率抵御伤害比率
-Def_PlayerKey_AttrProDefHPPer = "ProDefHPPer"    #生命上限换算为防护值的百分比
-Def_PlayerKey_AttrProDefAbsorb = "ProDefAbsorb"    #防护值吸收伤害比率
-Def_PlayerKey_AttrPetMinAtk = "AttrPetMinAtk"    #宠物最小攻击力
-Def_PlayerKey_AttrPetMaxAtk = "AttrPetMaxAtk"    #宠物最大攻击力
-Def_PlayerKey_AttrPetDamPer = "AttrPetDamPer"    #宠物伤害百分比提升
-Def_PlayerKey_PetSkillAtkRate = "PetSkillAtkRate"    #宠物技能攻击比例加成
-Def_PlayerKey_AttrPerLVAtk = "PerLVAtk"    #每1级+%s攻击, 数值取万分率,支持小数算法
-Def_PlayerKey_AttrPerLVMaxHP = "PerLVMaxHP"    #每1级+%s生命, 数值为固定值
-Def_PlayerKey_AttrShieldMPCostRate = "AttrShieldMPCostRate"    #魔法盾伤害吸收蓝耗比率
-Def_PlayerKey_AttrXP = "AttrXP"    #当前XP
-Def_PlayerKey_AttrXPRestorePer = "AttrXPRestorePer"    #自动恢复XP值比率
 Def_PlayerKey_MarkLoadMapTick = "LoadMapTickVIP"        #记录切换地图后的tick,VIP
 Def_PlayerKey_MTFreeOnlineRefreshTick = "MTFreeOnlineRTick"        # 寻宝在线计算时间
-Def_PlayerKey_MFPFightPower = "MFPFightPower_%s"        #模块战斗力, 求余亿部分,参数(模块类型索引)
-Def_PlayerKey_MFPFightPowerPoint = "MFPFightPowerPoint_%s"        #模块战斗力, 整除亿部分,参数(模块类型索引)
-Def_PlayerKey_MFPSkill = "MFPSkill_%s"        #技能附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPSkillEx = "MFPSkillEx_%s"        #技能附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPEx = "MFPEx_%s"        #模块附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPExPoint = "MFPExPoint_%s"        #模块附加战斗力, 参数(模块类型索引)
 Def_PlayerKey_AtkWithoutBuff = "AtkWithoutBuff"        #玩家无buff状态下的攻击值
 Def_PlayerKey_DefWithoutBuff = "DefWithoutBuff"        #玩家无buff状态下的防御值
 Def_PlayerKey_HPWithoutBuff = "HPWithoutBuff"        #玩家无buff状态下的生命值
@@ -3200,137 +3283,21 @@
 Def_PlayerKey_AttrActivatyNotify = "AttrActivatyNotify" # 属性激活提示类型
 Def_PlayerKey_EquipOrangeCount = "EquipOrangeCount" # 装备信息 - 橙装及以上件数
 Def_PlayerKey_LastHurt = "PlayerLastHurt" # 最后补刀
-Def_PlayerKey_AddBackHPPer = "AddBackHPPer"    #增加生命恢复效果
-Def_PlayerKey_ReduceBackHPPer = "ReduceBackHPPer"    #降低生命恢复效果
-Def_PlayerKey_NPCHurtAddPer = "NPCHurtAddPer"  # 对怪物伤害加成
-Def_PlayerKey_JobAHurtAddPer = "JobAHurtAddPer"  # 目标战士伤害加成
-Def_PlayerKey_JobBHurtAddPer = "JobBHurtAddPer"  # 目标法师伤害加成
-Def_PlayerKey_JobCHurtAddPer = "JobCHurtAddPer"  # 目标弓手伤害加成
-Def_PlayerKey_NPCAtkReducePer = "NPCAtkReducePer"  # NPC攻击伤害减免
-Def_PlayerKey_JobAAtkReducePer = "JobAAtkReducePer"  # 战士攻击伤害减免
-Def_PlayerKey_JobBAtkReducePer = "JobBAtkReducePer"  # 法师攻击伤害减免
-Def_PlayerKey_JobCAtkReducePer = "JobCAtkReducePer"  # 弓手攻击伤害减免
-Def_PlayerKey_LuckyHitReduce = "LuckyHitReduce"  # 会心一击伤害减免固定值
-Def_PlayerKey_GreatHitReducePer = "GreatHitReducePer"  # 卓越一击伤害减免
-Def_PlayerKey_SuperHitReduce = "SuperHitReduce"  # 暴击伤害减免固定值
-Def_PlayerKey_IgnoreDefReducePer = "IgnoreDefReducePer"  # 无视防御伤害减免
-Def_PlayerKey_LuckyHitRateReduce = "LuckyHitRateReduce"  # 抗会心一击概率
-Def_PlayerKey_GreatHitRateReduce = "GreatHitRateReduce"  # 抗卓越一击概率
-Def_PlayerKey_SuperHitRateReduce = "SuperHitRateReduce"  # 抗暴击概率
-Def_PlayerKey_IgnoreDefRateReduce = "IgnoreDefRateReduce"  # 抗无视防御概率
 Def_PlayerKey_LastHurtValue = "LastHurtValue" # 最后一次伤害值
 Def_PlayerKey_LastHurtValueEx = "LastHurtValueEx" # 最后一次伤害值
 Def_PlayerKey_LastHurtNPCObjID = "LastHurtNPCObjID" # 最后攻击的NPCObjID
 Def_PlayerKey_LastAttackerObjID = "LastAttackerObjID" # 被攻击者记录的最近攻击玩家ID
-Def_PlayerKey_CommMapExpRate = "CommMapExpRate" # 常规地图经验倍率加成
-Def_PlayerKey_BossFinalHurtPer = "BossFinalHurtPer" # boss最终伤害百分比
-Def_PlayerKey_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
-Def_PlayerKey_FinalHurtReducePer = "FHReducePer" # 最终伤害减免百分比
-Def_PlayerKey_FuhaoHitRate = "FuhaoHitRate" # 富豪一击概率
-Def_PlayerKey_FinalHurt = "FinalHurt" # 最终固定伤害增加
-Def_PlayerKey_BleedDamage = "BleedDamage" # 流血伤害
-Def_PlayerKey_FinalHurtReduce = "FinalHurtReduce" # 最终固定伤害减少
-Def_PlayerKey_BossIDHurt = "BossIDHurt" # 对指定boss伤害加成固定值
-Def_PlayerKey_BossIDHurtAddPer = "BossIDHurtAddPer" # 对指定boss伤害加成倍率
-Def_PlayerKey_DropEquipDoCount = "DropEquipDoCount" # 装备掉落执行次数加成万分率
-Def_PlayerKey_BaseAtkMin = "BaseAtkMin" # 基础最小攻击
-Def_PlayerKey_BaseAtkMax = "BaseAtkMax" # 基础最大攻击
-Def_PlayerKey_BaseMaxHP = "BaseMaxHP" # 基础生命
-Def_PlayerKey_BaseDef = "BaseDef" # 基础防御
-Def_PlayerKey_BaseHit = "BaseHit" # 基础命中
-Def_PlayerKey_BaseMiss = "BaseMiss" # 基础闪避
-Def_PlayerKey_BaseAtkAddPer = "BaseAtkAddPer" # 基础攻击百分比
-Def_PlayerKey_BaseMaxHPAddPer = "BaseMaxHPAddPer" # 基础生命百分比
-Def_PlayerKey_BaseDefAddPer = "BaseDefAddPer" # 基础防御百分比
-Def_PlayerKey_BaseHitAddPer = "BaseHitAddPer" # 基础命中百分比
-Def_PlayerKey_BaseMissAddPer = "BaseMissAddPer" # 基础闪避百分比
-Def_PlayerKey_FaQiMaxHPPer = "FaQiMaxHPPer" # 法器生命百分比
-Def_PlayerKey_FaQiAtkPer = "FaQiAtkPer" # 法器攻击百分比
-Def_PlayerKey_FaQiDefPer = "FaQiDefPer" # 法器防御百分比
-Def_PlayerKey_GodWeaponMaxHPPer = "GodWeaponMaxHPPer" # 神兵生命百分比
-Def_PlayerKey_GodWeaponAtkPer = "GodWeaponAtkPer" # 神兵攻击百分比
-Def_PlayerKey_StoneMaxHPPer = "StoneMaxHPPer" # 宝石生命百分比
-Def_PlayerKey_StoneAtkPer = "StoneAtkPer" # 宝石攻击百分比
-Def_PlayerKey_HPCureEnhance = "HPCureEnhance" # 血瓶恢复效果
 Def_PlayerKey_HadInitFruitAttr = "HadInitFruitAttr" # 是否已经刷新过果实属性
-Def_PlayerKey_OnlyFinalHurt = "OnlyFinalHurt"   # 额外输出伤害
-Def_PlayerKey_PVPAtkBackHP = "PVPAtkBackHP"   # PVP攻击回血
-Def_PlayerKey_HitSucessRate = "HitSucessRate"   # 命中成功率
-Def_PlayerKey_MissSucessRate = "MissSucessRate"   # 闪避成功率
-Def_PlayerKey_CurePer = "CurePer"   # 治疗加成 默认百分百
-Def_PlayerKey_BeHurtPer = "BeHurtPer"   # 加深受到伤害百分比
-Def_PlayerKey_TitleMaxHPPer = "TitleMaxHPPer"   # 称号生命加成
-Def_PlayerKey_TitleAtkPer = "TitleAtkPer"   # 称号攻击加成
-Def_PlayerKey_TitleDefPer = "TitleDefPer"   # 称号防御加成
-Def_PlayerKey_FaceMaxHPPer = "FaceMaxHPPer"   # 头像生命加成
-Def_PlayerKey_FaceAtkPer = "FaceAtkPer"   # 头像攻击加成
-Def_PlayerKey_FaceDefPer = "FaceDefPer"   # 头像防御加成
-Def_PlayerKey_FacePicMaxHPPer = "FacePicMaxHPPer"   # 头像框生命加成
-Def_PlayerKey_FacePicAtkPer = "FacePicAtkPer"   # 头像框攻击加成
-Def_PlayerKey_FacePicDefPer = "FacePicDefPer"   # 头像框防御加成
-Def_PlayerKey_HorseSkinMaxHPPer = "HorseSkinMaxHPPer"   # 坐骑幻化生命加成
-Def_PlayerKey_HorseSkinAtkPer = "HorseSkinAtkPer"   # 坐骑幻化攻击加成
-Def_PlayerKey_HorseSkinDefPer = "HorseSkinDefPer"   # 坐骑幻化防御加成
-Def_PlayerKey_HorseAtkPer = "HorseAtkPer"   # 坐骑攻击百分比
-Def_PlayerKey_HorseMaxHPPer = "HorseMaxHPPer"   # 坐骑生命加成
-Def_PlayerKey_PetAtkPer = "PetAtkPer"   # 灵宠攻击加成
-Def_PlayerKey_HorseTrainAttrPer = "HorseTrainAttrPer"   # 坐骑培养属性加成
-Def_PlayerKey_PetTrainAttrPer = "PetTrainAttrPer"   # 灵宠培养属性加成
-Def_PlayerKey_GuardTrainAttrPer = "GuardTrainAttrPer"   # 守护培养属性加成
-Def_PlayerKey_WingTrainAttrPer = "WingTrainAttrPer"   # 翅膀培养属性加成
-Def_PlayerKey_PeerlessWeaponTrainAttrPer = "PeerlessWeaponTrainAttrPer"   # 灭世培养属性加成
-Def_PlayerKey_PeerlessWeapon2TrainAttrPer = "PeerlessWeapon2TrainAttrPer"   # 弑神培养属性加成
-Def_PlayerKey_LianTiAttrPer = "LianTiAttrPer"   # 炼体属性属性加成
-Def_PlayerKey_AffairSpeedPer = "AffairSpeedPer"   # 仙盟事务速度加成
-Def_PlayerKey_FamilyBossHurtPer = "FamilyBossHurtPer"   # 仙盟BOSS伤害加成
-Def_PlayerKey_FamilyWarHPPer = "FamilyWarHPPer"   # 仙盟联赛生命加成
-Def_PlayerKey_FamilyWarAtkPer = "FamilyWarAtkPer"   # 仙盟联赛攻击加成
-Def_PlayerKey_FamilySitExpPer = "FamilySitExpPer"   # 仙盟打坐经验加成
-Def_PlayerKey_StoneBasePer = "StoneBasePer"   # 宝石基础属性百分比
-Def_PlayerKey_RealmBasePer = "RealmBasePer"   # 境界基础属性百分比
-Def_PlayerKey_WingHPPer = "WingHPPer"   # 翅膀生命百分比
-Def_PlayerKey_SuiteBasePer = "SuiteBasePer"   # 套装基础属性百分比
-Def_PlayerKey_PlusBaseAtkPer = "PlusBaseAtkPer"   # 强化基础攻击百分比
-Def_PlayerKey_Metal = "PointMetal"   # 金
-Def_PlayerKey_Wood = "PointWood"   # 木
-Def_PlayerKey_Water = "PointWater"   # 水
-Def_PlayerKey_Fire = "PointFire"   # 火
-Def_PlayerKey_Earth = "PointEarth"   # 土
-Def_PlayerKey_MetalQualityLV = "MetalQualityLV"   # 金灵根品级
-Def_PlayerKey_WoodQualityLV = "WoodQualityLV"   # 木灵根品级
-Def_PlayerKey_WaterQualityLV = "WaterQualityLV"   # 水灵根品级
-Def_PlayerKey_FireQualityLV = "FireQualityLV"   # 火灵根品级
-Def_PlayerKey_EarthQualityLV = "EarthQualityLV"   # 土灵根品级
-Def_PlayerKey_SkillAddPer1 = "SkillAddPer1"   # 技能伤害增强1
-Def_PlayerKey_SkillAddPer2 = "SkillAddPer2"   # 技能伤害增强2
-Def_PlayerKey_SkillAddPer3 = "SkillAddPer3"   # 技能伤害增强3
-Def_PlayerKey_SkillAddPer4 = "SkillAddPer4"   # 技能伤害增强4
-Def_PlayerKey_SkillAddPer5 = "SkillAddPer5"   # 技能伤害增强5
-Def_PlayerKey_SkillAddPer6 = "SkillAddPer6"   # 技能伤害增强6
-Def_PlayerKey_SkillAddPer7 = "SkillAddPer7"   # 技能伤害增强7
-Def_PlayerKey_SkillReducePer1 = "SkillReducePer1"   # 受到技能伤害减少1
-Def_PlayerKey_SkillReducePer2 = "SkillReducePer2"   # 受到技能伤害减少2
-Def_PlayerKey_SkillReducePer3 = "SkillReducePer3"   # 受到技能伤害减少3
-Def_PlayerKey_SkillReducePer4 = "SkillReducePer4"   # 受到技能伤害减少4
-Def_PlayerKey_SkillReducePer5 = "SkillReducePer5"   # 受到技能伤害减少5
-Def_PlayerKey_SkillReducePer6 = "SkillReducePer6"   # 受到技能伤害减少6
-Def_PlayerKey_SkillReducePer7 = "SkillReducePer7"   # 受到技能伤害减少7
 
 #功能索引ShareDefine.Def_AttrFruitFuncList
 Def_PlayerKey_FruitAttr = "FruitAttr_%s_%s" # 属性果实增加的属性,参数为(功能索引, 物品效果id)
 Def_PlayerKey_FruitFightPowerEx = "FruitFightPowerEx_%s" # 属性果实增加的附加战力,参数为(功能索引)
-Def_PlayerKey_FamilyLVLeave = "FamilyLVLeave" # 离开的最后一个家族的等级
 
 Def_PDict_QueryTechLVUPState = "QueryTechLVUPState"  # 查询科技等级提升状态
 
 Def_PDict_PKStateTick = "PKStateTick"  # PK状态tick,只要有一方发起攻击,双方均进入PK状态
 Def_PDict_BossStateTick = "BossStateTick"  # boss状态tick,攻击boss即进入boss状态
 Def_PDict_MapAreaExpTick = "MapAreaExpTick"  # 给场景经验tick
-# 装备累计基础属性
-Def_PDict_EquipTotalBaseMinAtk = "EquipTotalBaseMinAtk"  # 装备累计基础最小攻击
-Def_PDict_EquipTotalBaseMaxAtk = "EquipTotalBaseMaxAtk"  # 装备累计基础最大攻击
-Def_PDict_EquipTotalBaseDef = "EquipTotalBaseDef"  # 装备累计基础防御
-Def_PDict_EquipTotalBaseHP = "EquipTotalBaseHP"  # 装备累计基础生命
 
 #---玩家字典KEY,存于数据库---
 #===========================================================================
@@ -3877,13 +3844,6 @@
 Def_PDict_ChatBoxStar = "ChatBoxStar_%s"  # 星级,参数(气泡ID)
 Def_PDict_EmojiPackState = "EmojiPackState_%s"  # 表情包状态,参数(key编号)
 Def_PDict_EmojiPackEndTime = "EmojiPackEndTime_%s"  # 到期时间戳,0为永久,参数(表情包ID)
-
-#冰晶矿脉
-Def_PDict_IceLodeStarAwardRecord = "IceLodeStarAwardRecord" #星级奖励领奖记录
-Def_PDict_IceLodeHasSweep = "IceLodeHasSweep" #今日是否已扫荡过
-Def_PDict_IceLodeLastCheckTime = "IceLodeLastCheckTime" #上次补发星级奖励时间
-Def_PDict_IceLodeDayLV = "IceLodeDayLV" #今日等级
-Def_PDict_IceLodeIsInFBOnDay = "IceLodeIsInFBOnDay" #在副本里过天
 
 #助战
 Def_PDict_HelpBattleCheckInCount = "HelpBattleCheckInCount" #助战登记次数, 登记次数*10+今日是否登记过
@@ -4446,99 +4406,6 @@
                                 }
 #-------------------------------------------------------------------------------
 
-#------属性计算相关常量字符串定义
-AttrName_MinAtk = "MinAtk"  # 最小攻击力
-AttrName_MaxAtk = "MaxAtk"  # 最大攻击力
-AttrName_MinMAtk = "MinMAtk"  # 最小魔法攻击力
-AttrName_MaxMAtk = "MaxMAtk"  # 最大魔法攻击力
-AttrName_Atk = "Atk"  # 物理攻击力
-AttrName_MAtk = "MAtk"  # 魔法攻击
-AttrName_Def = "Def"    # 防御
-AttrName_DefRate = "Miss"   # 闪避
-AttrName_MagAtkPer = "MagAtkPer"    # 魔法攻击百分比
-AttrName_AtkPer = "AtkPer"  # 物理攻击百分比
-AttrName_MaxHP = "MaxHP"    # 最大血量
-AttrName_MaxMP = "MaxMP"    # 最大蓝量
-AttrName_MaxHPPer = "MaxHPPer"    # 最大血量百分比
-AttrName_MaxMPPer = "MaxMPPer"    # 最大蓝量百分比
-AttrName_IceAtk = "IceAtk"  # 冰攻
-AttrName_FireAtk = "FireAtk"    # 火攻
-AttrName_PoisonAtk = "PoisonAtk"    # 毒攻
-AttrName_ThunderAtk = "ThunderAtk"  # 雷攻
-AttrName_WindAtk = "WindAtk"  # 风攻
-AttrName_IceDef = "IceDef"  # 冰防
-AttrName_FireDef = "FireDef"    # 火攻
-AttrName_PoisonDef = "PoisonDef"    # 毒防
-AttrName_ThunderDef = "ThunderDef"  # 雷防
-AttrName_WindDef = "WindDef"  # 风攻
-AttrName_DamagePVPReduce = "DamagePVPReduce"  # PVP固定减伤
-AttrName_DamagePVP = "DamagePVP"  # pvp固定伤害
-AttrName_Speed = "Speed"    # 移动速度
-AttrName_BothAtk = "BothAtk"    # 双攻物魔
-AttrName_Hit = "Hit"    # 命中
-AttrName_AutoRestoreHPPer = "AutoRestoreHPPer"    # 生命自动回复
-AttrName_GreatHitRate = "GreatHitRate"    # 卓越一击几率
-AttrName_GreatHit = "GreatHit"    # 卓越一击伤害倍率
-AttrName_LuckyHitRate = "LuckyHitRate"    # 会心一击几率
-AttrName_LuckyHit = "LuckyHit"    # 会心一击伤害固定值
-AttrName_IgnoreDefRate = "IgnoreDefRate"    # 无视防御几率
-AttrName_AtkSpeed = "AtkSpeed"    # 攻击速度
-AttrName_ReduceSkillCDPer = "ReduceSkillCDPer"    # 减技能CD比例
-AttrName_BleedDamage = "BleedDamage"    # 流血伤害增加
-AttrName_KillBackHP = "KillBackHP"    # 击杀回血
-AttrName_KillBackMP = "KillBackMP"    # 击杀回蓝
-AttrName_DamBackPer = "DamBackPer"  # 反伤百分比
-AttrName_DropMoneyPer = "DropMoneyPer"  # 掉落金钱值增加
-AttrName_BothAtkPer = "BothAtkPer"    # 双攻物魔百分比
-AttrName_DefRatePer = "MissPer"     #闪避百分比
-AttrName_DefPer = "DefPer"    # 防御比率
-AttrName_HitPer = "HitPer"    # 命中比率
-AttrName_FightExpRate = "FightExpRate"  # 杀怪经验倍率
-AttrName_GameExpRate = "GameExpRate"  # 游戏事件经验倍率
-AttrName_SkillAtkRate = "SkillAtkRate"  # 技能伤害加成 (用作伤害加成)
-AttrName_AtkBackHP = "AtkBackHP"    # 攻击回复血量固定值
-AttrName_AtkBackHPPer = "AtkBackHPPer"    # 攻击回复血量比率
-AttrName_SuperHit = "SuperHit"  # 暴击伤害固定值
-AttrName_SuperHitRate = "SuperHitRate"  # 暴击概率
-AttrName_NPCHurtAddPer = "NPCHurtAddPer"  # 对怪物伤害加成
-AttrName_JobAHurtAddPer = "JobAHurtAddPer"  # 目标战士伤害加成
-AttrName_JobBHurtAddPer = "JobBHurtAddPer"  # 目标法师伤害加成
-AttrName_JobCHurtAddPer = "JobCHurtAddPer"  # 目标弓手伤害加成
-AttrName_NPCAtkReducePer = "NPCAtkReducePer"  # 怪物攻击伤害减免
-AttrName_JobAAtkReducePer = "JobAAtkReducePer"  # 战士攻击伤害减免
-AttrName_JobBAtkReducePer = "JobBAtkReducePer"  # 法师攻击伤害减免
-AttrName_JobCAtkReducePer = "JobCAtkReducePer"  # 弓手攻击伤害减免
-AttrName_LuckyHitReduce = "LuckyHitReduce"  # 会心一击伤害减免固定值
-AttrName_GreatHitReducePer = "GreatHitReducePer"  # 卓越一击伤害减免
-AttrName_SuperHitReduce = "SuperHitReduce"  # 暴击伤害减免固定值
-AttrName_IgnoreDefReducePer = "IgnoreDefReducePer"  # 无视防御伤害减免
-AttrName_LuckyHitRateReduce = "LuckyHitRateReduce"  # 抗会心一击概率
-AttrName_GreatHitRateReduce = "GreatHitRateReduce"  # 抗卓越一击概率
-AttrName_SuperHitRateReduce = "SuperHitRateReduce"  # 抗暴击概率
-AttrName_IgnoreDefRateReduce = "IgnoreDefRateReduce"  # 抗无视防御概率
-AttrName_BossFinalHurtPer = "BossFinalHurtPer"  # Boss最终伤害百分比
-AttrName_FinalHurtPer = "FinalHurtPer"  # 最终伤害百分比
-AttrName_FuhaoHitRate = "FuhaoHitRate"  # 富豪一击概率
-AttrName_FinalHurt = "FinalHurt"  # 最终固定伤害增加
-AttrName_FinalHurtReduce = "FinalHurtReduce"  # 最终固定伤害减少
-AttrName_BossIDHurt = "BossIDHurt"  # 对指定boss伤害加成固定值
-AttrName_BossIDHurtAddPer = "BossIDHurtAddPer"  # 对指定boss伤害加成倍率
-AttrName_DropEquipDoCount = "DropEquipDoCount"  # 装备掉落执行次数加成万分率
-AttrName_PetAtk = "PetAtk"  # 灵宠攻击
-AttrName_PetSkillAtkRate = "PetSkillAtkRate"  # 灵宠技能
-AttrName_PetDamPer = "PetDamPer"  # 灵宠伤害增加
-AttrName_ComboDefRate = "ComboDefRate"  # 抗连击概率
-AttrName_AtkBackRate = "AtkBackRate"  # 反击概率
-AttrName_AtkBackDefRate = "AtkBackDefRate"  # 抗反击概率
-AttrName_SuckHPPer = "SuckHPPer"  # 吸血比率
-AttrName_SuckHPDefPer = "SuckHPDefPer"  # 抗吸血比率
-AttrName_CurePer = "CurePer"  # 强化治疗
-AttrName_CureDefPer = "CureDefPer"  # 弱化治疗
-AttrName_PetStrengthenPer = "PetStrengthenPer"  # 强化灵兽
-AttrName_PetWeakenPer = "PetWeakenPer"  # 弱化灵兽
-AttrName_SuperHitHurtPer = "SuperHitHurtPer"  # 强化暴伤
-AttrName_SuperHitHurtDefPer = "SuperHitHurtDefPer"  # 弱化暴伤
-
 #物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
 #对应 Def_Calc_AllAttrType_MAX
 ItemEffect_AttrDict = {
@@ -4570,82 +4437,24 @@
     ShareDefine.Def_Effect_ToxinDef:[[TYPE_Calc_AttrPoisonDef], False, TYPE_Linear],
     ShareDefine.Def_Effect_ThunderDef:[[TYPE_Calc_AttrThunderDef], False, TYPE_Linear],    
     ShareDefine.Def_Effect_IgnoreDefRate:[[TYPE_Calc_IgnoreDefRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_IgnoreDefRateReduce:[[TYPE_Calc_IgnoreDefRateReduce], False, TYPE_Linear],
     ShareDefine.Def_Effect_DamBackPer:[[TYPE_Calc_DamBackPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_GreatHit:[[TYPE_Calc_GreatHit], False, TYPE_Linear],
     ShareDefine.Def_Effect_LuckyHit:[[TYPE_Calc_LuckyHit], False, TYPE_Linear],
     ShareDefine.Def_Effect_LuckyHitRate:[[TYPE_Calc_LuckyHitRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_LuckyHitRateReduce:[[TYPE_Calc_LuckyHitRateReduce], False, TYPE_Linear],
     ShareDefine.Def_Effect_Luck:[[TYPE_Calc_Luck], False, TYPE_Linear],
     ShareDefine.Def_Effect_ReduceSkillCDPer:[[TYPE_Calc_ReduceSkillCDPer], False, TYPE_Linear],
-    AttrName_MinAtk:[[TYPE_Calc_AttrATKMin], False, TYPE_Linear],
-    AttrName_MaxAtk:[[TYPE_Calc_AttrATKMax], False, TYPE_Linear],
-    #AttrName_MinMAtk:[[TYPE_Calc_AttrMATKMin], False, TYPE_Linear],
-    #AttrName_MaxMAtk:[[TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
-    AttrName_Def:[[TYPE_Calc_AttrDEF], False, TYPE_Linear],
-    AttrName_DefRate:[[TYPE_Calc_AttrMiss], False, TYPE_Linear],
-    AttrName_MaxHP:[[TYPE_Calc_AttrMaxHP], False, TYPE_Linear],
-    AttrName_MaxMP:[[TYPE_Calc_AttrMaxMP], False, TYPE_Linear],
-    AttrName_IceAtk:[[TYPE_Calc_AttrIceAtk], False, TYPE_Linear],
     ShareDefine.Def_Effect_IceAtk:[[TYPE_Calc_AttrIceAtk], False, TYPE_Linear],
-    AttrName_FireAtk:[[TYPE_Calc_AttrFireAtk], False, TYPE_Linear],
-    AttrName_PoisonAtk:[[TYPE_Calc_AttrPoisonAtk], False, TYPE_Linear],
-    AttrName_ThunderAtk:[[TYPE_Calc_AttrThunderAtk], False, TYPE_Linear],
-    AttrName_WindAtk:[[TYPE_Calc_AttrWindAtk], False, TYPE_Linear],
-    AttrName_IceDef:[[TYPE_Calc_AttrIceDef], False, TYPE_Linear],
     ShareDefine.Def_Effect_IceDef:[[TYPE_Calc_AttrIceDef], False, TYPE_Linear],
-    AttrName_FireDef:[[TYPE_Calc_AttrFireDef], False, TYPE_Linear],
-    AttrName_PoisonDef:[[TYPE_Calc_AttrPoisonDef], False, TYPE_Linear],
-    AttrName_ThunderDef:[[TYPE_Calc_AttrThunderDef], False, TYPE_Linear],
-    AttrName_WindDef:[[TYPE_Calc_AttrWindDef], False, TYPE_Linear],
-    AttrName_BothAtk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
-    #AttrName_BothAtk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax, 
-    #                   TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
-    AttrName_Hit:[[TYPE_Calc_AttrHit], False, TYPE_Linear],
-    AttrName_Atk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
-    #AttrName_Atk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
-    #AttrName_MAtk:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
-    AttrName_AutoRestoreHPPer:[[TYPE_Calc_HPRestorePer], False, TYPE_Linear],
     ShareDefine.Def_Effect_HPRestore:[[TYPE_Calc_HPRestorePer], False, TYPE_Linear],
-    AttrName_GreatHitRate:[[TYPE_Calc_GreatHitRate], False, TYPE_Linear],
-    AttrName_GreatHit:[[TYPE_Calc_GreatHit], False, TYPE_Linear],
-    AttrName_LuckyHitRate:[[TYPE_Calc_LuckyHitRate], False, TYPE_Linear],
-    AttrName_LuckyHit:[[TYPE_Calc_LuckyHit], False, TYPE_Linear],
-    AttrName_LuckyHitReduce:[[TYPE_Calc_LuckyHitReduce], False, TYPE_Linear],
-    AttrName_LuckyHitRateReduce:[[TYPE_Calc_LuckyHitRateReduce], False, TYPE_Linear],
-    AttrName_IgnoreDefRate:[[TYPE_Calc_IgnoreDefRate], False, TYPE_Linear],
-    AttrName_IgnoreDefRateReduce:[[TYPE_Calc_IgnoreDefRateReduce], False, TYPE_Linear],
-    AttrName_IgnoreDefReducePer:[[TYPE_Calc_IgnoreDefReducePer], False, TYPE_Linear],
-    AttrName_AtkSpeed:[[TYPE_Calc_AttrAtkSpeed], False, TYPE_Linear],
-    AttrName_ReduceSkillCDPer:[[TYPE_Calc_ReduceSkillCDPer], False, TYPE_Linear],
-    AttrName_KillBackHP:[[TYPE_Calc_KillBackHP], False, TYPE_Linear],
-    AttrName_KillBackMP:[[TYPE_Calc_KillBackMP], False, TYPE_Linear],
-    AttrName_DamBackPer:[[TYPE_Calc_DamBackPer], False, TYPE_Linear],
-    AttrName_DropMoneyPer:[[TYPE_Calc_DropMoneyPer], False, TYPE_Linear],
-    ShareDefine.Def_Effect_DropEquipPer:[[TYPE_Calc_DropEquipPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_DropMoneyPer:[[TYPE_Calc_DropMoneyPer], False, TYPE_Linear],
-    AttrName_FightExpRate:[[TYPE_Calc_AttrFightExpRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_FightExpRate:[[TYPE_Calc_AttrFightExpRate], False, TYPE_Linear],
-    AttrName_GameExpRate:[[TYPE_Calc_AttrGameExpRate], False, TYPE_Linear],
-    AttrName_SkillAtkRate:[[TYPE_Calc_SkillAtkRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_DamChanceDef:[[TYPE_Calc_DamChanceDef], False, TYPE_Linear],
-    ShareDefine.Def_Effect_FaintRate:[[TYPE_Calc_FaintRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_FaintDefRate:[[TYPE_Calc_FaintDefRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_SkillAtkRate:[[TYPE_Calc_SkillAtkRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_SkillAtkRateReduce:[[TYPE_Calc_SkillAtkRateReduce], False, TYPE_Linear],
     ShareDefine.Def_Effect_DamagePVP:[[TYPE_Calc_DamagePVP], False, TYPE_Linear],
     ShareDefine.Def_Effect_DamagePVPReduce:[[TYPE_Calc_DamagePVPReduce], False, TYPE_Linear],
     ShareDefine.Def_Effect_DamagePerPVP:[[TYPE_Calc_DamagePerPVP], False, TYPE_Linear],
     ShareDefine.Def_Effect_DamagePerPVPReduce:[[TYPE_Calc_DamagePerPVPReduce], False, TYPE_Linear],
-    ShareDefine.Def_Effect_ComboRate:[[TYPE_Calc_ComboRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_ComboDamPer:[[TYPE_Calc_ComboDamPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_BleedDamage:[[TYPE_Calc_BleedDamage], False, TYPE_Linear],
-    AttrName_BleedDamage:[[TYPE_Calc_BleedDamage], False, TYPE_Linear],
-    AttrName_AtkBackHPPer:[[TYPE_Calc_AtkBackHPPer], False, TYPE_Linear],
-    ShareDefine.Def_Effect_AtkBackHP:[[TYPE_Calc_AtkBackHPPer], False, TYPE_Linear],
-    AttrName_SuperHitRate:[[TYPE_Calc_SuperHitRate], False, TYPE_Linear],
-    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],
@@ -4653,45 +4462,11 @@
     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],
-    AttrName_NPCAtkReducePer:[[TYPE_Calc_NPCAtkReducePer], False, TYPE_Linear],
-    AttrName_JobAAtkReducePer:[[TYPE_Calc_JobAAtkReducePer], False, TYPE_Linear],
-    AttrName_JobBAtkReducePer:[[TYPE_Calc_JobBAtkReducePer], False, TYPE_Linear],
-    AttrName_JobCAtkReducePer:[[TYPE_Calc_JobCAtkReducePer], False, TYPE_Linear],
-    AttrName_GreatHitReducePer:[[TYPE_Calc_GreatHitReducePer], False, TYPE_Linear],
-    AttrName_SuperHitReduce:[[TYPE_Calc_SuperHitReduce], False, TYPE_Linear],
-    AttrName_GreatHitRateReduce:[[TYPE_Calc_GreatHitRateReduce], False, TYPE_Linear],
-    AttrName_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear],
     ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear],
-    AttrName_DamagePVPReduce:[[TYPE_Calc_DamagePVPReduce], False, TYPE_Linear],
-    AttrName_DamagePVP:[[TYPE_Calc_DamagePVP], False, TYPE_Linear],
-    AttrName_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear],
-    AttrName_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],
-    AttrName_FuhaoHitRate:[[TYPE_Calc_FuhaoHitRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_FinalHurt:[[TYPE_Calc_FinalHurt], False, TYPE_Linear],
     ShareDefine.Def_Effect_FinalHurtReduce:[[TYPE_Calc_FinalHurtReduce], False, TYPE_Linear],
-    AttrName_FinalHurt:[[TYPE_Calc_FinalHurt], False, TYPE_Linear],
-    AttrName_FinalHurtReduce:[[TYPE_Calc_FinalHurtReduce], False, TYPE_Linear],
-    AttrName_BossIDHurt:[[TYPE_Calc_BossIDHurt], False, TYPE_Linear],
-    AttrName_BossIDHurtAddPer:[[TYPE_Calc_BossIDHurtAddPer], False, TYPE_Linear],
-    AttrName_DropEquipDoCount:[[TYPE_Calc_DropEquipDoCount], False, TYPE_Linear],
-    AttrName_Speed:[[TYPE_Calc_AttrSpeed], False, TYPE_Linear],
     ShareDefine.Def_Effect_Speed:[[TYPE_Calc_AttrSpeed], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PetAtk:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
-    AttrName_PetAtk:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PetMinAtk:[[TYPE_Calc_PetMinAtk], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PetMaxAtk:[[TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PetDamPer:[[TYPE_Calc_PetDamPer], False, TYPE_Linear],
-    AttrName_PetDamPer:[[TYPE_Calc_PetDamPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_PetSkillAtkRate:[[TYPE_Calc_PetSkillAtkRate], False, TYPE_Linear],
-    AttrName_PetSkillAtkRate:[[TYPE_Calc_PetSkillAtkRate], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PerLVAtk:[[TYPE_Calc_PerLVAtk], False, TYPE_Linear],
-    ShareDefine.Def_Effect_PerLVMaxHP:[[TYPE_Calc_PerLVMaxHP], False, TYPE_Linear],
-    ShareDefine.Def_Effect_MaxProDef:[[TYPE_Calc_MaxProDef], False, TYPE_Linear],
-    ShareDefine.Def_Effect_ProDefHPPer:[[TYPE_Calc_ProDefHPPer], False, TYPE_Linear],
-    ShareDefine.Def_Effect_ProDefAbsorb:[[TYPE_Calc_ProDefAbsorb], False, TYPE_Linear],
     ShareDefine.Def_Effect_OnlyFinalHurt:[[TYPE_Calc_OnlyFinalHurt], False, TYPE_Linear],
     ShareDefine.Def_Effect_PVPAtkBackHP:[[TYPE_Calc_PVPAtkBackHP], False, TYPE_Linear],
     ShareDefine.Def_Effect_NormalHurt:[[TYPE_Calc_NormalHurt], False, TYPE_Linear],
@@ -4699,7 +4474,6 @@
     ShareDefine.Def_Effect_FabaoHurt:[[TYPE_Calc_FabaoHurt], False, TYPE_Linear],
     ShareDefine.Def_Effect_FabaoHurtPer:[[TYPE_Calc_FabaoHurtPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear], # 暴击概率抗性
-    ShareDefine.Def_Effect_LuckyHitReduce:[[TYPE_Calc_LuckyHitReduce], False, TYPE_Linear],# 会心一击伤害固定减伤
     ShareDefine.Def_Effect_DamagePVE:[[TYPE_Calc_DamagePVE], False, TYPE_Linear],  # PVE固定伤害
     ShareDefine.Def_Effect_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear],   # Boss最终伤害万分率
     ShareDefine.Def_Effect_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],   # 最终伤害万分率
@@ -4729,15 +4503,10 @@
     ShareDefine.Def_Effect_FamilyWarAtkPer:[[TYPE_Calc_FamilyWarAtkPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_FamilySitExpPer:[[TYPE_Calc_FamilySitExpPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
-    AttrName_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
-    AttrName_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
-    AttrName_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
     ShareDefine.Def_Effect_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
-    AttrName_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
-    AttrName_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_CurePer:[[TYPE_Calc_CurePer], False, TYPE_Linear],
     ShareDefine.Def_Effect_CureDefPer:[[TYPE_Calc_CureDefPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_PetStrengthenPer:[[TYPE_Calc_PetStrengthenPer], False, TYPE_Linear],
@@ -4754,23 +4523,10 @@
     ShareDefine.Def_Effect_MissRate:[[TYPE_Calc_AttrMiss], False, TYPE_NoLinear],
     #ShareDefine.Def_Effect_AddMAtkByPer:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
     ShareDefine.Def_Effect_AddAtkByPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
-    ShareDefine.Def_Effect_PetAtkPer:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_NoLinear],
     ShareDefine.Def_Effect_SpeedPer:[[TYPE_Calc_AttrSpeed], False, TYPE_NoLinear],
     ShareDefine.Def_Effect_LuckPer:[[TYPE_Calc_Luck], False, TYPE_NoLinear],
     ShareDefine.Def_Effect_IceAtkPer:[[TYPE_Calc_AttrIceAtk], False, TYPE_NoLinear],
     ShareDefine.Def_Effect_IceDefPer:[[TYPE_Calc_AttrIceDef], False, TYPE_NoLinear],
-    #ShareDefine.Def_Effect_AddAtkByPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
-    #AttrName_MagAtkPer:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
-    AttrName_AtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
-    #AttrName_AtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
-    AttrName_BothAtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
-    #AttrName_BothAtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax, 
-    #                   TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
-    AttrName_DefRatePer:[[TYPE_Calc_AttrMiss], False, TYPE_NoLinear],
-    AttrName_MaxHPPer:[[TYPE_Calc_AttrMaxHP], False, TYPE_NoLinear],
-    AttrName_MaxMPPer:[[TYPE_Calc_AttrMaxMP], False, TYPE_NoLinear],
-    AttrName_DefPer:[[TYPE_Calc_AttrDEF], False, TYPE_NoLinear],
-    AttrName_HitPer:[[TYPE_Calc_AttrHit], False, TYPE_NoLinear],
     
     #功能交叉影响的战斗非线性
     ShareDefine.Def_Effect_BaseAtkAddPer:[[TYPE_Calc_BaseAtkAddPer], False, TYPE_NoLinear],
@@ -5782,7 +5538,7 @@
 Def_SkillFuncType_ShentongSkill,     #20 神通技能
 Def_SkillFuncType_ElfSkill,     #21 精怪技能
 Def_SkillFuncType_GatherTheSoul,     #22 聚魂技能
-Def_SkillFuncType_TurnNormaAttack,  #23 回合普攻技能
+Def_SkillFuncType_TurnNormaSkill,  #23 回合普攻技能
 ) = range(24)
 
 # 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 658d84e..3c04f3a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -5491,58 +5491,6 @@
 
 
 #------------------------------------------------------
-# A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething
-
-class  tagCMBuySomething(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #14铜钱,15经验
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x30
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x30
-        self.Type = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuySomething)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 30 购买魔魂铜钱经验什么的 //tagCMBuySomething:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Type
-                                )
-        return DumpString
-
-
-m_NAtagCMBuySomething=tagCMBuySomething()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuySomething.Cmd,m_NAtagCMBuySomething.SubCmd))] = m_NAtagCMBuySomething
-
-
-#------------------------------------------------------
 #A5 01 坐骑激活 #tagPlayerActivateHorse
 
 class  tagPlayerActivateHorse(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 1638a89..8777856 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -46639,94 +46639,6 @@
 
 
 #------------------------------------------------------
-# B2 04 冰晶矿脉信息通知 #tagMCIceLodeInfo
-
-class  tagMCIceLodeInfo(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)// 今日玩法数量
-    LineList = list()    #(vector<BYTE> LineList)// 玩法列表
-    AwardRecord = 0    #(DWORD AwardRecord)// 领奖记录
-    HasSweep = 0    #(BYTE HasSweep)// 是否已扫荡
-    DayLV = 0    #(WORD DayLV)// 今日等级
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Cnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.LineList.append(value)
-        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HasSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.DayLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x04
-        self.Cnt = 0
-        self.LineList = list()
-        self.AwardRecord = 0
-        self.HasSweep = 0
-        self.DayLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1 * self.Cnt
-        length += 4
-        length += 1
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteBYTE(data, self.LineList[i])
-        data = CommFunc.WriteDWORD(data, self.AwardRecord)
-        data = CommFunc.WriteBYTE(data, self.HasSweep)
-        data = CommFunc.WriteWORD(data, self.DayLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                LineList:%s,
-                                AwardRecord:%d,
-                                HasSweep:%d,
-                                DayLV:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "...",
-                                self.AwardRecord,
-                                self.HasSweep,
-                                self.DayLV
-                                )
-        return DumpString
-
-
-m_NAtagMCIceLodeInfo=tagMCIceLodeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCIceLodeInfo.Head.Cmd,m_NAtagMCIceLodeInfo.Head.SubCmd))] = m_NAtagMCIceLodeInfo
-
-
-#------------------------------------------------------
 # B2 03 公共副本扫荡信息 #tagMCPubFBSweepData
 
 class  tagMCPubFBSweep(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
index f9cc3d6..7a9eb91 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
@@ -985,37 +985,6 @@
     SendEventPack("PlayerFamily_%s"%eventName, dataDict, curPlayer)
     return
 
-
-## 获得威望值
-#  @param curPlayer 玩家实例
-#  @param addPrestige 添加值
-#  @param addType 原因
-#  @return
-def DR_GetPrestigeValue(curPlayer, addPrestige, addType):
-    return
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), 
-                'AccID':curPlayer.GetAccID(),
-                "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}
-    
-    SendEventPack("GetPrestigeValue", dataDict, curPlayer)
-    return
-
-
-## 失去威望值
-#  @param curPlayer 玩家实例
-#  @param addPrestige 添加值
-#  @param addType 原因
-#  @return
-def DR_LostPrestigeValue(curPlayer, addPrestige, addType):
-    return
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), 
-                'AccID':curPlayer.GetAccID(),
-                "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}
-    
-    SendEventPack("LostPrestigeValue", dataDict, curPlayer)
-    return
-
-
 ## 记录错误信息
 #  @param info: 错误信息
 #  @param playerID: 玩家ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py
deleted file mode 100644
index 3007dee..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package Operate_PlayerBuyZhenQi
-# @todo:祈愿
-# @author sgj
-# @date 2017-10-31 11:30
-# @version 1.0
-#
-
-#------------------------------------------------------------------------------ 
-#"""Version = 2017-10-31 11:30"""
-#------------------------------------------------------------------------------ 
-# 导入
-import GameWorld
-import ChConfig
-import PlayerControl
-import NetPackCommon
-import ChPyNetSendPack
-import IPY_GameWorld
-import IpyGameDataPY
-import PlayerVip
-import time
-import ShareDefine
-import GameFuncComm
-import ItemCommon
-import ItemControler
-import PlayerSuccess
-import PlayerActivity
-import PlayerBossReborn
-import PlayerFairyCeremony
-import PlayerNewFairyCeremony
-import PlayerFeastTravel
-import PlayerActLogin
-import PlayerActTask
-import PlayerWeekParty
-#------------------------------------------------------------------------------ 
-
-#获取金币祈愿奖励
-def GetMoneyPrayAward():
-    return IpyGameDataPY.GetFuncCfg("MoneyPray", 2)
-#获取金币祈愿消耗
-def GetMoneyPrayCost():
-    return IpyGameDataPY.GetFuncCfg("MoneyPray", 1)
-#获取经验祈愿奖励
-def GetExpPrayAward():
-    return IpyGameDataPY.GetFuncCfg("ExpPray", 2)
-#获取经验起眼消耗
-def GetExpPrayCost():
-    return IpyGameDataPY.GetFuncCfg("ExpPray", 1)
-
-
-#祈愿类型列表
-TotalPrayList = [ChConfig.VIPPrivilege_MoneyPray, ChConfig.VIPPrivilege_ExpPray]
-
-
-#struct    tagCMBuySomething
-#{
-#    tagHead        Head;
-#    BYTE        Type;  //14铜钱,15经验
-#};
-## A5 30 玩家祈愿
-#  @param index: 玩家索引
-#  @param clientData: 客户端封包数据
-#  @param tick: 时间戳
-#  @return: None
-def OnPlayerBuySomething(index, clientData, tick):
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    buyType = clientData.Type  #购买的类型
-    #祈愿类型错误,不处理
-    if buyType not in TotalPrayList:
-        GameWorld.DebugLog("祈愿类型错误---buyType:%s" % buyType)
-        return
-    if buyType == ChConfig.VIPPrivilege_MoneyPray:
-        if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineMoney):
-            GameWorld.DebugLog("金币祈愿功能未开启")
-            return
-    elif buyType == ChConfig.VIPPrivilege_ExpPray:
-        if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineExp):
-            GameWorld.DebugLog("经验祈愿功能未开启")
-            return
-    
-    totalCnt = PlayerVip.GetPrivilegeValue(curPlayer, buyType)
-    curCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % buyType)
-    cnt = curCnt + 1 #参数用
-    #金币祈愿
-    if buyType == ChConfig.VIPPrivilege_MoneyPray:
-        historyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType)
-        #判断免费祈愿CD时间
-        needTime = __GetFreeCD(curPlayer)
-        if needTime:
-            itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-            needItemID = IpyGameDataPY.GetFuncCfg('FreeExpPrayItem', 2)
-            hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, 1)
-            if not hasEnough and totalCnt <= curCnt:
-                GameWorld.DebugLog("金币祈愿次数已经用完,当前次数:%s,每日最大次数:%s" % (curCnt, totalCnt))
-                return
-            isCostItem = False #是否使用了物品
-            if hasEnough:
-                #优先用物品
-                isCostItem = True
-                ItemCommon.ReduceItem(curPlayer, itemPack, itemList, 1, False)
-            else:
-            
-                infoDict = {ChConfig.Def_Cost_Reason_SonKey:buyType}
-                needGold = eval(GetMoneyPrayCost())
-                if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_Pray, infoDict):
-                    GameWorld.DebugLog("仙玉不足!costGold=%s" % needGold)
-                    return
-            if not isCostItem: #用物品不增加次数
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
-        else:
-            curTime = int(time.time())
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FreePrayTime, curTime)
-            
-        preCnt, fixMoney = IpyGameDataPY.GetFuncEvalCfg("MoneyPray", 4)
-        GameWorld.DebugLog('11111fixMoney=%s,historyCnt=%s,preCnt=%s' % (fixMoney, historyCnt, preCnt))
-        if fixMoney and historyCnt < preCnt:
-            addMoney = fixMoney
-            #更新历史次数(特殊收益次数达到后不再更新)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType, historyCnt + 1)
-        else:
-            addMoney = GetMoneyPrayAward()
-        addDataDict = {ChConfig.Def_Give_Reason_SonKey:"MoneyPray"}
-        #20190917 by hxp 祈愿金币改为绑玉
-        giveMoneyType = IPY_GameWorld.TYPE_Price_Gold_Paper
-        PlayerControl.GiveMoney(curPlayer, giveMoneyType, addMoney, ChConfig.Def_GiveMoney_Pray, addDataDict, False)
-        PlayerControl.NotifyCode(curPlayer, 'MoneyPray_HowMuch', [addMoney, giveMoneyType])
-        ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", moneyInfo={giveMoneyType:addMoney})
-        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_MoneyPray, 1)
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MoneyPray)
-        
-    #经验祈愿    
-    elif buyType == ChConfig.VIPPrivilege_ExpPray:
-        itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-        needItemID = IpyGameDataPY.GetFuncCfg('FreeExpPrayItem')
-        hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, 1)
-        if not hasEnough and totalCnt <= curCnt:
-            GameWorld.DebugLog("经验祈愿次数已经用完,当前次数:%s,每日最大次数:%s" % (curCnt, totalCnt))
-            return
-        playerLV = curPlayer.GetLV()
-        lvMsg = PlayerControl.GetPlayerLVIpyData(playerLV)
-        if not lvMsg:
-            GameWorld.DebugLog("玩家等级信息错误")
-            return
-        isCostItem = False #是否使用了物品
-        if hasEnough:
-            #优先用物品
-            isCostItem = True
-            ItemCommon.ReduceItem(curPlayer, itemPack, itemList, 1, False)
-        else:
-            infoDict = {ChConfig.Def_Cost_Reason_SonKey:buyType}
-            needGold = eval(GetExpPrayCost())
-            GameWorld.DebugLog("需要仙玉--needGold--%s" % needGold)
-            if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_Pray, infoDict):
-                GameWorld.DebugLog("仙玉不足!costGold=%s" % needGold)
-                return   
-    
-        reExp = lvMsg.GetReExp()
-        exp = PlayerControl.GetLVUPTotalExpNeed(lvMsg)
-        addExp = eval(GetExpPrayAward())
-        PlayerControl.PlayerControl(curPlayer).AddExp(addExp)
-        PlayerControl.NotifyCode(curPlayer, 'ExpPray_HowMuch', [addExp])
-        ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", exp=addExp)
-        if not isCostItem: #用物品不增加次数
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
-        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_ExpPray, 1)
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_ExpPray)
-    else:
-        return
-    #成就
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Pray, 1, [buyType])
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_Pray, 1)
-    
-    # 每日活动
-    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Pray)
-    PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Pray, 1)
-    PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Pray, 1)
-    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_Pray, 1)
-    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pray, 1)
-    PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Pray, 1)
-    Sync_NotifyDataChange(curPlayer, [buyType])
-    return
-
-#获取免费金币祈愿CD
-def __GetFreeCD(curPlayer):
-    lastTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreePrayTime)
-    curTime = int(time.time())
-    passTime = curTime - lastTime
-    cdTime = IpyGameDataPY.GetFuncCfg("MoneyPray", 3)
-    needTime = max(0, cdTime - passTime)
-    return needTime
-    
-## OnDay操作,通知客户端,购买次数变了
-#  @param curPlayer: 玩家实例
-#  @return None
-def PlayerOnDay(curPlayer):
-    needSyncList = []
-    for prayType in TotalPrayList:
-        hasPrayCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % prayType)
-        if not hasPrayCnt:
-            continue
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % prayType, 0)
-        needSyncList.append(prayType)
-    Sync_NotifyDataChange(curPlayer, needSyncList)
-    return
-        
-
-## 通知客户端,购买次数变了
-#  @param curPlayer: 玩家实例
-#  @return None
-def Sync_NotifyDataChange(curPlayer, prayType=[]):
-    if prayType == []:
-        prayList = TotalPrayList
-    else:
-        prayList = prayType
-    pack = ChPyNetSendPack.tagMCBuySomething()
-    for buyType in prayList:
-        subPack = ChPyNetSendPack.tagMCSingleBuySomethingInfo()
-        subPack.Type = buyType
-        subPack.BuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % buyType)
-        subPack.HistoryBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType)
-        
-        if buyType == ChConfig.VIPPrivilege_MoneyPray:
-            subPack.LastFreeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreePrayTime)
-        pack.Infos.append(subPack)
-        GameWorld.DebugLog("通知祈愿次数--buyType:%s--BuyCnt:%s--LastFreeTime%s" % (subPack.Type, subPack.BuyCnt, subPack.LastFreeTime))
-    pack.Cnt = len(pack.Infos)
-    NetPackCommon.SendFakePack(curPlayer, pack)
-    
-
-## 玩家登录时通知
-#  @param curPlayer: 玩家实例
-#  @return None
-def DoPlayerLogin(curPlayer):
-    Sync_NotifyDataChange(curPlayer)
-    return
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
index 79568c9..514a9a4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
@@ -33,6 +33,10 @@
 #===============================================================================
 #---------------------------------------------------------------------
 
+import traceback
+import random
+import math
+
 #---------------------------------------------------------------------
 #公式字典名注册
 #注册公式字典名方式 'Facl_DistKey_ + KeyName' (前缀名用于区别策划配置txt公式Key)
@@ -74,3 +78,71 @@
     AllFormulaDist = {}
     #GameWorld.Log('ClearCompileFormulaDist Sucess AllFormulaDist = %s'%(AllFormulaDist))
     return
+
+def Eval(formulaKey, formula, paramDict, toInt=True, ceil=False, playerID=0):
+    """ 动态计算
+    :param formulaKey: 公式编译缓存key
+    :param formula: 公式字符串,如 "int(Atk*10 + MaxHP)"
+    :param paramDict: 参数字典,如 {'Atk': 100, 'MaxHP': 5000}
+    :param toInt: 是否转为整数
+    :param ceil: 是否向上取整
+    :return: 计算结果
+    """
+    compileFormula = GetCompileFormula(formulaKey, formula)
+    
+    safe_env = {
+        '__builtins__': None,
+        # 基础数学函数
+        'abs': abs,
+        'min': min,
+        'max': max,
+        'pow': pow,
+        'round': round,
+        # 类型转换
+        'int': int,
+        'float': float,
+        'bool': bool,
+        # 数学常数
+        #'pi': math.pi,
+        #'e': math.e
+    }
+    safe_env.update(paramDict)
+    try:
+        # 执行计算
+        value = eval(compileFormula, safe_env)
+        if ceil:
+            value = math.ceil(value)
+        if toInt:
+            value = int(value)
+        return value
+    except:
+        import GameWorld
+        GameWorld.SendGameErrorEx("FormulaEvalError", "formulaKey:%s, %s, %s" % (formulaKey, paramDict, traceback.format_exc()), playerID)
+        return 0
+    
+def test():
+    attrParamDict={
+    'lineupHaloPer': 0, 'awakeTalentPer': 0, 'breakLVPer': 0, 'breakLVValue': 0, 'bookValue': 0, 'lineupStarAddPer': 0, 'lvValue': 0, 
+    'heroSelfValue': 0, 'awakeTalentValue': 0, 'fetterPer': 0, 'lineupBreakLVAddPer': 0, 
+    'starTalentValue': 30, 'inheritPer': 1, 'equipValue': 269, 'fetterValue': 0, 'lineupLVAddPer': 0, 'heroSelfPer': 0, 
+    'bookPer': 0, 'starTalentPer': 0, 'lineupHaloValue': 0, 'lineupInitAddPer': 0
+    }
+    
+    formula = "(lvValue+equipValue+bookValue)*inheritPer+(heroSelfValue+lineupHaloValue+starTalentValue+breakLVValue+awakeTalentValue)+fetterValue"
+    formula = "(lvValue+equipValue+bookValue)*(1+lineupHaloPer+bookPer+lineupInitAddPer+lineupLVAddPer+lineupBreakLVAddPer+lineupStarAddPer)*(inheritPer+fetterPer+starTalentValue+breakLVValue+awakeTalentValue)+heroSelfValue"
+    
+    import time
+    doCount = 1
+    
+    time1 = time.time()
+    for _ in xrange(doCount):
+        value = Eval("aaa", formula, attrParamDict)
+        print  "公式 计算结果: ", value
+    print "use time %s" % (time.time() - time1)
+    return
+
+## 使用示例
+#if __name__ == "__main__":
+#    test()
+    
+        
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
deleted file mode 100644
index 8d7d709..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.AddLegendAttr
-#
-# @todo:添加/重新生成传奇属性
-# @author hxp
-# @date 2017-08-23
-# @version 1.0
-#
-# 详细描述: 添加/重新生成传奇属性
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-08-23 23:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import ItemControler
-import IPY_GameWorld
-
-#---------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param cmdList 参数列表 [index,attrIndexList]
-#  @return None
-def OnExec(curPlayer, cmdList):
-    cmdlen = len(cmdList)
-    if cmdlen < 1:
-        GameWorld.DebugAnswer(curPlayer, "重新随机传奇属性: AddLegendAttr 背包格子索引")
-        GameWorld.DebugAnswer(curPlayer, "部位所有传奇属性: AddLegendAttr 背包格子索引 1")
-        return
-    
-    #获取物品
-    index = cmdList[0]
-    curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(index)
-    if not ItemCommon.CheckItemIsEquip(curItem):
-        GameWorld.DebugAnswer(curPlayer, "非装备无法获得传奇属性!")
-        return
-    
-    isAllAttr = cmdList[1] if len(cmdList) > 1 else 0
-    legendAttrInfo = ItemControler.GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr)
-    if not legendAttrInfo:
-        GameWorld.DebugAnswer(curPlayer, "获取该装备传奇属性失败或没有传奇属性!")
-        return
-    ItemControler.SetEquipLegendAttr(curItem, legendAttrInfo)
-    
-    if legendAttrInfo[2]:
-        GameWorld.DebugAnswer(curPlayer, "神传奇属性:%s %s" % (legendAttrInfo[2], legendAttrInfo[3]))
-    if legendAttrInfo[4]:
-        GameWorld.DebugAnswer(curPlayer, "仙传奇属性:%s %s" % (legendAttrInfo[4], legendAttrInfo[5]))
-    if legendAttrInfo[6]:
-        GameWorld.DebugAnswer(curPlayer, "极传奇属性:%s %s" % (legendAttrInfo[6], legendAttrInfo[7]))
-    if legendAttrInfo[0]:
-        GameWorld.DebugAnswer(curPlayer, "传奇属性:%s %s" % (legendAttrInfo[0], legendAttrInfo[1]))
-        
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
index 096f80d..7a9c3ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
@@ -17,7 +17,6 @@
 
 import GameWorld
 import PlayerControl
-import PlayerWorldAverageLv
 import ChConfig
 import PlayerVip
 
@@ -30,7 +29,6 @@
 def OnExec(curPlayer, cmdList):
     GameWorld.DebugAnswer(curPlayer, "===== 总倍率: %s" % PlayerControl.GetPlayerExpRate(curPlayer))
     GameWorld.DebugAnswer(curPlayer, "系统功能及Buff=%s" % curPlayer.GetFightExpRate())
-    GameWorld.DebugAnswer(curPlayer, "世界等级加成=%s" % PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer))
     GameWorld.DebugAnswer(curPlayer, "队伍加成=%s" % curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate))
     GameWorld.DebugAnswer(curPlayer, "VIP加成=%s" % PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate))
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 06009e9..2f512de 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -21,6 +21,74 @@
 import ChNetSendPack
 import TurnAttack
 
+# 通用属性值字典key
+Def_AttrValue = "AttrValue_%s"
+
+#战斗单位属性通用接口, 仅配置需要指定函数的属性ID即可,没有的话通过通用接口可直接 GetAttrValue, SetAttrValue
+#同个属性Get, Set 写在一起,方便维护 [Get, Set]
+ObjProperty_AttrIDDict = {
+    ChConfig.AttrID_Atk:[lambda curObj:curObj.GetMaxAtk(), lambda curObj, value:curObj.SetMaxAtk(value)],
+    ChConfig.AttrID_Def:[lambda curObj:curObj.GetDef(), lambda curObj, value:curObj.SetDef(value)],
+    ChConfig.AttrID_MaxHP:[lambda curObj:GetMaxHP(curObj), lambda curObj, value:SetMaxHP(curObj, value)],
+    ChConfig.AttrID_HP:[lambda curObj:GetHP(curObj), lambda curObj, value:SetHP(curObj, value)],
+    ChConfig.AttrID_AtkSpeed:[lambda curObj:GetAtkSpeed(curObj), lambda curObj, value:SetAtkSpeed(curObj, value)],
+    ChConfig.AttrID_XP:[lambda curObj:GetXP(curObj), lambda curObj, value:SetXP(curObj, value)],
+    ChConfig.AttrID_StunRate:[lambda curObj:GetFaintRate(curObj), lambda curObj, value:SetFaintRate(curObj, value)],
+    ChConfig.AttrID_StunRateDef:[lambda curObj:GetFaintDefRate(curObj), lambda curObj, value:SetFaintDefRate(curObj, value)],
+    ChConfig.AttrID_SuperHitRate:[lambda curObj:GetSuperHitRate(curObj), lambda curObj, value:SetSuperHitRate(curObj, value)],
+    ChConfig.AttrID_SuperHitRateDef:[lambda curObj:GetSuperHitRateReduce(curObj), lambda curObj, value:SetSuperHitRateReduce(curObj, value)],
+    ChConfig.AttrID_ComboRate:[lambda curObj:GetComboRate(curObj), lambda curObj, value:SetComboRate(curObj, value)],
+    ChConfig.AttrID_ComboRateDef:[lambda curObj:GetComboDefRate(curObj), lambda curObj, value:SetComboDefRate(curObj, value)],
+    ChConfig.AttrID_MissRate:[lambda curObj:GetMissRate(curObj), lambda curObj, value:SetMissRate(curObj, value)],
+    ChConfig.AttrID_MissRateDef:[lambda curObj:GetMissDefRate(curObj), lambda curObj, value:SetMissDefRate(curObj, value)],
+    ChConfig.AttrID_ParryRate:[lambda curObj:GetParryRate(curObj), lambda curObj, value:SetParryRate(curObj, value)],
+    ChConfig.AttrID_ParryRateDef:[lambda curObj:GetParryRateDef(curObj), lambda curObj, value:SetParryRateDef(curObj, value)],
+    ChConfig.AttrID_SuckHPPer:[lambda curObj:GetSuckHPPer(curObj), lambda curObj, value:SetSuckHPPer(curObj, value)],
+    ChConfig.AttrID_SuckHPPerDef:[lambda curObj:GetSuckHPDefPer(curObj), lambda curObj, value:SetSuckHPDefPer(curObj, value)],
+    ChConfig.AttrID_FinalDamPer:[lambda curObj:GetFinalHurtPer(curObj), lambda curObj, value:SetFinalHurtPer(curObj, value)],
+    ChConfig.AttrID_FinalDamPerDef:[lambda curObj:GetFinalHurtReducePer(curObj), lambda curObj, value:SetFinalHurtReducePer(curObj, value)],
+    ChConfig.AttrID_PhyDamPer:[lambda curObj:GetPhyDamPer(curObj), lambda curObj, value:SetPhyDamPer(curObj, value)],
+    ChConfig.AttrID_PhyDamPerDef:[lambda curObj:GetPhyDamPerDef(curObj), lambda curObj, value:SetPhyDamPerDef(curObj, value)],
+    ChConfig.AttrID_MagDamPer:[lambda curObj:GetMagDamPer(curObj), lambda curObj, value:SetMagDamPer(curObj, value)],
+    ChConfig.AttrID_MagDamPerDef:[lambda curObj:GetMagDamPerDef(curObj), lambda curObj, value:SetMagDamPerDef(curObj, value)],
+    ChConfig.AttrID_NormalSkillPer:[lambda curObj:GetNormalSkillPer(curObj), lambda curObj, value:SetNormalSkillPer(curObj, value)],
+    ChConfig.AttrID_NormalSkillPerDef:[lambda curObj:GetNormalSkillPerDef(curObj), lambda curObj, value:SetNormalSkillPerDef(curObj, value)],
+    ChConfig.AttrID_AngerSkillPer:[lambda curObj:GetAngerSkillPer(curObj), lambda curObj, value:SetAngerSkillPer(curObj, value)],
+    ChConfig.AttrID_AngerSkillPerDef:[lambda curObj:GetAngerSkillPerDef(curObj), lambda curObj, value:SetAngerSkillPerDef(curObj, value)],
+    ChConfig.AttrID_SuperDamPer:[lambda curObj:GetSuperHitHurtPer(curObj), lambda curObj, value:SetSuperHitHurtPer(curObj, value)],
+    ChConfig.AttrID_SuperDamPerDef:[lambda curObj:GetSuperHitHurtDefPer(curObj), lambda curObj, value:SetSuperHitHurtDefPer(curObj, value)],
+    ChConfig.AttrID_CurePer:[lambda curObj:GetCurePer(curObj), lambda curObj, value:SetCurePer(curObj, value)],
+    ChConfig.AttrID_CurePerDef:[lambda curObj:GetCureDefPer(curObj), lambda curObj, value:SetCureDefPer(curObj, value)],
+    ChConfig.AttrID_ShieldPer:[lambda curObj:GetShieldPer(curObj), lambda curObj, value:SetShieldPer(curObj, value)],
+    ChConfig.AttrID_ShieldPerDef:[lambda curObj:GetShieldPerDef(curObj), lambda curObj, value:SetShieldPerDef(curObj, value)],
+    ChConfig.AttrID_DOTPer:[lambda curObj:GetDOTPer(curObj), lambda curObj, value:SetDOTPer(curObj, value)],
+    ChConfig.AttrID_DOTPerDef:[lambda curObj:GetDOTPerDef(curObj), lambda curObj, value:SetDOTPerDef(curObj, value)],
+}
+
+def GetAttrValue(gameObj, attrID):
+    ## 通用的获取属性
+    if attrID in ObjProperty_AttrIDDict:
+        return ObjProperty_AttrIDDict[attrID][0](gameObj)
+    return gameObj.GetDictByKey(Def_AttrValue % attrID)
+
+def SetAttrValue(gameObj, attrID, value, isNotify=True):
+    ## 通用的设置属性
+    if attrID in ObjProperty_AttrIDDict:
+        ObjProperty_AttrIDDict[attrID][1](gameObj, value)
+    else:
+        gameObj.SetDict(Def_AttrValue % attrID, value)
+        
+    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+        # 卡牌项目,暂不需要通知玩家相关的属性,因为最终都体现在卡牌上,全部由前端自己计算
+        return
+    
+    if isNotify:
+        if attrID in ChConfig.CDBRefresh_AttrIDDict:
+            refreshType, isBig = ChConfig.CDBRefresh_AttrIDDict[attrID]
+            NotifyObjInfoRefresh(gameObj, refreshType, isBig)
+            
+    return
+
 # 关于血量的函数这里只包装最简单的超DWORD处理
 
 def GetMaxHP(gameObj):
@@ -59,10 +127,10 @@
     gameObj.SetBaseMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
     return
 
-def GetXP(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrXP)
+def GetXP(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_XP)
 def SetXP(gameObj, value, isNotify=True):
     ## XP值,用作怒气值
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrXP, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_XP, value)
     if isNotify:
         NotifyObjInfoRefresh(gameObj, IPY_GameWorld.CDBPlayerRefresh_XP, value)
     return
@@ -187,12 +255,8 @@
 
 def GetBloodShiledHurt(gameObj):
     ## 伤害值用于血盾抵消
-    hurt = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt)
-    hurtEx = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurtEx)
-    return hurtEx * ShareDefine.Def_PerPointValue + hurt
+    return 0
 def SetBloodShiledHurt(gameObj, value):
-    gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, value % ShareDefine.Def_PerPointValue)
-    gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurtEx, value / ShareDefine.Def_PerPointValue)
     return
 
 ## ---------------------------------------------------------
@@ -224,27 +288,94 @@
     SetSuperHitHurtDefPer(gameObj, 0)
     return
 
-def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
+def GetPetDamPer(gameObj): return 0
 def SetPetDamPer(gameObj, value): 
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetDamPer, value)
     return
 
-def GetFinalHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtPer)
+def GetFinalHurtPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_FinalDamPer)
 def SetFinalHurtPer(gameObj, value):
     ## 最终伤害百分比
-    gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_FinalDamPer, value)
     if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtPer, value)
+        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalDamPer, value)
     return
 
-def GetFinalHurtReducePer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReducePer)
+def GetFinalHurtReducePer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_FinalDamPerDef)
 def SetFinalHurtReducePer(gameObj, value):
     ## 最终伤害减免百分比
-    gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtReducePer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_FinalDamPerDef, value)
+    return
+
+def GetPhyDamPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_PhyDamPer)
+def SetPhyDamPer(gameObj, value): 
+    ## 物理增伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_PhyDamPer, value)
+    return
+
+def GetPhyDamPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_PhyDamPerDef)
+def SetPhyDamPerDef(gameObj, value): 
+    ## 物理减伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_PhyDamPerDef, value)
+    return
+
+def GetMagDamPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_MagDamPer)
+def SetMagDamPer(gameObj, value): 
+    ## 法术增伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_MagDamPer, value)
+    return
+
+def GetMagDamPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_MagDamPerDef)
+def SetMagDamPerDef(gameObj, value): 
+    ## 法术减伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_MagDamPerDef, value)
+    return
+
+def GetNormalSkillPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_NormalSkillPer)
+def SetNormalSkillPer(gameObj, value): 
+    ## 普技增伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_NormalSkillPer, value)
+    return
+
+def GetNormalSkillPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_NormalSkillPerDef)
+def SetNormalSkillPerDef(gameObj, value): 
+    ## 普技减伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_NormalSkillPerDef, value)
+    return
+
+def GetAngerSkillPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_AngerSkillPer)
+def SetAngerSkillPer(gameObj, value): 
+    ## 怒技增伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_AngerSkillPer, value)
+    return
+
+def GetAngerSkillPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_AngerSkillPerDef)
+def SetAngerSkillPerDef(gameObj, value): 
+    ## 怒技减伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_AngerSkillPerDef, value)
+    return
+
+def GetDOTPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_DOTPer)
+def SetDOTPer(gameObj, value): 
+    ## 持续增伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_DOTPer, value)
+    return
+
+def GetDOTPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_DOTPerDef)
+def SetDOTPerDef(gameObj, value): 
+    ## 持续减伤
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_DOTPerDef, value)
+    return
+
+def GetShieldPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ShieldPer)
+def SetShieldPer(gameObj, value): 
+    ## 强化护盾
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ShieldPer, value)
+    return
+
+def GetShieldPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ShieldPerDef)
+def SetShieldPerDef(gameObj, value): 
+    ## 弱化护盾
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ShieldPerDef, value)
     return
 
 def GetFaction(gameObj):
@@ -260,16 +391,9 @@
         gameObj.SetFaction(value)
     return
 
-def GetAtkSpeed(gameObj):
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        return gameObj.GetBattleValEx1()
-    return gameObj.GetDictByKey(ChConfig.AttrName_AtkSpeed)
+def GetAtkSpeed(gameObj): return 0
 def SetAtkSpeed(gameObj, value):
     ## 攻击速度
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        gameObj.SetBattleValEx1(value, True)
-    else:
-        gameObj.SetDict(ChConfig.AttrName_AtkSpeed, value)
     return
 
 def GetMissRate(gameObj): return gameObj.GetMiss()
@@ -287,167 +411,128 @@
     ## 暴击概率
     gameObj.SetSuperHitRate(value)
     return
-def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
+def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperHitRateDef)
 def SetSuperHitRateReduce(gameObj, value): 
     ## 抗暴击概率
-    gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperHitRateDef, value)
     return
 
-def GetSuperHitReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce)
+def GetSuperHitReduce(gameObj): return 0
 def SetSuperHitReduce(gameObj, value):
     ## 暴击固定伤害减免 - 暴击时附加固定伤害减免,与 atkObj.GetSuperHit() 相对
-    gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitReduce, value)
     return
 
-def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
+def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperDamPer)
 def SetSuperHitHurtPer(gameObj, value):
     ## 强化暴伤 - 暴击时的总伤害加成,与 SuperHitHurtDefPer 相对,注意与暴击固定伤害区分
-    gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperDamPer, value)
     return
-def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
+def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperDamPerDef)
 def SetSuperHitHurtDefPer(gameObj, value):
     ## 弱化暴伤 - 暴击时的总伤害减免
-    gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperDamPerDef, value)
     return
 
+def GetParryRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ParryRate)
+def SetParryRate(gameObj, value): 
+    ## 格挡概率
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ParryRate, value)
+    return
 
-def GetFaintRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
+def GetParryRateDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ParryRateDef)
+def SetParryRateDef(gameObj, value): 
+    ## 抗格挡概率
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ParryRateDef, value)
+    return
+
+def GetFaintRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_StunRate)
 def SetFaintRate(gameObj, value):
     ## 击晕概率
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintRate, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_StunRate, value)
     return
-def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
+def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_StunRateDef)
 def SetFaintDefRate(gameObj, value):
     ## 抗击晕概率
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_StunRateDef, value)
     return
 
-def GetComboRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
+def GetComboRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ComboRate)
 def SetComboRate(gameObj, value):
     ## 连击概率
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboRate, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ComboRate, value)
     return
-def GetComboDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_ComboDefRate)
+def GetComboDefRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ComboRateDef)
 def SetComboDefRate(gameObj, value):
     ## 抗连击概率
-    gameObj.SetDict(ChConfig.AttrName_ComboDefRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDefRate, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ComboRateDef, value)
     return
-def GetComboDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
+def GetComboDamPer(gameObj): return 0
 def SetComboDamPer(gameObj, value):
     ## 连击伤害
-    gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
     return
 
-def GetAtkBackRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackRate)
+def GetAtkBackRate(gameObj): return 0
 def SetAtkBackRate(gameObj, value):
     ## 反击概率
-    gameObj.SetDict(ChConfig.AttrName_AtkBackRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackRate, value)
     return
-def GetAtkBackDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackDefRate)
+def GetAtkBackDefRate(gameObj): return 0
 def SetAtkBackDefRate(gameObj, value):
     ## 抗反击概率
-    gameObj.SetDict(ChConfig.AttrName_AtkBackDefRate, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackDefRate, value)
     return
 
-def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPPer)
+def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuckHPPer)
 def SetSuckHPPer(gameObj, value):
     ## 吸血比率
-    gameObj.SetDict(ChConfig.AttrName_SuckHPPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuckHPPer, value)
     return
-def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPDefPer)
+def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuckHPPerDef)
 def SetSuckHPDefPer(gameObj, value):
     ## 抗吸血比率
-    gameObj.SetDict(ChConfig.AttrName_SuckHPDefPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPDefPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuckHPPerDef, value)
     return
-def GetAtkBackHP(gameObj):
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        return gameObj.GetBattleValEx2()
-    return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackHP)
+def GetAtkBackHP(gameObj): return 0
 def SetAtkBackHP(gameObj, value):
     ## 吸血固定值
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        gameObj.SetBattleValEx2(value)
-    else:
-        gameObj.SetDict(ChConfig.AttrName_AtkBackHP, value)
     return
 
-def GetCurePer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CurePer)
+def GetCurePer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_CurePer)
 def SetCurePer(gameObj, value):
     ## 强化治疗
-    gameObj.SetDict(ChConfig.AttrName_CurePer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CurePer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_CurePer, value)
     return
-def GetCureDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CureDefPer)
+def GetCureDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_CurePerDef)
 def SetCureDefPer(gameObj, value):
     ## 弱化治疗
-    gameObj.SetDict(ChConfig.AttrName_CureDefPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CureDefPer, value)
+    gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_CurePerDef, value)
     return
 
-def GetPetStrengthenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetStrengthenPer)
+def GetPetStrengthenPer(gameObj): return 0
 def SetPetStrengthenPer(gameObj, value):
     ## 强化灵兽
-    gameObj.SetDict(ChConfig.AttrName_PetStrengthenPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetStrengthenPer, value)
     return
-def GetPetWeakenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetWeakenPer)
+def GetPetWeakenPer(gameObj): return 0
 def SetPetWeakenPer(gameObj, value):
     ## 弱化灵兽
-    gameObj.SetDict(ChConfig.AttrName_PetWeakenPer, value)
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
     return
 
-def GetDamageBackRate(gameObj):
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        return gameObj.GetDamageBackRate()
-    return gameObj.GetDictByKey(ChConfig.AttrName_DamBackPer)
+def GetDamageBackRate(gameObj): 0
 def SetDamageBackRate(gameObj, value):
     ## 反弹伤害
-    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-        gameObj.SetDamageBackRate(value)
-    else:
-        gameObj.SetDict(ChConfig.AttrName_DamBackPer, value)
     return
 
-def NotifyObjInfoRefresh(gameObj, refreshType, value):
+def NotifyObjInfoRefresh(gameObj, refreshType, value, isBig=False):
     ##0418通知对象属性刷新
     sendPack = ChNetSendPack.tagObjInfoRefresh()
     sendPack.Clear()
     sendPack.ObjID = gameObj.GetID()
     sendPack.ObjType = gameObj.GetGameObjType()
     sendPack.RefreshType = refreshType
-    sendPack.Value = value % ShareDefine.Def_PerPointValue
-    sendPack.ValueEx = value / ShareDefine.Def_PerPointValue
+    if isBig:
+        sendPack.Value = value % ShareDefine.Def_PerPointValue
+        sendPack.ValueEx = value / ShareDefine.Def_PerPointValue
+    else:
+        sendPack.Value = value
+        sendPack.ValueEx = 0
     turnFight = TurnAttack.GetTurnFightMgr().getNPCTurnFight(gameObj.GetID())
     if turnFight:
         turnFight.addBatPack(sendPack)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
deleted file mode 100644
index 67b528e..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
+++ /dev/null
@@ -1,811 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_IceLode
-#
-# @todo:冰晶矿脉
-# @author xdh
-# @date 2017-9-14
-# @version 1.0
-#
-# 详细描述: 冰晶矿脉
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-09-14 15:30"""
-#-------------------------------------------------------------------------------
-
-import FBCommon
-import GameWorld
-import IPY_GameWorld
-import NPCCustomRefresh
-import GameWorldProcess
-import PlayerControl
-import ShareDefine
-import IpyGameDataPY
-import PyGameData
-import ChConfig
-import PlayerActivity
-import ItemCommon
-import ItemControler
-import EventReport
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerSuccess
-import PlayerWeekParty
-import PlayerActLogin
-import BuffSkill
-
-import random
-import datetime
-import time
-import math
-
-#---副本配置对应key值---
-(
-Def_PrepareTime, # 副本准备时间(秒)
-Def_FightTime, # 进行时间(秒)
-Def_PickTime, # 拾取时间(秒)(包含退出时间)
-Def_LeaveTime, # 退出时间(秒)
-Def_StarTime, #星级时间
-) = range(5)
-
-
-#---副本分线配置索引信息---
-(
-Def_RefreshMark, # 刷怪标识点
-DL_NPCID, # NPCID
-DL_TotalNPCCnt, # 累计刷NPC总个数
-DL_ScreenMaxNPC, # 同时存在NPC数
-) = range(4)
-
-
-#当前副本地图的状态
-(
-FB_Step_Open, # 副本开启
-FB_Step_Prepare, # 副本等待
-FB_Step_Fighting, # 副本进行中
-FB_Step_PickItem, # 拾取物品中
-FB_Step_Over, # 副本结束
-FB_Step_Close, # 副本关闭
-) = range(6)
-
-
-FBPlayerDict_RemainNPCCnt = 'FBPlayerDict_RemainNPCCnt'   # 剩余怪数量
-FBPlayerDict_TotalPoint = 'FBPlayerDict_TotalPoint'   # 获得的总怒气值
-FBPlayerDict_CostTime = 'FBPlayerDict_CostTime' #通关时间
-FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp'   # 获得的总经验
-FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint'   # 获得的总经验点
-FBPlayerDict_FBStar = 'FBPlayerDict_FBStar'   # 当前星级
-
-
-
-##---获得副本分线配置---
-#  @param None
-#  @return 配置信息
-def GetIceLodeNPCCfg():
-    lineID = FBCommon.GetFBPropertyMark()
-    return FBCommon.GetFBLineRefreshNPC(GameWorld.GetMap().GetMapID(), lineID)
-
-def GetPointByNPCID(npcid):
-    '''通过NPCID获取对应的积分'''
-    npcPointDict = IpyGameDataPY.GetFuncEvalCfg('IceLodeNeedPoint', 2, {})
-    
-    return npcPointDict.get(npcid, 0)
-
-
-## OnDay处理
-#  @param curPlayer
-#  @return None
-def OnFBPlayerOnDay(curPlayer):
-    if curPlayer.GetMapID() == ChConfig.Def_FBMapID_IceLode:
-        #玩家还在副本中,等这次副本结束,以最新的总星级给发奖励 
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeIsInFBOnDay, 1)
-        return
-    
-    #补发奖励
-    CheckIceLodeStarAwardMail(curPlayer)
-    return
-
-def OnFBPlayerOnLogin(curPlayer):
-    isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay)
-    if isInFBOnDay and curPlayer.GetMapID() != ChConfig.Def_FBMapID_IceLode: #在副本里过天,副本结束后再补发奖励
-        if CheckIceLodeStarAwardMail(curPlayer):
-            return
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    if not lineList:
-        __RandomLine(curPlayer, lineList)
-    SyncIceLoddInfo(curPlayer)
-    return
-
-def __RandomLine(curPlayer, oldlineList):
-    # 随机今日玩法
-    maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
-    lineList = range(maxCnt)
-    newlineList = list(set(lineList) - set(oldlineList))
-    if len(newlineList) < randomCnt:
-        random.shuffle(oldlineList)
-        newlineList += oldlineList[:randomCnt-len(newlineList)]
-    else:
-        random.shuffle(newlineList)
-        newlineList = newlineList[:randomCnt]
-    #random.shuffle(lineList)
-    for lineID in lineList:
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, lineID, 1 if lineID in newlineList else 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeDayLV, curPlayer.GetLV())
-    GameWorld.DebugLog('    随机冰晶矿脉今日玩法 oldlineList=%s, newlineList =%s'%(oldlineList, newlineList), curPlayer.GetID())
-    return
-
-## 是否能够通过活动查询进入
-#  @param curPlayer 玩家实例
-#  @param mapID 地图ID
-#  @param lineID 线路id
-#  @param tick 时间戳
-#  @return 布尔值
-def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    if lineID not in lineList:
-        GameWorld.DebugLog('冰晶矿脉今日没有该线路 lineID=%s,lineList=%s'%(lineID, lineList))
-        return False
-    return True
-
-
-
-##副本玩家进入点
-# @param curPlayer 玩家实例
-# @param mapID 地图ID
-# @param lineId 分线ID
-# @param ipyEnterPosInfo 功能线路IPY配置坐标信息
-# @param tick 时间戳
-# @return posX, posY, 随机半径(可选)
-def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
-    return ipyEnterPosInfo
-
-
-##查询是否可以进入地图
-# @param ask:请求结构体(IPY_BMChangeMapAsk)
-# @param tick:时间戳
-# @return IPY_GameWorld.cme 枚举
-def OnChangeMapAsk(ask, tick):
-    return IPY_GameWorld.cmeAccept
-
-
-## 进副本
-#  @param curPlayer
-#  @param tick
-#  @return None
-def DoEnterFB(curPlayer, tick):
-    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default * 2)
-    playerID = curPlayer.GetPlayerID()
-    mapID = GameWorld.GetGameWorld().GetMapID()
-    gameFB = GameWorld.GetGameFB()
-    lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
-    GameWorld.DebugLog("DoEnterFB...lineID=%s"%lineID, playerID)
-    hadDelTicket = FBCommon.GetHadDelTicket(curPlayer)
-    if not hadDelTicket:
-        PyGameData.g_fbPickUpItemDict.pop(playerID, 0)
-        GameWorld.DebugLog("DoEnterFB 扣除入场券,重置信息!")
-        delResult = FBCommon.DelFBEnterTicket(curPlayer, mapID)
-        isOK = delResult[0]
-        #hasBind = delResult[1]
-        if not isOK:
-            PlayerControl.PlayerLeaveFB(curPlayer)
-            return
-        #星级为0则免费,否则收钱
-        curStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
-        if curStar:
-            costGold = IpyGameDataPY.GetFuncCfg('IceLodeCfg')
-            if costGold:
-                costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costGold)
-                if not costMoneyList:
-                    GameWorld.Log('钱不够 lineID=%s,costGold=%s'%(lineID, costGold))
-                    PlayerControl.PlayerLeaveFB(curPlayer)
-                    return
-                for moneyType, moneyNum in costMoneyList:
-                    PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_BuyFBCnt, {"MapID":mapID, 'lineID':lineID})
-        
-        FBCommon.SetFBPropertyMark(lineID)
-        FBCommon.SetHadDelTicket(curPlayer)
-        FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_IceLode)
-        FBCommon.SetFBStep(FB_Step_Prepare, tick)
-        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_IceLode, 0, ChConfig.CME_Log_Start)
-
-    fbStep = gameFB.GetFBStep()
-    if fbStep <= FB_Step_Prepare:
-        mapID = GameWorld.GetMap().GetMapID()
-        notify_tick = FBCommon.GetFBLineStepTime(mapID)[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, max(notify_tick, 0), True)
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-        
-    elif fbStep == FB_Step_Fighting:
-        mapID = GameWorld.GetMap().GetMapID()
-        notify_tick = FBCommon.GetFBLineStepTime(mapID)[Def_FightTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
-        __UpdIceLoadFBStar(tick, True, curPlayer)
-    DoFBHelp(curPlayer, tick)
-    return
-
-##玩家退出副本
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def DoExitFB(curPlayer, tick):
-    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
-    return
-
-##玩家主动离开副本.
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-def DoPlayerLeaveFB(curPlayer, tick):
-    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
-    return
-
-##玩家切换地图
-def DoPlayerChangeMapLogic(curPlayer):
-    tick = GameWorld.GetGameWorld().GetTick()
-    for buffID in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial', 2):
-        BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick)
-    return
-
-def OnPickUpItem(curPlayer, curItem, tick):
-    return
-    mapItemType = curItem.GetType()
-    if mapItemType == ChConfig.Def_ItemType_Money:
-        return
-    playerID = curPlayer.GetID()
-    isEquip = ItemCommon.CheckItemIsEquip(curItem)
-    jsonItem = ItemCommon.GetJsonItem(curItem)
-    if playerID in PyGameData.g_fbPickUpItemDict:
-        if isEquip:
-            PyGameData.g_fbPickUpItemDict[playerID].append(jsonItem)
-        else:
-            for itemInfo in PyGameData.g_fbPickUpItemDict[playerID]:
-                if itemInfo["ItemID"] == jsonItem["ItemID"] and itemInfo.get("IsBind") == jsonItem.get("IsBind"):
-                    itemInfo["Count"] = itemInfo.get("Count", 1)+ jsonItem.get("Count", 1)
-    else:
-        PyGameData.g_fbPickUpItemDict[playerID] = [jsonItem]
-    
-    isItemAllPickUp = (GameWorld.GetMapItemManager().GetMapItemCount() <= 1)
-    if isItemAllPickUp and GameWorld.GetGameFB().GetFBStep() == FB_Step_PickItem:
-        __DoIceLodeOver(True)
-        
-    
-    #GameWorld.Log('PyGameData.g_fbPickUpItemDict=%s'%PyGameData.g_fbPickUpItemDict)
-    return
-
-
-## 获得副本帮助信息
-#  @param curPlayer 当前玩家(被通知对象)
-#  @param tick 当前时间
-#  @return None
-def DoFBHelp(curPlayer, tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    # 获得副本信息
-    star = gameFB.GetGameFBDictByKey(FBPlayerDict_FBStar)
-    lineID = FBCommon.GetFBPropertyMark()
-    #副本帮助
-    helpDict = {FBCommon.Help_grade:star, FBCommon.Help_lineID:lineID}
-    GameWorld.DebugLog("DoFBHelp %s" % str(helpDict))
-    FBCommon.Notify_FBHelp(curPlayer, helpDict)
-    return
-
-
-##---副本总逻辑计时器---
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本总逻辑计时器
-def OnProcess(tick):
-    fbStep = GameWorld.GetGameFB().GetFBStep()
-    
-    # 副本准备
-    if fbStep == FB_Step_Prepare:
-        __DoLogic_FB_Prepare(tick)    
-    # 副本进行中
-    elif fbStep == FB_Step_Fighting:
-        __DoLogic_FB_Fighting(tick)
-        __UpdIceLoadFBStar(tick)
-    # 副本拾取中
-    elif fbStep == FB_Step_PickItem:
-        __DoLogic_FB_PickItem(tick)
-    # 副本结束
-    elif fbStep == FB_Step_Over:
-        __DoLogic_FB_Over(tick)
-    
-    return
-
-
-## 更新当前副本星级
-def __UpdIceLoadFBStar(tick, isEnter=False, curPlayer=None):
-    gameFB = GameWorld.GetGameFB()
-    curStar = gameFB.GetGameFBDictByKey(FBPlayerDict_FBStar)
-    if curStar == 1:
-        return curStar
-    
-    mapID = GameWorld.GetMap().GetMapID()
-    useSecond = int(math.ceil((tick - gameFB.GetFBStepTick()) / 1000.0))
-    icelodeTimeCfg = FBCommon.GetFBLineStepTime(mapID)
-    starTimeList = icelodeTimeCfg[Def_StarTime]
-    diffSecond = 0
-    updStar = 1 # 默认至少1星
-    for star, starTime in enumerate(starTimeList, 2):
-        if useSecond <= starTime:
-            updStar = star
-            diffSecond = starTime-useSecond
-            
-    if curStar == updStar and not isEnter:
-        return curStar
-        
-    gameFB.SetGameFBDict(FBPlayerDict_FBStar, updStar)
-    
-    GameWorld.DebugLog("__UpdFBStar useSecond=%s,curStar=%s,updStar=%s, diffSecond=%s" 
-                       % (useSecond, curStar, updStar, diffSecond))
-    
-    if curPlayer:
-        DoFBHelp(curPlayer, tick)
-        if updStar != 1:
-            curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True)
-    else:
-        playerManager = GameWorld.GetMapCopyPlayerManager()
-        for index in xrange(playerManager.GetPlayerCount()):
-            curPlayer = playerManager.GetPlayerByIndex(index)
-            if not curPlayer:
-                continue
-            DoFBHelp(curPlayer, tick)
-            if updStar != 1:
-                curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True)
-            
-            
-    return updStar
-
-## 副本准备逻辑
-#  @param tick:时间戳
-#  @return 无意义
-def __DoLogic_FB_Prepare(tick):
-    gameFB = GameWorld.GetGameFB()
-    mapID = GameWorld.GetMap().GetMapID()
-    stepTimeCfg = FBCommon.GetFBLineStepTime(mapID)
-    # 间隔未到
-    if tick - gameFB.GetFBStepTick() < stepTimeCfg[Def_PrepareTime] * 1000:
-        return
-    
-    # 设置开始刷怪
-    npcCnt = 0
-    npcCfg = GetIceLodeNPCCfg()
-    for npcInfo in npcCfg:
-        npcid = npcInfo[DL_NPCID]
-        maxCnt = npcInfo[DL_ScreenMaxNPC]
-        totalMaxCnt = npcInfo[DL_TotalNPCCnt]
-        NPCCustomRefresh.SetNPCRefresh(npcInfo[Def_RefreshMark], [npcid], maxCnt, totalMaxCnt)
-        npcCnt += totalMaxCnt
-    NPCCustomRefresh.ProcessAllNPCRefresh(tick) # 立即出发一次标识点刷新
-    gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, npcCnt)
-    GameWorld.DebugLog('设置开始刷怪 remainNPCCnt=%s'%npcCnt)
-    # 副本开始
-    FBCommon.SetFBStep(FB_Step_Fighting, tick)
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, stepTimeCfg[Def_FightTime] * 1000)
-    return
-
-
-## 副本进行中
-#  @param tick:时间戳
-#  @return 无意义
-def __DoLogic_FB_Fighting(tick):
-    # 间隔未到
-    mapID = GameWorld.GetMap().GetMapID()
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_FightTime] * 1000:
-        return
-    
-    __DoIceLodeOver(False)
-    return
-
-## 副本拾取
-#  @param tick:时间戳
-#  @return 无意义
-def __DoLogic_FB_PickItem(tick):
-    # 间隔未到
-    mapID = GameWorld.GetMap().GetMapID()
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_PickTime] * 1000:
-        return
-    
-    #副本关闭
-    GameWorldProcess.CloseFB(tick)
-    FBCommon.SetFBStep(FB_Step_Close, tick)
-    return
-
-        
-##副本关闭中
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本关闭中
-def __DoLogic_FB_Over(tick):
-
-    # 间隔未到
-    mapID = GameWorld.GetMap().GetMapID()
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000:
-        return
-    
-    #副本关闭
-    GameWorldProcess.CloseFB(tick)
-    FBCommon.SetFBStep(FB_Step_Close, tick)
-    return
-
-## 获得经验
-#  @param curPlayer 当前玩家
-#  @param addExp 获得的经验
-#  @param expViewType 经验类型
-#  @return True or False
-def OnGetExp(curPlayer, addExp, expViewType):
-    
-    if expViewType != ShareDefine.Def_ViewExpType_KillNPC:
-        return
-    
-    playerID = curPlayer.GetID() 
-    gameFB = GameWorld.GetGameFB()
-    exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
-    expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
-    totalExp = expPoint * ChConfig.Def_PerPointValue + exp
-    updTotalExp = totalExp + addExp
-    updExp = updTotalExp % ChConfig.Def_PerPointValue
-    updExpPoint = updTotalExp / ChConfig.Def_PerPointValue
-    gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExp, updExp)
-    gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExpPoint, updExpPoint)
-    
-    
-    GameWorld.DebugLog("OnGetExp() totalExp=%s,addExp=%s,updTotalExp=%s" 
-                       % (totalExp, addExp, updTotalExp), playerID)
-    
-    return
-
-## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
-#  @param attacker 攻击方
-#  @param defender 防守方
-#  @return bool
-def CheckCanAttackTagObjInFB(attacker, defender):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() != FB_Step_Fighting:
-        return False
-    return True
-
-def __OnKillNPC(curNPC, tick):
-    gameFB = GameWorld.GetGameFB()
-    npcid = curNPC.GetNPCID()
-    npcCfg = GetIceLodeNPCCfg()
-    isfbnpc = False
-    for npcInfo in npcCfg:
-        if npcid == npcInfo[DL_NPCID]:
-            isfbnpc = True
-            break
-    if not isfbnpc:
-        return
-    
-    remainNPCCnt = max(0, gameFB.GetGameFBDictByKey(FBPlayerDict_RemainNPCCnt) - 1)
-    gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, remainNPCCnt)
-    GameWorld.DebugLog('__OnKillNPC remainNPCCnt=%s'%remainNPCCnt)
-    if remainNPCCnt <=0 or npcid in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial'):
-        __DoIceLodeOver(True)
-    return
-
-def DoFB_NPCDead(curNPC):
-    __OnKillNPC(curNPC, GameWorld.GetGameWorld().GetTick())
-    return
-
-#def DoFB_Npc_KillNPC(attacker, curNPC, tick):
-#    GameWorld.Log('__OnKillNPC 1111111111')
-#    __OnKillNPC(attacker, curNPC, tick)
-#    return
-
-## 执行副本杀怪逻辑
-#  @param curPlayer 杀怪的人
-#  @param curNPC 被杀的怪
-#  @param tick 当前时间
-#  @return None
-#def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
-#    GameWorld.Log('__OnKillNPC 2222222222')
-#    __OnKillNPC(curPlayer, curNPC, tick)
-#    
-    
-#    addPoint = GetPointByNPCID(npcid)
-#    if not addPoint:
-#        return
-#    totalPoint = gameFB.GetGameFBDictByKey(FBPlayerDict_TotalPoint)
-#    maxPoint = IpyGameDataPY.GetFuncCfg('IceLodeNeedPoint')
-#    updPoint = min(totalPoint + addPoint, maxPoint)
-#    gameFB.SetGameFBDict(FBPlayerDict_TotalPoint, updPoint)
-#    
-#    if updPoint >= maxPoint:
-#        costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-#        gameFB.SetGameFBDict(FBPlayerDict_CostTime, costTime)
-#        FBCommon.SetFBStep(FB_Step_PickItem, tick)
-#        mapID = GameWorld.GetMap().GetMapID()
-#        curPlayer.Sync_TimeTick(ChConfig.tttPickupItem, 0, FBCommon.GetFBLineStepTime(mapID)[Def_PickTime] * 1000, True)
-#        
-#        FBCommon.ClearFBNPC()
-#        npcCfg = GetIceLodeNPCCfg()
-#        for npcInfo in npcCfg:
-#            NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
-#        
-#        #__DoIceLodeOver(True)
-    
-    #DoFBHelp(curPlayer, tick)
-    return
-
-## 是否副本复活
-#  @param None
-#  @return 是否副本复活
-def OnPlayerReborn():
-    return True
-
-## 副本结束处理
-def __DoIceLodeOver(isPass):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() == FB_Step_Over:
-        return
-    tick = GameWorld.GetGameWorld().GetTick()
-    curPlayer = None
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    if playerManager.GetPlayerCount() > 0:
-        curPlayer = playerManager.GetPlayerByIndex(0)
-        
-    if not curPlayer:
-        GameWorldProcess.CloseFB(tick)
-        return
-    
-    __UpdIceLoadFBStar(tick) # 结算前更新一次星级
-    playerID = curPlayer.GetPlayerID()
-    lineID = FBCommon.GetFBPropertyMark()
-    star = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_FBStar)
-    mapID = ChConfig.Def_FBMapID_IceLode
-    isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay)
-    #更新星级
-    lastStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
-    if isPass and star > lastStar:
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, star, False, [mapID])
-        FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息
-        if not lastStar and not isInFBOnDay: #每日活动
-            PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode)
-            PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_IceLode, 1)
-            PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_IceLode, 1)
-    
-    if isInFBOnDay: #在副本里过天,副本结束后再补发星级奖励
-        CheckIceLodeStarAwardMail(curPlayer)
-#    exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
-#    expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
-#    totalExp = expPoint * ChConfig.Def_PerPointValue + exp
-    
-    costTime = gameFB.GetGameFBDictByKey(FBPlayerDict_CostTime)
-    if not costTime:
-        costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-    #jsonItemList = PyGameData.g_fbPickUpItemDict.get(playerID, [])
-    overDict = {FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
-    if isPass:
-        itemList = FBCommon.GetFBLineReward(mapID, lineID)
-        # 给物品
-        needSpace = len(itemList)
-        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-        if needSpace > packSpace:
-            PlayerControl.SendMailByKey('', [curPlayer.GetID()], itemList)
-        else:
-            for itemID, itemCount, isBind in itemList:
-                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
-        
-        jsonItemList = FBCommon.GetJsonItemList(itemList)
-        overDict[FBCommon.Over_itemInfo] = jsonItemList
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_IceLode, 1)
-        
-    # 通知结果
-    __SendIceLodeOverInfo(curPlayer, overDict)
-    
-    # 进入离开阶段
-    FBCommon.SetFBStep(FB_Step_Over, tick)
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000)
-    
-    # 清怪,关闭刷怪
-#    FBCommon.ClearFBNPC()
-#    npcCfg = GetIceLodeNPCCfg()
-#    for npcInfo in npcCfg:
-#        NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
-    
-    return
-
-## 发送挑战结果信息,扫荡结果通用
-def __SendIceLodeOverInfo(curPlayer, overDict):
-    overDict[FBCommon.Over_dataMapID] = ChConfig.Def_FBMapID_IceLode
-    GameWorld.DebugLog("__SendIceLodeOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
-    
-    FBCommon.Notify_FB_Over(curPlayer, overDict)
-    return
-
-
-## 副本行为
-#  @param curPlayer 玩家
-#  @param actionType 行为类型
-#  @param actionInfo 行为信息
-#  @param tick 当前时间
-#  @return None
-def DoFBAction(curPlayer, actionType, actionInfo, tick):
-    
-    return
-
-## 可否扫荡
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
-    if curPlayer.GetMapID() == ChConfig.Def_FBMapID_IceLode:
-        GameWorld.DebugLog('冰晶矿脉扫荡  副本里不能扫荡 ')
-        return
-    #战力判断
-    LVIpyData = PlayerControl.GetPlayerLVIpyData(curPlayer.GetLV())
-    reFightPower = 0 if not LVIpyData else LVIpyData.GetIceLodeFightPower() # 当前等级参考战力
-    if PlayerControl.GetFightPower(curPlayer) < reFightPower:
-        GameWorld.DebugLog('冰晶矿脉扫荡 战力不足 %s'%(reFightPower))
-        return
-    #vip判断
-    if curPlayer.GetVIPLv() < IpyGameDataPY.GetFuncCfg('IceLodeCfg', 5):
-        GameWorld.DebugLog('冰晶矿脉扫荡 vip不足 ')
-        return
-    
-    #钱
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeHasSweep):
-        costMoney = IpyGameDataPY.GetFuncCfg('IceLodeCfg', 3)
-    else:
-        costMoney = 0
-    if costMoney:
-        costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
-        if not costMoneyList:
-            return
-        for moneyType, moneyNum in costMoneyList:
-            if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_FBSweep):
-                GameWorld.DebugLog("冰晶矿脉扫荡仙玉不足!costGold=%s" % (costMoney))
-                return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 1)
-    
-    SyncIceLoddInfo(curPlayer)
-    return True
-
-## 扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
-    itemList = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 4)
-    jsonItemList = FBCommon.GetJsonItemList(itemList)
-    needSpace = len(itemList)
-    if needSpace > ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace):
-        PlayerControl.SendMailByKey(0, [curPlayer.GetID()], itemList)
-    else:
-        for itemID, itemCnt, isBind in itemList:
-            ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-    #直接将5条线星级改为3星
-    addCnt = 0
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    for lineid in lineList:
-        curStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, False, [mapID])
-        if curStar == 0:
-            addCnt += 1
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, 3, False, [mapID])
-    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode, addCnt)
-    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_IceLode, addCnt)
-    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_IceLode, addCnt)
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_IceLode, len(lineList))
-    FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息
-#    npcCountDict = {}
-#    iceLodeSweepDict = IpyGameDataPY.GetFuncEvalCfg('IceLodeSweep')
-#    for npcID, count in iceLodeSweepDict.items():
-#        npcCountDict[npcID] = count * sweepCnt
-#        
-#    exp_rate = PlayerControl.GetLimitExpRate(curPlayer, ChConfig.ExpRateLimitType_Sweep)
-#    jsonItemList, totalExp, totalMoney = NPCCommon.GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, exp_rate)
-    GameWorld.DebugLog("扫荡奖励: 次数=%s,jsonItemList=%s" % (sweepCnt, jsonItemList))
-    overDict = {FBCommon.Over_isPass:1, FBCommon.Over_isSweep:1, FBCommon.Over_itemInfo:jsonItemList}
-    __SendIceLodeOverInfo(curPlayer, overDict)
-    for _ in xrange(sweepCnt):
-        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_IceLode, 0, ChConfig.CME_Log_Start)
-    return True
-
-
-def GetIceLodeStarAward(curPlayer, starIndex):
-    ## 领取冰晶矿脉星级奖励
-    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('IceLodeStarAward', {'Index':starIndex}, True)
-    if not ipyDataList:
-        return
-    playerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
-    #playerLV = curPlayer.GetLV()
-    awardList = []
-    needStar = 0
-    for ipyData in ipyDataList:
-        lvLimit = ipyData.GetLVLimit()
-        if lvLimit[0]<=playerLV <=lvLimit[1]:
-            awardList = ipyData.GetItemList()
-            needStar = ipyData.GetStar()
-            break
-    if not awardList:
-        GameWorld.Log('    领取冰晶矿脉星级奖励,没找到奖励 starIndex=%s,playerLV=%s'%(starIndex,playerLV), curPlayer.GetID())
-        return
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
-    if awardRecord & pow(2, starIndex):
-        GameWorld.DebugLog('领取冰晶矿脉星级奖励, 奖励已领取 starIndex=%s'%starIndex)
-        return
-    
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    if starCnt < needStar:
-        GameWorld.DebugLog('领取冰晶矿脉星级奖励, 总星数不足starIndex=%s  starCnt=%s,needStar=%s'%(starIndex,starCnt,needStar))
-        return
-            
-    # 检查背包
-    needSpace = len(awardList)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeStarAwardRecord, awardRecord|pow(2, starIndex))
-    
-    for itemID, itemCount, isBind in awardList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
-    #通知
-    SyncIceLoddInfo(curPlayer)
-    return
-
-def GetIceLodeAllStarCnt(curPlayer):
-    ##获取当前总星数
-    maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
-    starCnt = 0
-    lineList = []
-    for i in xrange(maxCnt):
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, i):
-            starCnt += GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, False, [ChConfig.Def_FBMapID_IceLode])
-            lineList.append(i)
-    if lineList and len(lineList) != randomCnt:
-        GameWorld.ErrLog('    冰晶矿脉获取当前总星数,当前线路数量异常!lineList=%s'%lineList)
-    return starCnt, lineList[:randomCnt]
-
-def CheckIceLodeStarAwardMail(curPlayer):
-    #邮件补发未领取星级奖励
-    serverTime = GameWorld.GetCurrentTime()
-    curDateTimeStr = "%d-%d-%d 00:00:00" % (serverTime.year, serverTime.month, serverTime.day)
-    curDateTime = datetime.datetime.strptime(curDateTimeStr, ChConfig.TYPE_Time_Format)
-    curDateTime = int(time.mktime(curDateTime.timetuple()))
-    lastCheckTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeLastCheckTime)
-    if lastCheckTime and lastCheckTime == curDateTime:
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeLastCheckTime, curDateTime)
-    
-    itemList = []
-    mailStarList = []
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
-    playerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    ipyMgr = IpyGameDataPY.IPY_Data()
-    newRecord = awardRecord
-    for i in xrange(ipyMgr.GetIceLodeStarAwardCount()):
-        ipyData = ipyMgr.GetIceLodeStarAwardByIndex(i)
-        starIndex = ipyData.GetIndex()
-        lvLimit = ipyData.GetLVLimit()
-        if lvLimit[0]<=playerLV <=lvLimit[1]:
-            if starCnt >= ipyData.GetStar() and not awardRecord & pow(2, starIndex):
-                itemList += ipyData.GetItemList()
-                newRecord |= pow(2, starIndex)
-                mailStarList.append(starIndex)
-    if itemList:
-        PlayerControl.SendMailByKey('IceLodeStarReward', [curPlayer.GetID()], itemList, detail=mailStarList)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeIsInFBOnDay, 0)
-    maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
-    for i in xrange(maxCnt):
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, 0, False, [ChConfig.Def_FBMapID_IceLode])
-    FBCommon.Sync_FBPlayerFBInfoData(curPlayer, ChConfig.Def_FBMapID_IceLode) # 同步信息
-    #重置领奖记录
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeStarAwardRecord, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 0)
-    #随机今日玩法
-    __RandomLine(curPlayer, lineList)
-    #通知
-    SyncIceLoddInfo(curPlayer)
-    return True
-
-def SyncIceLoddInfo(curPlayer):
-    starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
-    packdata = ChPyNetSendPack.tagMCIceLodeInfo()
-    packdata.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
-    packdata.DayLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
-    packdata.HasSweep = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeHasSweep)
-    packdata.LineList = lineList
-    packdata.Cnt = len(packdata.LineList)
-    NetPackCommon.SendFakePack(curPlayer, packdata)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
index bae12fc..72f075a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -28,6 +28,8 @@
 import TurnAttack
 import ItemCommon
 import NPCCommon
+import ChEquip
+
 import random
 
 def OnFBPlayerOnLogin(curPlayer):
@@ -73,7 +75,7 @@
 def __doCostZhanchui(curPlayer, atkObj, curSkill):
     ## 扣除战锤消耗
     costZhanchui = 0
-    isXP = SkillCommon.isXPSkill(curSkill)
+    isXP = SkillCommon.isAngerSkill(curSkill)
     turnBattleType = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType)
     if isXP:
         costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 2)
@@ -81,7 +83,7 @@
         costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 3)
     elif turnBattleType == ChConfig.TurnBattleType_AtkBack:
         costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 4)
-    elif SkillCommon.isTurnNormalAtkSkill(curSkill):
+    elif SkillCommon.isTurnNormalSkill(curSkill):
         costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 1)
         
     if costZhanchui <= 0:
@@ -222,7 +224,7 @@
         itemColor = GameWorld.GetResultByRandomList(colorRateList)
         if not itemColor:
             continue
-        equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, findType="MainEquipDrop")
+        equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, placeList=ChConfig.Def_MainEquipPlaces, findType="MainEquipDrop")
         if not equipIDList:
             continue
         randEquipID = random.choice(equipIDList)
@@ -319,7 +321,7 @@
         __doDecomposeMainEquip(curPlayer, decomposeIndexList)
         
     # 刷属性
-    
+    ChEquip.RefreshRoleEquipAttr(curPlayer)
     return
 
 def __doDecomposeMainEquip(curPlayer, itemIndexList):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 29411cc..e39ca0d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -68,6 +68,7 @@
                         ("WORD", "DefInheritPer", 0),
                         ("WORD", "HPInheritPer", 0),
                         ("dict", "BatAttrDict", 0),
+                        ("list", "FetterIDList", 0),
                         ),
 
                 "HeroTalent":(
@@ -100,6 +101,13 @@
                 "HeroFetter":(
                         ("WORD", "FetterID", 1),
                         ("list", "HeroIDList", 0),
+                        ("list", "AttrIDList", 0),
+                        ("list", "AttrValueList", 0),
+                        ),
+
+                "HeroLineupHalo":(
+                        ("WORD", "Country", 1),
+                        ("BYTE", "NeedHeroCount", 0),
                         ("list", "AttrIDList", 0),
                         ("list", "AttrValueList", 0),
                         ),
@@ -143,6 +151,11 @@
                         ("DWORD", "Quality", 1),
                         ("DWORD", "HeroLV", 1),
                         ("list", "UPCostItem", 0),
+                        ),
+
+                "PlayerAttr":(
+                        ("DWORD", "AttrID", 1),
+                        ("char", "Parameter", 0),
                         ),
 
                 "MainChapter":(
@@ -697,33 +710,9 @@
                 "PlayerLV":(
                         ("WORD", "LV", 1),
                         ("DWORD", "Exp", 0),
-                        ("BYTE", "TalentPoint", 0),
-                        ("DWORD", "ReExp", 0),
-                        ("DWORD", "ReMaxHP", 0),
-                        ("DWORD", "ReAtk", 0),
-                        ("DWORD", "ReDef", 0),
-                        ("DWORD", "ReHit", 0),
-                        ("DWORD", "ReMiss", 0),
-                        ("DWORD", "ReAtkSpeed", 0),
-                        ("DWORD", "ReSkillAtkRate", 0),
-                        ("DWORD", "ReDamagePer", 0),
-                        ("DWORD", "ReDamReduce", 0),
-                        ("DWORD", "ReIgnoreDefRate", 0),
-                        ("DWORD", "ReLuckyHitRate", 0),
-                        ("DWORD", "ReLuckyHit", 0),
-                        ("DWORD", "ReBleedDamage", 0),
-                        ("DWORD", "ReIceAtk", 0),
-                        ("DWORD", "ReIceDef", 0),
-                        ("DWORD", "RePetAtk", 0),
-                        ("DWORD", "RePetSkillAtkRate", 0),
-                        ("DWORD", "RePetDamPer", 0),
-                        ("DWORD", "ReFinalHurt", 0),
-                        ("DWORD", "ReFinalHurtReduce", 0),
-                        ("DWORD", "RePotionReply", 0),
-                        ("DWORD", "RePotionCD", 0),
-                        ("DWORD", "AttackEff", 0),
-                        ("DWORD", "ReFightPower", 0),
-                        ("DWORD", "IceLodeFightPower", 0),
+                        ("DWORD", "MaxHP", 0),
+                        ("DWORD", "Atk", 0),
+                        ("DWORD", "Def", 0),
                         ),
 
                 "SpecMapPlayerAttrFormat":(
@@ -2868,7 +2857,8 @@
     def GetAtkInheritPer(self): return self.attrTuple[7] # 攻击继承 WORD
     def GetDefInheritPer(self): return self.attrTuple[8] # 防御继承 WORD
     def GetHPInheritPer(self): return self.attrTuple[9] # 生命继承 WORD
-    def GetBatAttrDict(self): return self.attrTuple[10] # 其他战斗属性字典 {"属性ID":值, ...} dict
+    def GetBatAttrDict(self): return self.attrTuple[10] # 其他战斗属性字典 {"属性ID":值, ...} dict
+    def GetFetterIDList(self): return self.attrTuple[11] # 羁绊ID列表 list
 
 # 武将星级天赋表
 class IPY_HeroTalent():
@@ -2921,6 +2911,18 @@
         
     def GetFetterID(self): return self.attrTuple[0] # 羁绊ID WORD
     def GetHeroIDList(self): return self.attrTuple[1] #  武将ID组合列表 list
+    def GetAttrIDList(self): return self.attrTuple[2] #  属性ID列表 list
+    def GetAttrValueList(self): return self.attrTuple[3] #  属性值列表 list
+
+# 阵容光环表
+class IPY_HeroLineupHalo():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetCountry(self): return self.attrTuple[0] # 国家 WORD
+    def GetNeedHeroCount(self): return self.attrTuple[1] #  所需武将数 BYTE
     def GetAttrIDList(self): return self.attrTuple[2] #  属性ID列表 list
     def GetAttrValueList(self): return self.attrTuple[3] #  属性值列表 list
 
@@ -2989,6 +2991,16 @@
     def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
     def GetHeroLV(self): return self.attrTuple[1] # 武将等级 DWORD
     def GetUPCostItem(self): return self.attrTuple[2] #  升级到下级消耗道具 list
+
+# 属性条目表
+class IPY_PlayerAttr():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetAttrID(self): return self.attrTuple[0] # 属性ID DWORD
+    def GetParameter(self): return self.attrTuple[1] # 属性名、参数名 char
 
 # 主线章节表
 class IPY_MainChapter():
@@ -3848,33 +3860,9 @@
         
     def GetLV(self): return self.attrTuple[0] # 玩家等级 WORD
     def GetExp(self): return self.attrTuple[1] # 升级所需经验 DWORD
-    def GetTalentPoint(self): return self.attrTuple[2] # 等级获得的天赋点 BYTE
-    def GetReExp(self): return self.attrTuple[3] # 等级经验效率(second) DWORD
-    def GetReMaxHP(self): return self.attrTuple[4] # 生命 DWORD
-    def GetReAtk(self): return self.attrTuple[5] # 攻击 DWORD
-    def GetReDef(self): return self.attrTuple[6] # 防御 DWORD
-    def GetReHit(self): return self.attrTuple[7] # 命中 DWORD
-    def GetReMiss(self): return self.attrTuple[8] # 闪避 DWORD
-    def GetReAtkSpeed(self): return self.attrTuple[9] # 攻速 DWORD
-    def GetReSkillAtkRate(self): return self.attrTuple[10] # 技能伤害比例 DWORD
-    def GetReDamagePer(self): return self.attrTuple[11] # 增加伤害 DWORD
-    def GetReDamReduce(self): return self.attrTuple[12] # 减少伤害 DWORD
-    def GetReIgnoreDefRate(self): return self.attrTuple[13] # 无视防御比例 DWORD
-    def GetReLuckyHitRate(self): return self.attrTuple[14] # 会心一击率 DWORD
-    def GetReLuckyHit(self): return self.attrTuple[15] # 会心一击伤害 DWORD
-    def GetReBleedDamage(self): return self.attrTuple[16] # 流血伤害增加 DWORD
-    def GetReIceAtk(self): return self.attrTuple[17] # 真实伤害 DWORD
-    def GetReIceDef(self): return self.attrTuple[18] # 真实抵御 DWORD
-    def GetRePetAtk(self): return self.attrTuple[19] # 灵宠攻击 DWORD
-    def GetRePetSkillAtkRate(self): return self.attrTuple[20] # 灵宠技能 DWORD
-    def GetRePetDamPer(self): return self.attrTuple[21] # 灵宠伤害增加 DWORD
-    def GetReFinalHurt(self): return self.attrTuple[22] # 固定伤害增加 DWORD
-    def GetReFinalHurtReduce(self): return self.attrTuple[23] # 固定伤害减少 DWORD
-    def GetRePotionReply(self): return self.attrTuple[24] # 血瓶恢复量 DWORD
-    def GetRePotionCD(self): return self.attrTuple[25] # 血瓶CD DWORD
-    def GetAttackEff(self): return self.attrTuple[26] # 挂机效率 DWORD
-    def GetReFightPower(self): return self.attrTuple[27] # 战斗力 DWORD
-    def GetIceLodeFightPower(self): return self.attrTuple[28] # 冰晶矿脉扫荡战斗力 DWORD
+    def GetMaxHP(self): return self.attrTuple[2] # 生命 DWORD
+    def GetAtk(self): return self.attrTuple[3] # 攻击 DWORD
+    def GetDef(self): return self.attrTuple[4] # 防御 DWORD
 
 # 特殊地图玩家属性公式表
 class IPY_SpecMapPlayerAttrFormat():
@@ -7101,11 +7089,13 @@
         self.__LoadFileData("HeroBreak", onlyCheck)
         self.__LoadFileData("HeroAwake", onlyCheck)
         self.__LoadFileData("HeroFetter", onlyCheck)
+        self.__LoadFileData("HeroLineupHalo", onlyCheck)
         self.__LoadFileData("HeroSkin", onlyCheck)
         self.__LoadFileData("HeroQuality", onlyCheck)
         self.__LoadFileData("HeroQualityBreak", onlyCheck)
         self.__LoadFileData("HeroQualityAwake", onlyCheck)
         self.__LoadFileData("HeroQualityLV", onlyCheck)
+        self.__LoadFileData("PlayerAttr", onlyCheck)
         self.__LoadFileData("MainChapter", onlyCheck)
         self.__LoadFileData("MainLevel", onlyCheck)
         self.__LoadFileData("NPCLineup", onlyCheck)
@@ -7649,6 +7639,13 @@
         self.CheckLoadData("HeroFetter")
         return self.ipyHeroFetterCache[index]
 
+    def GetHeroLineupHaloCount(self):
+        self.CheckLoadData("HeroLineupHalo")
+        return self.ipyHeroLineupHaloLen
+    def GetHeroLineupHaloByIndex(self, index):
+        self.CheckLoadData("HeroLineupHalo")
+        return self.ipyHeroLineupHaloCache[index]
+
     def GetHeroSkinCount(self):
         self.CheckLoadData("HeroSkin")
         return self.ipyHeroSkinLen
@@ -7684,6 +7681,13 @@
         self.CheckLoadData("HeroQualityLV")
         return self.ipyHeroQualityLVCache[index]
 
+    def GetPlayerAttrCount(self):
+        self.CheckLoadData("PlayerAttr")
+        return self.ipyPlayerAttrLen
+    def GetPlayerAttrByIndex(self, index):
+        self.CheckLoadData("PlayerAttr")
+        return self.ipyPlayerAttrCache[index]
+
     def GetMainChapterCount(self):
         self.CheckLoadData("MainChapter")
         return self.ipyMainChapterLen
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 d7360f8..1d0363f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -17,438 +17,66 @@
 import IPY_GameWorld
 import GameWorld
 import ItemControler
-import SkillShell
 import PlayerControl
 import ChConfig
-import ChItem
 import ItemCommon
-import FBLogic
-import OperControlManager
-import Operate_EquipWash
-import Operate_EquipPlus
 import ShareDefine
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
-import Operate_EquipStone
 import OpenServerCampaign
-import PassiveBuffEffMng
-import time
-import json
 import FormulaControl
-import PyGameData
-#---------------------------------------------------------------------
+import PlayerOnline
 
+def RefreshRoleEquipAttr(curPlayer):
+    ## 刷新主公装备属性
+    CalcRoleEquipAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+    return
 
-##检查玩家是否可以换装
-# @param curPlayer 玩家实例
-# @return 返回值, 是否通过检查
-# @remarks 检查玩家是否可以换装
-def CheckPlayerCanEquipItem(curPlayer):
-    if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEquip_State:
-        #InsteadEquip 对不起,当前状态无法更换装备
-        #InsteadEquip替换为GeRen_chenxin_436832
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_436832")
-        return False
+def CalcRoleEquipAttr(curPlayer):
+    ## 计算主公装备属性
+    playerID = curPlayer.GetPlayerID()
+    mainEquipAttrDict = {}
     
-    return True
-
-
-## 执行玩家换装逻辑
-#  @param curPlayer 当前玩家
-#  @param curItem 物品实例
-#  @param equipPackIndex 装备背包索引
-#  @param tick 当前时间
-#  @return 布尔值
-#  @remarks 执行玩家换装逻辑
-def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick): 
-    if equipPackIndex < 0:
-        return False
-    playerItemControl = ItemControler.PlayerItemControler(curPlayer)
+    packType = IPY_GameWorld.rptEquip
+    equipPack = curPlayer.GetItemManager().GetPack(packType)
     
-    #---验证是否可以换这件装备---
-    if not ItemCommon.CheckItemCanUse(curItem):
-        return False
-    
-    if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
-        # 过期
-        GameWorld.DebugLog("装备已过期!")
-        return False
-    
-    changeItemEquipPlace = curItem.GetEquipPlace()
-    if changeItemEquipPlace not in ShareDefine.RoleEquipType:
-        return False
-    
-    if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:
-        #检查装备位置和填表是否一致
-        return False
-    
-    #--设置穿上物品星级--
-    #===========================================================================
-    # if changeItemEquipPlace in ShareDefine.RoleEquipType:
-    #    equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
-    #    if equipPartStar != curItem.GetItemStarLV():
-    #        curItem.SetItemStarLV(equipPartStar)
-    #===========================================================================
-            #GameWorld.DebugLog("穿上的装备设置星级: index=%s,star=%s" % (changeItemEquipPlace, equipPartStar))
-    
-    #---开始换装逻辑---
-    
-    #记录换装物品信息
-    itemClassLV = ItemCommon.GetItemClassLV(curItem)
-    changeItemID = curItem.GetItemTypeID()
-    changeItemStarLV = 0  #curItem.GetItemStarLV()
-    changeItemStoneCnt = 0  #curItem.GetUseStoneCount()
-    changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()
-    changeItemUseData = curItem.GetUserData()
-    suiteID = curItem.GetSuiteID()
-    endureReduceType = curItem.GetEndureReduceType()
-    #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
-    
-    #执行换装动作
-    equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)
-    
-    if equipPlace == -1:
-        return False
-    
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    curEquip = equipPack.GetAt(equipPackIndex)
-
-    if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
-        curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
-    #---换装成功---
-    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
-        #通知客户端交换物品
-        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
-    if itemClassLV == GetEquipFacadeClassLV(curPlayer):
-        #穿当前外观阶的套装
-        ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)
+    # 主装备
+    for equipPlace in ChConfig.Def_MainEquipPlaces:
+        equipIndex = equipPlace - 1
+        if equipIndex < 0 or equipIndex >= equipPack.GetCount():
+            continue
+        curEquip = equipPack.GetAt(equipIndex)
+        if not curEquip or curEquip.IsEmpty():
+            continue
+        #itemColor = curEquip.GetItemColor()
         
-    #特殊装备, 不需要刷属性
-    if changeItemEquipPlace in ChConfig.EquipItemNoRefreshState:
-        return True
-    
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)
-    
-    #先刷装备BUFF 再计算属性
-    if changeItemEquipPlace in ChConfig.EquipPlace_LingQi:
-        RefreshPlayerLingQiEquipAttr(curPlayer)
-    elif itemClassLV:
-        RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
-    
-    #刷新所有属性
-    playControl = PlayerControl.PlayerControl(curPlayer)
-    playControl.RefreshPlayerAttrState()
-    
-    #装备的被动触发类技能
-    PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
-    return True
-
+        baseAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrID)
+        baseAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrValue)
+        if baseAttrIDCnt == baseAttrValueCnt:
+            for i in xrange(baseAttrIDCnt):
+                attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrID, i)
+                attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrValue, i)
+                mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue
+                
+        legendAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
+        legendAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
+        if legendAttrIDCnt == legendAttrValueCnt:
+            for i in xrange(legendAttrIDCnt):
+                attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
+                attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
+                mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue
+                
+    GameWorld.DebugLog("主线装备属性: %s" % mainEquipAttrDict, playerID)
+    PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_MainEquip, mainEquipAttrDict)
+    return
 
 ## 刷新装备对人物属性的改变
 #  @param self 类实例
 #  @return 返回值无意义
 #  @remarks 刷新装备对人物属性的改变
 def RefreshPlayerEquipAttribute(curPlayer, classLV=0):
-    GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classLV=%s!!!" % classLV, curPlayer.GetPlayerID())
-    classlvList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classLV == 0 else [classLV]
-    for rclasslv in classlvList:
-        __CalcEquips_Effect(curPlayer, rclasslv)
-
-    #if isRefreshEquipBuff:
-    #    __RefreshPlayerAllEquipBuff(curPlayer)
-    
-    if classLV:
-        playerID = curPlayer.GetPlayerID()
-        if playerID not in PyGameData.g_equipChangeClassLVInfo:
-            PyGameData.g_equipChangeClassLVInfo[playerID] = []
-        classLVList = PyGameData.g_equipChangeClassLVInfo[playerID]
-        if classLV not in classLVList:
-            classLVList.append(classLV)
-            #GameWorld.DebugLog("添加装备缓存变更阶: classLV=%s, %s" % (classLV, classLVList), playerID)
-    return
-
-def OnPlayerEquipLoginLogic(curPlayer):
-    ''' 玩家登录统一处理装备,只遍历一次装备背包,通知信息、更新一次数据,防止总等级统计异常
-                    装备品质橙装及以上数量、装备总星数、强化总等级、进化总等级、洗练总等级、宝石总等级
-    '''
-    
-    #NotifyEquipPartPlusLV(curPlayer)
-    #NotifyEquipPartStar(curPlayer)
-    #Operate_EquipWash.OnEquipWashLogin(curPlayer)
-    #装备位宝石镶嵌通知
-    #Operate_EquipStone.OnLogin(curPlayer)
-#    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow):
-#        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow, 1)
-#        ChangeEquipfacadeByLingGen(curPlayer)
-    
-    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo() # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
-    ePartPlusLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() # A3 B3 装备部位强化信息 #tagMCEquipPartPlusInfo
-    ePartXLPack = ChPyNetSendPack.tagMCEquipPartXLAttrInfo() # A3 BB 装备位洗练属性信息 #tagMCEquipPartXLAttrInfo
-    ePartStonePack = ChPyNetSendPack.tagMCStoneInfo() # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
-    
-    orangeEquipCount = 0
-    totalStar = 0
-    totalPlusLV = 0
-    totalEvolveLV = 0
-    totalWashLV = 0
-    totalStoneLV = 0
-    holeIndexList = Operate_EquipStone.GetAllEquipPlaceHoleIndex()
-    
-    gameData = GameWorld.GetGameData()
-    packType = IPY_GameWorld.rptEquip
-    equipPack = curPlayer.GetItemManager().GetPack(packType)
-    for index in xrange(equipPack.GetCount()):
-        ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index}, isLogNone=False)
-        if not ipyData:
-            continue
-        # 只计算有阶的境界装备
-        if not ipyData.GetClassLV():
-            continue
-        
-        curEquip = equipPack.GetAt(index)
-        if not curEquip.IsEmpty():
-            if curEquip.GetItemColor() >= ShareDefine.Def_Item_Color_Orange:
-                orangeEquipCount += 1
-                
-        # 星级
-        starLV = GetEquipPartStar(curPlayer, index)
-        totalStar += starLV
-        
-        # 强化等级
-        plusProficiency = GetEquipPartProficiency(curPlayer, packType, index)
-        plusLV = GetEquipPartPlusLV(curPlayer, packType, index)
-        totalPlusLV += plusLV
-        
-        # 进化等级
-        evolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, index)
-        totalEvolveLV += evolveLV
-        
-        # 洗练等级
-        washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index)
-        totalWashLV += washLV
-        
-        # 宝石等级
-        stoneIDList, stoneIsBindList = [], []
-        for holeIndex in holeIndexList:
-            stoneID, stoneIsBind = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, index, holeIndex)
-            stoneIDList.append(stoneID)
-            stoneIsBindList.append(stoneIsBind)
-            if stoneID == 0:
-                continue
-            curStone = gameData.GetItemByTypeID(stoneID)
-            stoneLV = 0 if not curStone else curStone.GetEffectByIndex(0).GetEffectValue(1)
-            totalStoneLV += stoneLV
-            
-        # 星级信息包
-        if starLV:
-            ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
-            ePartStarLV.Clear()
-            ePartStarLV.EquipPackIndex = index
-            ePartStarLV.Star = starLV
-            ePartStarLVPack.InfoList.append(ePartStarLV)
-        
-        # 强化、进化信息包
-        if plusLV or plusProficiency or evolveLV:
-            ePartPlusLV = ChPyNetSendPack.tagMCEquipPartPlusLV()
-            ePartPlusLV.Clear()
-            ePartPlusLV.PackType = packType
-            ePartPlusLV.EquipIndex = index
-            ePartPlusLV.EquipPartStarLV = plusLV
-            ePartPlusLV.Proficiency = plusProficiency
-            ePartPlusLV.EvolveLV = evolveLV
-            ePartPlusLVPack.InfoList.append(ePartPlusLV)
-            
-        # 洗练信息包
-        hasXLValue = False
-        xlAttrList = []
-        for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
-            washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue()
-            washValue.XLAttrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (index, attrNum))
-            washValue.XLAttrChange = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (index, attrNum))
-            xlAttrList.append(washValue)
-            if washValue.XLAttrValue or washValue.XLAttrChange:
-                hasXLValue = True
-        if hasXLValue or washLV:
-            ePartXLAttr = ChPyNetSendPack.tagMCEquipPartXLAttr()
-            ePartXLAttr.EquipPlace = index
-            ePartXLAttr.XLAttrLV = washLV
-            ePartXLAttr.XLAttrList = xlAttrList
-            ePartXLAttr.XLAttrCnt = len(ePartXLAttr.XLAttrList)
-            ePartXLPack.InfoList.append(ePartXLAttr)
-            
-        # 宝石信息包
-        stoneCount = len(stoneIDList)
-        if stoneIDList.count(0) != stoneCount:
-            stoneMsg = ChPyNetSendPack.tagMCStoneMsg()
-            stoneMsg.EquipPlace = index
-            stoneMsg.MaxStoneCount = stoneCount 
-            stoneMsg.StoneInfo = stoneIDList
-            stoneMsg.StoneBind = stoneIsBindList
-            ePartStonePack.InfoList.append(stoneMsg)
-            
-    # 通知封包,有值时才通知
-    if ePartStarLVPack.InfoList:
-        ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
-        NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
-    
-    if ePartPlusLVPack.InfoList:
-        ePartPlusLVPack.Count = len(ePartPlusLVPack.InfoList)
-        NetPackCommon.SendFakePack(curPlayer, ePartPlusLVPack)
-    
-    if ePartXLPack.InfoList:
-        ePartXLPack.Count = len(ePartXLPack.InfoList)
-        NetPackCommon.SendFakePack(curPlayer, ePartXLPack)
-        
-    if ePartStonePack.InfoList:
-        ePartStonePack.EquipCount = len(ePartStonePack.InfoList)  
-        NetPackCommon.SendFakePack(curPlayer, ePartStonePack)
-        
-    Operate_EquipPlus.SyncEquipMasterPlusLVInfo(curPlayer)
-    
-    # 更新统计汇总值
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, orangeEquipCount)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, totalStar)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, totalPlusLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, totalEvolveLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, totalWashLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalStoneLV, totalStoneLV)
-    GameWorld.DebugLog("登录更新装备相关值汇总: orangeEquipCount=%s,totalStar=%s,totalPlusLV=%s,totalEvolveLV=%s,totalWashLV=%s,totalStoneLV=%s" 
-                       % (orangeEquipCount, totalStar, totalPlusLV, totalEvolveLV, totalWashLV, totalStoneLV))
-    Sync_EquipPartSuiteActivateInfo(curPlayer)
-    
-    for equipPlace in ChConfig.EquipPlace_LingQi:
-        Sync_LingQiTrainData(curPlayer, equipPlace)
-        
-    return
-
-#===============================================================================
-# #//07 03 人物装备物品#tagCEquipItem
-# //角色装备类型
-# int GetRoleEquipType();
-# //物品在物品背包的索引
-# int GetItemIndex();
-#===============================================================================
-## 人物装备物品
-#  @param index 背包索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 客户端封包响应 //07 03 人物装备物品#tagCEquipItem
-def PlayerEquipItem(index, tick):
-    GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)
-    return
-
-
-## 人物装备物品
-#  @param index 背包索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 客户端封包响应 //07 03 人物装备物品#tagCEquipItem
-def __Func_PlayerEquipItem(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    sendPack = IPY_GameWorld.IPY_CEquipItem()
-    #物品在物品背包的索引
-    packItemIndex = sendPack.GetItemIndex()
-    #角色装备部位
-    equipPackIndex = sendPack.GetRoleEquipType()
-    
-    #检查玩家状态是否可以换装
-    if not CheckPlayerCanEquipItem(curPlayer):
-        return
-    
-    #检查换装间隔
-    #===========================================================================
-    # if tick - curPlayer.GetLastChangeEquipTick() <= ChConfig.Def_MinChangeEquipTime:
-    #    #GameWorld.Log("更换装备时间过短! %d"%(tick - curPlayer.GetLastChangeEquipTick()))       
-    #    return
-    # 
-    # curPlayer.SetLastChangeEquipTick(tick)
-    #===========================================================================
-    
-    #---获取封包需要装备的物品---
-    rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    curItem = rolePack.GetAt(packItemIndex)
-    #---执行玩家换装逻辑---
-    if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
-        return
-    
-    #换装失败通知客户端信息
-    curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)
-    return
-
-
-#---------------------------------------------------------------------
-## 一键换装(封包)
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def OneKeyChangeEquip(index, tick):
-    return
-
-
-## 玩家卸下装备(封包参数)
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def PlayerUnEquip(index, tick):
-    GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)
-    return
-
-
-#---------------------------------------------------------------------    
-## 玩家卸下装备(封包参数)
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_PlayerUnEquip(index, tick):
-    sendPack = IPY_GameWorld.IPY_CUnEquipItem()
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    if not CheckPlayerCanEquipItem(curPlayer):
-        return
-    
-    equipPackIndex = sendPack.GetEquipIndex()
-
-    #如果卸下的是马匹,需要判定如果马匹装备背包有物品,不让放下
-    #===========================================================================
-    # if equipIndex == IPY_GameWorld.rptHorse :
-    #    itemEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptHorseEquip)
-    #    
-    #    if not ItemControler.GetPackIsEmpty(itemEquipPack):
-    #        PlayerControl.NotifyCode(curPlayer, "7E355D97-520A-4A8C-8BC993AAEAF6071F")
-    #        return
-    #===========================================================================
-    
-    playerItemControl = ItemControler.PlayerItemControler(curPlayer)
-    result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())
-    
-    if not result:
-        #卸下装备失败
-        return
-    
-    equipID = result[0]
-    equipPlace = result[1]
-    itemClassLV = result[2]
-    
-    ##特殊装备 , 不需要冲刷属性
-    if equipPlace in ChConfig.EquipItemNoRefreshState:
-        return
-    
-    #先刷装备BUFF 再计算属性
-    if equipPlace in ChConfig.EquipPlace_LingQi:
-        RefreshPlayerLingQiEquipAttr(curPlayer)
-    elif itemClassLV:
-        RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
-    
-    #刷新所有属性
-    playControl = PlayerControl.PlayerControl(curPlayer)
-    playControl.RefreshPlayerAttrState()
-    
-    #装备的被动触发类技能
-    PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
     return
 
 #// A3 18 灵器突破 #tagCMLingQiEquipBreak
@@ -634,7 +262,7 @@
 def RefreshPlayerLingQiEquipAttr(curPlayer):
     ''' 刷新玩家灵器装备属性
     '''
-    
+    return
     classLV = 0 # 灵器阶默认为0
     allAttrList = [{} for _ in range(4)]
     lingQiAttrList = [{} for _ in range(4)]
@@ -752,503 +380,8 @@
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList)
     return
 
-def __CalcEquips_Effect(curPlayer, classLV):
-    ''' 境界装备系统属性
-    1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
-        1.1 装备本身属性: 不能有影响其他境界装备的属性
-                                基础属性: 物品表中的配置
-                                传奇属性: 
-                                
-    2.装备位星级模块    
-        2.1 装备位升星属性:不能有影响其他境界装备的属性
-                                升星基础属性,属性属于装备基础
-                                升星等级属性,会影响本阶装备基础
-                                星级套装属性,详见套装属性
-                    
-        2.2 装备位套装属性:不能有影响其他境界装备的属性
-                                由装备位是否套装及星级数决定套装属性
-            
-    3.装备位强化模块:战力为所有境界装备位强化属性总和战力
-                    强化等级属性    
-                    进化等级属性,影响本部位本境界装备基础
-                    
-    4.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
-                    宝石等级属性
-                    宝石觉醒属性,会影响本阶装备基础
-                    
-    5.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
-                    洗练等级属性
-                    洗练套装属性,会影响本阶装备基础
-    '''
-    
-    if classLV < 1:
-        GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶模块: classLV=%s" % classLV)
-        return
-    #GameWorld.DebugLog("----- 刷境界装备战力: classLV=%s" % (classLV))
-    
-    allEquipBaseAttrDict = {} # 所有装备基础属性 {attrID:value, ...}
-    baseEquipBaseAttrDict = {} # 基础装备基础属性{attrID:value, ...}
-    equipBaseAttrDict = {} # 装备基础属性 {装备位:{attrID:value, ...}, ...}
-        
-    equipColorDict = {} # 装备品质信息 {装备位:itemColor, ...}
-    allAttrListEquip = [{} for _ in range(4)]  # 装备属性
-    equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-    baseAttrDictStar, totalStarLV = {}, 0
-    allAttrListStar = [{} for _ in range(4)]  # 升星属性
-    star_addEquipBaseAttrPerList = [{}, {}, {}] # 升星功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-    baseAttrDictPlus, totalPlusLV = {}, 0
-    allAttrListPlus = [{} for _ in range(4)]  # 强化属性
-    plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-    baseAttrDictStone, totalStoneLV = {}, 0
-    allAttrListStone = [{} for _ in range(4)]  # 宝石属性
-    #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-    baseAttrDictWash, totalWashLV = {}, 0
-    allAttrListWash = [{} for _ in range(4)]  # 洗练属性
-    #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-    
-    packType = IPY_GameWorld.rptEquip
-    playerEquip = curPlayer.GetItemManager().GetPack(packType)
-    equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
-    #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)  #最大套装类型
-    #equipPlaceList = []  # 有穿戴装备的装备位列表
-    suitCntDict = {}  #套装数量字典
-    #legendAttrDict = {}  #所有传奇属性
-    equipScoreTotal = 0  #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
-    
-    basePlusLVMin = None # 基础装备最小强化等级,计算大师强化属性用
-    
-    # 1. 循环遍历本阶装备
-    for equipPlace in equipPartStarIndexList:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
-        if not ipyData:
-            continue
-        equipIndex = ipyData.GetGridIndex()
-        curEquip = playerEquip.GetAt(equipIndex)
-        if not curEquip or curEquip.IsEmpty():
-            continue
-        
-        #if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
-        #    # 过期,暂不判断,以后境界装备有时效装备再开启
-        #    continue
-        
-        #equipPlaceList.append(equipIndex)
-        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
-        
-        itemColor = curEquip.GetItemColor()
-        equipColorDict[equipPlace] = itemColor
-        
-        baseAttrDict = {} # 装备位基础属性: 物品表 + 星级基础
-        isBaseEquip = equipPlace in ChConfig.EquipPlace_Base
-        
-        #GameWorld.DebugLog("装备位 %s: itemID=%s,isBaseEquip=%s,equipScoreTotal=%s" % (equipPlace, curEquip.GetItemTypeID(), isBaseEquip, equipScoreTotal))
-        
-        #基础属性效果
-        for i in xrange(curEquip.GetEffectCount()):
-            curEffect = curEquip.GetEffectByIndex(i)
-            if not curEffect:
-                break
-            effectID = curEffect.GetEffectID()
-            if effectID == 0:
-                #最后一个
-                break
-            effectValue = curEffect.GetEffectValue(0)
-            if not effectValue:
-                continue
-            PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
-            baseAttrDict[effectID] = baseAttrDict.get(effectID, 0) + effectValue
-            allEquipBaseAttrDict[effectID] = allEquipBaseAttrDict.get(effectID, 0) + effectValue
-            if isBaseEquip:
-                baseEquipBaseAttrDict[effectID] = baseEquipBaseAttrDict.get(effectID, 0) + effectValue
-            #GameWorld.DebugLog("    物品表属性: ID=%s +%s" % (effectID, effectValue))
-                
-        #星数属性
-        equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) # 生效的星数
-        if equipPartStar:
-            totalStarLV += equipPartStar
-            #GameWorld.DebugLog("    星级属性: classLV=%s, equipPlace=%s, equipPartStar=%s" % (classLV, equipPlace, equipPartStar))
-            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, allAttrListStar)
-                baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
-                baseAttrDictStar[starBaseAttrID] = baseAttrDictStar.get(starBaseAttrID, 0) + starBaseAttrValue
-                allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
-                if isBaseEquip:
-                    baseEquipBaseAttrDict[starBaseAttrID] = baseEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
-                #GameWorld.DebugLog("    星级基础属性: ID=%s +%s" % (starBaseAttrID, starBaseAttrValue))
-                    
-            starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # 星级附加
-            for starAttrID, starAttrValue in starAttrDict.items():
-                PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar)
-                #GameWorld.DebugLog("    星级附加属性: ID=%s +%s" % (starAttrID, starAttrValue))
-                __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList)
-                
-        equipBaseAttrDict[equipPlace] = baseAttrDict
-        
-        #套装计数
-        suiteID = curEquip.GetSuiteID()
-        if suiteID:
-            if suiteID not in suitCntDict:
-                suitCntDict[suiteID] = []
-            suitCntDict[suiteID].append(equipPartStar)
-            
-        #传奇属性
-        legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
-        for i, legendAttrID in enumerate(legAttrIDList):
-            legendAttrValue = legAttrValueList[i]
-            PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
-            #GameWorld.DebugLog("    传奇属性: ID=%s +%s" % (legendAttrID, legendAttrValue))
-            __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)
-        
-        #物品强化属性
-        plusLV = __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrListPlus, plus_addEquipBaseAttrPerList)
-        totalPlusLV += plusLV
-        if isBaseEquip:
-            basePlusLVMin = plusLV if basePlusLVMin == None else min(basePlusLVMin, plusLV)
-            
-        #计算装备宝石加成
-        gemLVList = CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrListStone)
-        totalStoneLV += (sum(gemLVList) if gemLVList else 0)
-        
-        #洗练属性
-        washLV = Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrListWash)
-        totalWashLV += washLV
-        
-#    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, allAttrListStar)
-    #大师
-    __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList)
-    
-#    GameWorld.DebugLog("    升星属性套装: %s" % (allAttrListEquip))
-    
-    # 3. 计算对装备基础的附加加成
-#    GameWorld.DebugLog("    -----" )
-#    GameWorld.DebugLog("    所有装备基础属性: %s" % (allEquipBaseAttrDict))
-#    GameWorld.DebugLog("    基础装备基础属性: %s" % (baseEquipBaseAttrDict))
-#    GameWorld.DebugLog("    单件装备基础属性: %s" % (equipBaseAttrDict))
-#    GameWorld.DebugLog("    -----" )
-    #计算功能点对装备基础的加成
-    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")
-    
-    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
-    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
-    
-    # 4. 累加所有阶装备位属性
-    playerID = curPlayer.GetPlayerID()
-    if playerID not in PyGameData.g_playerEquipPartAttrDict:
-        PyGameData.g_playerEquipPartAttrDict[playerID] = {}
-    equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID]
-    equipPartAttrDict[classLV] = [equipFightPowerEx, 
-                                  allAttrListEquip, insideAttrDictEquip, equipColorDict,
-                                  baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV,
-                                  baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV,
-                                  baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV,
-                                  baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV,
-                                  ]
-    
-#    GameWorld.DebugLog("    ----- 累加所有阶装备位养成属性")
-#    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, classEquipColorDict = [{} for _ in range(4)], {}, {}
-    allClassAttrListStar, allClassInsideAttrDictStar, classBaseAttrDictStar, classStarLVDict = [{} for _ in range(4)], {}, {}, {}
-    allClassAttrListPlus, allClassInsideAttrDictPlus, classBaseAttrDictPlus, classPlusLVDict = [{} for _ in range(4)], {}, {}, {}
-    allClassAttrListStone, allClassInsideAttrDictStone, classBaseAttrDictStone, classStoneLVDict = [{} for _ in range(4)], {}, {}, {}
-    allClassAttrListWash, allClassInsideAttrDictWash, classBaseAttrDictWash, classWashLVDict = [{} for _ in range(4)], {}, {}, {}
-    for classLV, attrList in equipPartAttrDict.items():
-        equipFightPowerEx, \
-        allAttrListEquip, insideAttrDictEquip, equipColorDict, \
-        baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV, \
-        baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV, \
-        baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV, \
-        baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV = attrList
-        #GameWorld.DebugLog("    classLV=%s, %s" % (classLV, attrList))
-        allClassEquipFightPowerEx += equipFightPowerEx
-        for i in xrange(4):
-            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)
-        
-        classEquipColorDict[classLV] = equipColorDict
-        classBaseAttrDictStar[classLV] = baseAttrDictStar
-        classBaseAttrDictPlus[classLV] = baseAttrDictPlus
-        classBaseAttrDictStone[classLV] = baseAttrDictStone
-        classBaseAttrDictWash[classLV] = baseAttrDictWash
-        classStarLVDict[classLV] = totalStarLV
-        classPlusLVDict[classLV] = totalPlusLV
-        classStoneLVDict[classLV] = totalStoneLV
-        classWashLVDict[classLV] = totalWashLV
-        
-    customAttrDictEquip = {"classEquipColorDict":classEquipColorDict}
-    customAttrDictStar = {"classBaseAttrDictStar":classBaseAttrDictStar, "classStarLVDict":classStarLVDict}
-    customAttrDictPlus = {"classBaseAttrDictPlus":classBaseAttrDictPlus, "classPlusLVDict":classPlusLVDict}
-    customAttrDictStone = {"classBaseAttrDictStone":classBaseAttrDictStone, "classStoneLVDict":classStoneLVDict}
-    customAttrDictWash = {"classBaseAttrDictWash":classBaseAttrDictWash, "classWashLVDict":classWashLVDict}
-    
-#    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))
-    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip, customAttrDict=customAttrDictEquip)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar, customAttrDict=customAttrDictStar)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus, customAttrDict=customAttrDictPlus)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone, customAttrDict=customAttrDictStone)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash, customAttrDict=customAttrDictWash)
-    return
-
-def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList):
-    ## 计算其他功能属性对装备基础属性的加成
-        
-    if attrID not in ChConfig.EquipBassAttrAddInfoSet:
-        return
-    effPlace, calcAttrList = ChConfig.EquipBassAttrAddInfoSet[attrID]
-    #GameWorld.DebugLog("        装备基础加成信息: ID=%s,effPlace=%s,calcAttrList=%s" % (attrID, effPlace, calcAttrList))
-    # 所有部位
-    if effPlace == -1:
-        allPlaceAddPerDict = addPerInfoList[0]
-        for calcAttrIndex in calcAttrList:
-            allPlaceAddPerDict[calcAttrIndex] = allPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
-        #GameWorld.DebugLog("            当前加成信息=%s" % (addPerInfoList))
-        return
-        
-    # 基础部位
-    if effPlace == -2:
-        basePlaceAddPerDict = addPerInfoList[1]
-        for calcAttrIndex in calcAttrList:
-            basePlaceAddPerDict[calcAttrIndex] = basePlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
-        #GameWorld.DebugLog("            当前加成信息=%s" % (addPerInfoList))
-        return
-    
-    # 指定部位
-    elif effPlace > 0 and equipPlace == effPlace:
-        assignPlaceAddPerDict = addPerInfoList[2]
-        if equipPlace not in assignPlaceAddPerDict:
-            assignPlaceAddPerDict[equipPlace] = {}
-        curPlaceAddPerDict = assignPlaceAddPerDict[equipPlace]
-        for calcAttrIndex in calcAttrList:
-            curPlaceAddPerDict[calcAttrIndex] = curPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
-        #GameWorld.DebugLog("            当前加成信息=%s" % (addPerInfoList))
-        return
-    
-    return
-
-def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""):
-    ## 计算其他功能属性对装备基础属性加成的属性具体值
-    allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList
-    #GameWorld.DebugLog("    计算功能点对装备基础属性加成: %s" % sign)
-    #GameWorld.DebugLog("        全部装备属性: %s, 加成%s" % (allEquipBaseAttrDict, allPlaceAddPerDict))
-    for attrID, addPer in allPlaceAddPerDict.items():
-        if attrID not in allEquipBaseAttrDict:
-            continue
-        baseValue = allEquipBaseAttrDict[attrID]
-        addValue = int(baseValue * addPer / 10000.0)
-        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
-        #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
-    
-    #GameWorld.DebugLog("        基础装备属性: %s, 加成%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict))
-    for attrID, addPer in basePlaceAddPerDict.items():
-        if attrID not in baseEquipBaseAttrDict:
-            continue
-        baseValue = baseEquipBaseAttrDict[attrID]
-        addValue = int(baseValue * addPer / 10000.0)
-        PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
-        #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
-        
-    #GameWorld.DebugLog("        指定装备属性: %s, 加成%s" % (equipBaseAttrDict, assignPlaceAddPerDict))
-    for equipPlace, addPerDict in assignPlaceAddPerDict.items():
-        if equipPlace not in equipBaseAttrDict:
-            continue
-        baseAttrDict = equipBaseAttrDict[equipPlace]
-        for attrID, addPer in addPerDict.items():
-            if attrID not in baseAttrDict:
-                continue
-            baseValue = baseAttrDict[attrID]
-            addValue = int(baseValue * addPer / 10000.0)
-            PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
-            #GameWorld.DebugLog("            加成: ID=%s +%s %s" % (attrID, addValue, addPer))
-    return
-
 def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):
     ## 计算传奇属性
-    
-    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
-    if not legAttrIDList:
-        #GameWorld.DebugLog("没有传奇属性!")
-        return
-    #GameWorld.DebugLog("传奇属性: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legAttrIDList, legAttrValueList))
-    
-    for i, legendAttrID in enumerate(legAttrIDList):
-        legendAttrValue = legAttrValueList[i]
-        #GameWorld.DebugLog("加传奇属性: %s +%s" % (legendAttrID, legendAttrValue))
-        PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
-        #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
-        
-    return
-
-def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrList, plus_addEquipBaseAttrPerList):
-    ## 计算装备强化后的属性
-    equipPartPlusLV = GetEquipPartPlusLV(curPlayer, packType, equipIndex)
-    equipPartPlusEvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, equipIndex)
-    
-    if not equipPartPlusLV:
-        return equipPartPlusLV
-    plusType = GetEquipPlusType(curEquip)
-    if plusType is None:
-        return equipPartPlusLV
-    
-    #GameWorld.DebugLog("    强化属性: plusType=%s,equipPartPlusLV=%s,equipPartPlusEvolveLV=%s" % (plusType, equipPartPlusLV, equipPartPlusEvolveLV))
-    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartPlusLV)
-    if not ipyData:
-        return equipPartPlusLV
-    attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
-    for i, attrID in enumerate(attrTypeList):
-        #GameWorld.DebugLog("    强化基础属性: ID=%s +%s" % (attrID, attrValueList[i]))
-        PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
-        baseAttrDictPlus[attrID] = baseAttrDictPlus.get(attrID, 0) + attrValueList[i]
-        
-    if not equipPartPlusEvolveLV:
-        return equipPartPlusLV
-    #进化属性
-    equipPlace = curEquip.GetEquipPlace()
-    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV)
-    if not ipyData:
-        return equipPartPlusLV
-    for attrID, attrValue in ipyData.GetAttr().items():
-        #GameWorld.DebugLog("    强化进阶属性: ID=%s +%s" % (attrID, attrValue))
-        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-        __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, plus_addEquipBaseAttrPerList)
-        
-    return equipPartPlusLV
-
-def __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList):
-    ## 计算装备大师强化属性
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("ItemPlusMaster", classLV)
-    if not ipyDataList:
-        return
-    
-    actMasterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) # 已激活的最大大师等级
-    
-    for ipyData in ipyDataList:
-        needMasterPlusLV = ipyData.GetMasterPlusLV()
-        if basePlusLVMin < needMasterPlusLV:
-            #GameWorld.DebugLog("    未达到大师强化等级! classLV=%s,basePlusLVMin=%s < needMasterPlusLV=%s" % (classLV, basePlusLVMin, needMasterPlusLV))
-            continue
-        if actMasterPlusLV < needMasterPlusLV:
-            #GameWorld.DebugLog("    未激活大师强化等级! classLV=%s,actMasterPlusLV=%s < needMasterPlusLV=%s" % (classLV, actMasterPlusLV, needMasterPlusLV))
-            continue
-        
-        attrIDList = ipyData.GetMasterPlusAttrIDList()
-        attrValueList = ipyData.GetMasterPlusAttrValueList()
-        for i, attrID in enumerate(attrIDList):
-            attrValue = attrValueList[i]
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPlus)
-            __CalcFuncAddEquipAttrPer(None, attrID, attrValue, plus_addEquipBaseAttrPerList)
-            #GameWorld.DebugLog("    强化大师属性! needMasterPlusLV=%s, attrID=%s + %s" % (needMasterPlusLV, attrID, attrValue))
-            
-    return
-
-## 装备套装属性计算
-#  @param curPlayer 当前玩家
-#  @return None
-def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit):
-    if not suitCntDict:
-        return
-    #GameWorld.DebugLog('    suitCntDict=%s'%suitCntDict)
-    learnSkillInfo = {}
-    suiteSkillTypeIDList = []
-    skillManager = curPlayer.GetSkillManager()
-    for suiteID, starList in suitCntDict.items():
-        ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)
-        if not ipyDataList:
-            continue
-        for ipyData in ipyDataList:
-            suiteCnt = ipyData.GetSuiteCnt()
-            needStar = ipyData.GetStar()
-            skillID = ipyData.GetSkillID()
-            activateIndex = ipyData.GetActivateIndex()
-            isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)
-            skillData = None if not skillID else GameWorld.GetGameData().GetSkillBySkillID(skillID)
-            skillTypeID = 0 if not skillData else skillData.GetSkillTypeID()
-            skillLV = 0 if not skillData else skillData.GetSkillLV()
-            #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s,skillID=%s,skillTypeID=%s,skillLV=%s" % (suiteID, suiteCnt, needStar, isActivate, skillID, skillTypeID, skillLV))
-            if skillTypeID and skillTypeID not in suiteSkillTypeIDList:
-                suiteSkillTypeIDList.append(skillTypeID)
-            if isActivate and [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt:
-                #GameWorld.DebugLog("    套装: suiteID=%s,suiteCnt=%s,needStar=%s" % (suiteID, suiteCnt, needStar))
-                for attrID, attrValue in ipyData.GetAttrInfo().items():
-                    PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)
-                    #GameWorld.DebugLog("        属性: ID=%s +%s" % (attrID, attrValue))
-                #技能
-                if skillTypeID and skillLV and skillLV > learnSkillInfo.get(skillTypeID, 0):
-                    learnSkillInfo[skillTypeID] = skillLV
-                    
-    #GameWorld.DebugLog("suiteSkillTypeIDList:%s" % suiteSkillTypeIDList)
-    #GameWorld.DebugLog("learnSkillInfo:%s" % learnSkillInfo)
-    skillChange = False
-    playerCtl = PlayerControl.PlayerControl(curPlayer)  
-    for skillTypeID in suiteSkillTypeIDList:
-        if skillTypeID in learnSkillInfo:
-            #需要学习的不处理
-            continue
-        curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
-        if not curSkill:
-            continue
-        skillChange = True
-        skillID = curSkill.GetSkillID()
-        GameWorld.DebugLog("    删除套装技能: skillID=%s" % skillID)
-        skillManager.DeleteSkillBySkillID(skillID)
-        playerCtl.RefreshSkillFightPowerByDel(skillID)
-        
-    for skillTypeID, skillLV in learnSkillInfo.items():
-        skillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, skillLV)
-        if not skillData:
-            continue
-        skillID = skillData.GetSkillID()
-        curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
-        if curSkill:
-            if skillLV == curSkill.GetSkillLV():
-                continue
-            delSkillID = curSkill.GetSkillID()
-            GameWorld.DebugLog("    删除套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s,delSkillID=%s" % (skillTypeID, skillLV, skillID, delSkillID))
-            skillManager.DeleteSkillBySkillID(delSkillID)
-            playerCtl.RefreshSkillFightPowerByDel(delSkillID)
-            
-        GameWorld.DebugLog("    激活套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s" % (skillTypeID, skillLV, skillID))
-        skillManager.LVUPSkillByID(skillID)   
-        playerCtl.RefreshSkillFightPowerEx(skillID, 0)
-        skillChange = True
-        
-    if skillChange:
-        # 重刷被动技能
-        PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)    
     return
 
 #// A5 C6 装备部位星级套装激活 #tagCMEquipPartSuiteActivate
@@ -1322,193 +455,6 @@
     NetPackCommon.SendFakePack(curPlayer, activateInfo)
     return
 
-
-## 1算装备触发的技能 (全身) 
-#  @param curPlayer 当前玩家
-#  @param curEquip 当前装备
-#  @return None
-#  @remarks 函数详细说明.
-def CalcCurEquip_SkillBuff(curPlayer, curEquip):
-    SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)
-    return
-
-
-## 计算装备镶嵌宝石附加效果->基本属性 (宝石) 
-#  @param curPlayer 当前玩家
-#  @param curEquip 当前装备
-#  @param allAttrList 属性信息 
-#  @return 无返回值
-def CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrList):
-    gameData = GameWorld.GetGameData()
-
-    effIndexList = [1, 2, 3, 4]  # 第一个效果值是类型等级效果值,非属性效果值
-    gemLVList = []
-    for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
-        
-        curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
-        if curGemID == 0:
-            continue
-        curGem = gameData.GetItemByTypeID(curGemID)
-        if not curGem:
-            GameWorld.ErrLog('equip stone id:%s not in item table' % (curGemID))
-            continue    
-        for effIndex in effIndexList:         
-            curGemEffect = curGem.GetEffectByIndex(effIndex)
-            effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0)
-            if effectID and effectValue:
-                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList)
-                baseAttrDictStone[effectID] = baseAttrDictStone.get(effectID, 0) + effectValue
-        gemEffect = curGem.GetEffectByIndex(0)
-        gemLV = gemEffect.GetEffectValue(1)
-        gemLVList.append(gemLV)
-    return gemLVList
-
-#---------------------------------------------------------------------
-## 装备添加Buff 
-#  @param curPlayer 当前玩家
-#  @param addSkillID 技能ID
-#  @return None
-#  @remarks 函数详细说明.
-def EquipAddBuff(curPlayer, addSkillID, value=0):
-    
-    value = min(value, ChConfig.Def_UpperLimit_DWord)
-    curBuff = curPlayer.GetEquipBuff().AddBuff(addSkillID, 0, False)
-    curBuff.SetOwnerID(curPlayer.GetID())
-    curBuff.SetOwnerType(curPlayer.GetGameObjType())
-    if value > 0:
-        curBuff.SetValue(value)
-    return
-
-
-#---------------------------------------------------------------------
-#===============================================================================
-# #//03 2F 请求装备显隐#tagRequestEquipShowHide
-# //装备显示开关
-# int GetEquipShowSwitch(); 灵宠外观索引*10000000+坐骑外观索引*1000000+灵根特效表key * 1000+第几套*10+是否有套装
-#===============================================================================
-##请求装备显隐. (设置显示哪套装备外观)
-# @param index 玩家索引
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 客户端封包响应 //03 2F 请求装备显隐#tagRequestEquipShowHide
-def RequestEquipShowHide(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    #---检查刷新间隔--
-    interval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_RequestEquipShowHide]
-    
-    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide) < interval:
-        #没有到刷新间隔,54外挂,不给提示
-#        GameWorld.ErrLog('请求装备显隐, 没有到刷新间隔')
-        return
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)
-    sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()
-    classLV = sendPack.GetEquipShowSwitch()
-    oldClassLV = GetEquipFacadeClassLV(curPlayer)
-    if oldClassLV == classLV:
-        return
-    if not ChangeEquipfacadeByClassLV(curPlayer, classLV):
-        return
-    
-    #通知外观装备
-    updFaceEquipIndex = 0
-    equipIndexList = []
-    
-    for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
-        if not ipyData:
-            continue
-        gridIndex = ipyData.GetGridIndex()
-        updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
-        equipIndexList.append(gridIndex)
-
-    PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    for equipPackIndex in equipIndexList:
-        curEquip = equipPack.GetAt(equipPackIndex)
-        if not ItemCommon.CheckItemCanUse(curEquip):
-            continue
-        changeItemID = curEquip.GetItemTypeID()
-        changeItemStarLV = 0  #curItem.GetItemStarLV()
-        changeItemStoneCnt = 0  #curItem.GetUseStoneCount()
-        changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()
-        changeItemUseData = curEquip.GetUserData()
-        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
-    
-    return
-
-def ChangeEquipfacadeByClassLV(curPlayer, classLV):
-    ##变更第X套装备外观 灵根特效表key * 1000+第几套*10+是否有套装
-    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
-    realSuit=1
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    for place in ChConfig.EquipPlace_Base:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
-        if not ipyData:
-            realSuit = 0
-            break
-        gridIndex = ipyData.GetGridIndex()
-        curEquip = equipPack.GetAt(gridIndex)
-        if not ItemCommon.CheckItemCanUse(curEquip):
-            realSuit = 0
-            break
-        if not curEquip.GetSuiteID():
-            realSuit = 0
-            break
-    updEquipShowSwitch = oldEquipShowSwitch /1000*1000+ classLV*10+realSuit
-    if oldEquipShowSwitch == updEquipShowSwitch:
-        return
-    curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
-    ChangeEquipEffectByPlusMaster(curPlayer, classLV)
-    return True
-
-#!!! 特效根据灵根品级变化改成根据强化大师变化
-def ChangeEquipfacadeByLingGen(curPlayer):
-#    ## 灵根品级变化影响角色外观显示 灵根特效表key * 1000+第几套*10+是否有套装
-#    pointValueInfo = [[ShareDefine.Def_Effect_Metal,PlayerControl.GetMetalQualityLV(curPlayer)],
-#                          [ShareDefine.Def_Effect_Wood,PlayerControl.GetWoodQualityLV(curPlayer)],
-#                          [ShareDefine.Def_Effect_Water,PlayerControl.GetWaterQualityLV(curPlayer)],
-#                          [ShareDefine.Def_Effect_Fire,PlayerControl.GetFireQualityLV(curPlayer)],
-#                          [ShareDefine.Def_Effect_Earth,PlayerControl.GetEarthQualityLV(curPlayer)],
-#                          ]
-#    g_skillElementCntDict = {} #灵根对应使用专精技能数量
-#    skillManager = curPlayer.GetSkillManager()
-#    gameData = GameWorld.GetGameData()
-#    for i in xrange(skillManager.GetSkillCount()):
-#        curSkill = skillManager.GetSkillByIndex(i)
-#        skillID = curSkill.GetSkillTypeID()
-#        curSelectSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
-#        if not curSelectSkillID:
-#            continue
-#        elementSkillData = gameData.GetSkillBySkillID(curSelectSkillID)
-#        if not elementSkillData:
-#            continue
-#        skillElementType = SkillShell.GetSkillElementType(elementSkillData)
-#        g_skillElementCntDict[skillElementType] = g_skillElementCntDict.get(skillElementType, 0) + 1
-#    
-#    showPointID, showQualityLV = 0, 0
-#    for pointID, qualityLV in pointValueInfo:
-#        if qualityLV > showQualityLV:
-#            showQualityLV = qualityLV
-#            showPointID = pointID
-#        elif showQualityLV and qualityLV == showQualityLV:
-#            #比谁的专精技能数量多
-#            if g_skillElementCntDict.get(pointID, 0) > g_skillElementCntDict.get(showPointID, 0):
-#                showQualityLV = qualityLV
-#                showPointID = pointID
-#    effectID = 0
-#    if showPointID:
-#        ipyData = IpyGameDataPY.GetIpyGameData('LingGenEffect', showPointID, showQualityLV)
-#        if not ipyData:
-#            return
-#        effectID = ipyData.GetID()
-#    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
-#    updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * effectID
-#    GameWorld.DebugLog('灵根品级变化影响角色外观显示g_skillElementCntDict=%s,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%
-#                       (g_skillElementCntDict, oldEquipShowSwitch, updEquipShowSwitch))
-#    if oldEquipShowSwitch != updEquipShowSwitch:
-#        curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
-    return
 def ChangeEquipEffectByPlusMaster(curPlayer, classLV):
     # 强化大师特效
     if (classLV != GetEquipFacadeClassLV(curPlayer)):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index eb58ca8..55c26ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -648,15 +648,6 @@
         #这个物品不是一般物品, 直接返回结果
         return useSpecialItemResult
     
-    #---特殊装备不验证装备属性, 普通物品要验证装备属性---
-    itemControler = ItemControler.PlayerItemControler(curPlayer)
-    
-    #装备无法使用
-    if itemControler.PlayerCanEquipItem(curItem, False):
-        #这个物品是装备
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045")
-        return
-    
     #物品类型ID
     itemTypeID = curItem.GetItemTypeID()
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 3d0c00b..57071d1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -747,65 +747,6 @@
         self.__PlayerItem = self.__PlayerItemManager.GetPack(IPY_GameWorld.rptItem)
         return
     
-    ## 玩家是否能装备物品 
-    #  @param curItem 当前物品
-    #  @param needNotify 是否需要通知客户端
-    #  @return 布尔值
-    #  @remarks 函数详细说明.
-    def PlayerCanEquipItem(self, curItem, needNotify):
-        curPlayer = self.__Player
-        #非法装备检查
-        if curItem.GetIsLocked():
-            if needNotify:
-                PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
-            
-            return False
-        
-        #任务物品检查
-        if IsEventItem(curItem):
-            if needNotify:
-                PlayerControl.NotifyCode(curPlayer, "TaskRes")
-            
-            return False
-        
-        #数据库中是1开始
-#        if curItem.GetEquipPlace() == 0:
-#            if needNotify:
-#                #物品不能装备
-#                PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_595819")
-#
-#            return False
-        
-        #职业检查
-        if not ItemCommon.CheckJob(curPlayer, curItem):
-            if needNotify:
-                PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
-
-            return False
-
-        #性别检查
-        curItemNeedSexReq = curItem.GetSexReq()
-        
-        if curItemNeedSexReq != ChConfig.Def_PlayerSex_All and curItemNeedSexReq != curPlayer.GetSex() :
-            if needNotify:
-                PlayerControl.NotifyCode(curPlayer, "SexErr")
-
-            return False
-
-        #等级检查
-        if not CheckItemUseLV(curPlayer, curItem, needNotify):
-            return False
-        
-        #=======================================================================
-        # #马匹检查
-        # if curItem.GetType() == ChConfig.Def_Item_Type_Horse and not CheckCanEquipHorse(curPlayer):
-        #    return False
-        #=======================================================================
-
-    
-        return True
-    
-    
     ## 交换装备
     #  @param curItem 当前物品
     #  @param equipPackIndex 装备背包格子
@@ -827,76 +768,13 @@
             #curEquip.SetItemStarLV(0) # 交换下的装备星级设置为0
             return ItemCommon.SwitchItem(curPlayer, curEquip, curItem, IPY_GameWorld.rptEquip)
         
-        return False    
-    
-    # 计算装备的珍品数量
-    def RefreshStartEquipCount(self):
-#        curPlayer = self.__Player
-#        count = 0
-#        equipPack = self.__PlayerEquip
-#        for i in xrange(equipPack.GetCount()):
-#            curEquip = equipPack.GetAt(i)
-#            
-#            if curEquip.IsEmpty():
-#                continue
-#            
-#            if not curEquip.GetItemQuality():
-#                continue
-#            
-#            count += 1
-#            
-#        curPlayer.SetDict(ChConfig.Def_PlayerKey_StartEquipCnt, count)
-        return
+        return False
     
     def GetStartEquipCount(self):
         return 0
         #curPlayer = self.__Player
         #return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StartEquipCnt)
 
-    ## 装备当前物品
-    #  @param curItem 当前物品
-    #  @param equipPackIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
-    #  @return 替换的位置 -1表示替换失败
-    def EquipItem(self, curItem, equipPackIndex):
-        if not self.PlayerCanEquipItem(curItem, True):
-            return -1
-        
-        classLV = ItemCommon.GetItemClassLV(curItem)
-        equipPlace = curItem.GetEquipPlace()
-        
-        curPlayer = self.__Player
-        equipPack = self.__PlayerEquip
-        equipItem = equipPack.GetAt(equipPackIndex)
-        if not equipItem:
-            return -1
-        desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()]
-        srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData()
-        
-        befIsOrangeEquip = 1 if (not equipItem.IsEmpty() and equipItem.GetItemColor() >= ChConfig.Def_Quality_Orange) else 0
-        aftIsOrangeEquip = 1 if curItem.GetItemColor() >= ChConfig.Def_Quality_Orange else 0
-        
-        #--其他装备物品---
-        #itemColor = curItem.GetItemColor()
-        result = self.SwitchEquip(curItem, equipPackIndex)
-        if result:
-            #换装宝石处理
-            Operate_EquipStone.DoMoveEquipStone(curPlayer, equipPackIndex)
-            dataDict = {'dotype':'EquipItem', 'desItemID':desItemID, 'desUserData':desUserData,'srcItemID':srcItemID,'srcUserData':srcUserData}
-            DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
-            self.__UpdEquipOrangeCount(befIsOrangeEquip, aftIsOrangeEquip)
-            
-        self.RefreshStartEquipCount()
-        return equipPlace if result else -1
-    
-    def __UpdEquipOrangeCount(self, befIsOrangeEquip, aftIsOrangeEquip):
-        #更新橙装数量
-        curPlayer = self.__Player
-        befEquipOrangeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount)
-        aftEquipOrangeCount = max(0, befEquipOrangeCount + aftIsOrangeEquip - befIsOrangeEquip)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, aftEquipOrangeCount)
-        GameWorld.DebugLog("更新橙装及以上件数: befIsOrangeEquip=%s,aftIsOrangeEquip=%s,befEquipOrangeCount=%s,aftEquipOrangeCount=%s" 
-                           % (befIsOrangeEquip, aftIsOrangeEquip, befEquipOrangeCount, aftEquipOrangeCount))
-        return
     
     ## 替换可以叠加物品逻辑 
     #  @param curEquip 当前装备
@@ -938,85 +816,6 @@
             SetItemCount(curItem, sumValue - equipPackCount)
         
         return True
-    
-    ## 卸载物品 
-    #  @param equipIndex 装备索引
-    #  @param packIndex 背包索引
-    #  @return equipID , equipPlace
-    #  @remarks 函数详细说明.
-    def UnEquipItem(self, equipIndex, packIndex):
-        curPlayer = self.__Player
-        equipItem = self.__PlayerEquip
-        curEquip = equipItem.GetAt(equipIndex)
-        #目标装备检查
-        if curEquip == None or curEquip.IsEmpty():
-            return
-        
-        equipID = curEquip.GetItemTypeID()
-        userData = curEquip.GetUserData()
-        equipPlace = curEquip.GetEquipPlace()
-        suiteID = curEquip.GetSuiteID()
-        itemClassLV = ItemCommon.GetItemClassLV(curEquip)
-        #该物品锁定不执行==============================================
-        if curEquip.GetIsLocked():
-            PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
-            return
-        
-        if IsEventItem(curEquip):
-            PlayerControl.NotifyCode(curPlayer, "TaskRes")
-            return
-        
-        #物品栏背包
-        curPack = self.__PlayerItemManager.GetPack(IPY_GameWorld.rptItem)
-        
-        if packIndex < 0 or packIndex >= curPack.GetCount():
-            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
-            return
-        
-        curEquipCount = curEquip.GetCount()
-        
-        #装备为单数量物品无需遍历背包判定,以拖入的某个格子是否可以填充为判定 __CanDragItem
-        #=======================================================================
-        # if not self.CanPutInItem(IPY_GameWorld.rptItem, equipID, curEquipCount, curEquip.GetIsBind()):
-        #    #GameWorld.Log("玩家背包无法放入这个物品")
-        #    return
-        #=======================================================================
-        
-        #设置物品激活状态为False
-        #curEquip.SetIsSoulActive(False)
-#        if curEquip.GetItemStarLV() != 0:
-#            curEquip.SetItemStarLV(0) # 脱下的物品星级设置为0
-        
-        befIsOrangeEquip = 1 if curEquip.GetItemColor() >= ChConfig.Def_Quality_Orange else 0
-        aftIsOrangeEquip = 0
-        
-        #背包物品放入仓库
-        if not DragItem(curPlayer, IPY_GameWorld.rptEquip, equipIndex, IPY_GameWorld.rptItem, packIndex, curEquipCount):
-            return
-        self.RefreshStartEquipCount()
-        self.__UpdEquipOrangeCount(befIsOrangeEquip, aftIsOrangeEquip)
-        
-        # 广播卸装
-        if equipIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
-            curPlayer.Sync_UnEquipItem(equipID, equipIndex)
-        if suiteID and itemClassLV == ChEquip.GetEquipFacadeClassLV(curPlayer):
-            #脱当前外观阶的套装
-            ChEquip.ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)
-            
-        dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData}
-        DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
-#===============================================================================
-#        #destItemPlace = 卸下物品的位置        
-#        destItemPlace = curPack.GetAt(packIndex)
-#        
-#        if destItemPlace == None or destItemPlace.IsEmpty() == 0:
-#            #卸下目标不是空的
-#            GameWorld.Log("卸下目标不是空的")
-#            return
-#        
-#        destItemPlace.PutIn(curEquip)
-#===============================================================================
-        return equipID, equipPlace, itemClassLV
     
     #是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID,  物品是否绑定)
 #===============================================================================
@@ -1330,10 +1129,6 @@
                     itemNoteDict = ItemCommon.GetItemNoteDict(item, canPutinCount, packItemCount, canPutinCount)
                     ItemCommon.DR_GetItem(curPlayer, packIndex, eventName, itemNoteDict, addDict)
             else:
-                #可以放下
-                if isEquip:
-                    self.CheckEquipAttr(packIndex, tagItem)
-                    
                 if tagItem.GetGameWorldItemType() == IPY_GameWorld.gwitRoleItem:
                     item.PutIn(tagItem)
                 elif tagItem.GetGameWorldItemType() == IPY_GameWorld.gwitSingleItem:
@@ -1354,27 +1149,6 @@
         #放入东西
         return putResult
     
-    def CheckEquipAttr(self, packType, curItem):
-        legendAttrIDCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
-        legendAttrValueCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-        
-        if legendAttrIDCount and legendAttrValueCount and legendAttrIDCount == legendAttrValueCount:
-            return
-        
-        curPlayer = self.__Player
-        legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
-        if not legendAttrInfo:
-            return
-        
-        curPlayer = self.__Player
-        srcScore = ItemCommon.GetEquipGearScore(curItem)
-        SetEquipLegendAttr(curItem, legendAttrInfo)
-        ItemCommon.MakeEquipGS(curItem)
-        updScore = ItemCommon.GetEquipGearScore(curItem)
-        GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,srcScore=%s,updScore=%s" 
-                         % (packType, curItem.GetItemTypeID(), srcScore, updScore), curPlayer.GetPlayerID())
-        return
-
     ## 是否能放入物品 
     #  @param packIndex 背包索引
     #  @param curItemID 当前物品ID
@@ -1696,10 +1470,10 @@
    
 ## 背包整理
 def ResetItem(curPlayer, packIndex, beingIndex, endIndex, tick):
-
+    # 卡牌约定后端不整理背包,由前端自行排序
     #开始整理
-    __DoResetItem(curPlayer, packIndex, beingIndex, endIndex, tick)
-    curPlayer.Notify_PackResetOK()
+    #__DoResetItem(curPlayer, packIndex, beingIndex, endIndex, tick)
+    #curPlayer.Notify_PackResetOK()
     return
 
 
@@ -2004,18 +1778,18 @@
     posNum1, posNum2 = 0, 0
     for lpIndex in range(item1.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
         lineupValue = item1.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
-        lineupID = lineupValue / 10000
+        lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
         if lineupID != ShareDefine.Lineup_Main:
             continue
-        posNum1 = lineupValue % 100
+        posNum1 = posNum
         break
         
     for lpIndex in range(item2.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
         lineupValue = item2.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
-        lineupID = lineupValue / 10000
+        lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
         if lineupID != ShareDefine.Lineup_Main:
             continue
-        posNum2 = lineupValue % 100
+        posNum2 = posNum
         break
     
     if (posNum1 and posNum2) or (not posNum1 and not posNum2):
@@ -2235,35 +2009,6 @@
         
     return
 
-## 清除背包中的任务物品
-#  @param curPlayer 当前玩家
-#  @param packIndex 背包类型
-#  @return None
-#  @remarks 函数详细说明.
-def ClearPackEventItem(curPlayer , packIndex):
-    curPack = curPlayer.GetItemManager().GetPack(packIndex)
-    itemList = []
-    
-    for i in range(0, curPack.GetCount()):
-        item = curPack.GetAt(i)
-        #空物品
-        if not item or item.IsEmpty():
-            continue
-        
-        #不是任务物品
-        if not IsEventItem(item):
-            continue
-        
-        itemList.append(item)
-    
-    curPlayerID = curPlayer.GetID()
-    
-    for item in itemList:
-        GameWorld.Log('###清空背包 = %s 中的任务物品 = %s' % (packIndex , item.GetItemTypeID()) , curPlayerID)
-        item.Clear()
-        
-    return
-
 def CheckGiveBindMoneyTypeItem(curPlayer, checkMoneyType=None):
     ## 检查给绑定货币的展示物品
     bindMoneyItemInfo = IpyGameDataPY.GetFuncEvalCfg("PutInItemPack", 2, {})
@@ -2424,40 +2169,6 @@
     if isAuctionItem:
         curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
         return
-    
-    if not curPlayer:
-        return
-    
-    if ItemCommon.GetIsEquip(curItem):
-        legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
-        legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-        if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
-            legendAttrInfo = GetEquipLegendAttrGroup(curItem)
-            #GameWorld.DebugLog("已经有传奇属性的拍品: %s" % str(legendAttrInfo))
-        else:
-            # 生成传奇属性
-            legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
-            #GameWorld.DebugLog("重新生成传奇属性的拍品: %s" % str(legendAttrInfo))
-            if not legendAttrInfo:
-                return
-            
-        updateDict = {}
-        if legendAttrInfo[0]:
-            updateDict[ShareDefine.Def_IudetLegendAttrID] = legendAttrInfo[0]
-            updateDict[ShareDefine.Def_IudetLegendAttrValue] = legendAttrInfo[1]
-        if legendAttrInfo[2]:
-            updateDict[ShareDefine.Def_IudetLegendAttrIDShen] = legendAttrInfo[2]
-            updateDict[ShareDefine.Def_IudetLegendAttrValueShen] = legendAttrInfo[3]
-        if legendAttrInfo[4]:
-            updateDict[ShareDefine.Def_IudetLegendAttrIDXian] = legendAttrInfo[4]
-            updateDict[ShareDefine.Def_IudetLegendAttrValueXian] = legendAttrInfo[5]
-        if legendAttrInfo[6]:
-            updateDict[ShareDefine.Def_IudetLegendAttrIDJi] = legendAttrInfo[6]
-            updateDict[ShareDefine.Def_IudetLegendAttrValueJi] = legendAttrInfo[7]
-            
-        delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
-        ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
-        
     return
 
 def GetItemCountByID(curPlayer, itemID):
@@ -2518,45 +2229,6 @@
             return True
     return False
 
-## 双手武器,需要两只手才拿得动
-#  @param curEquip
-#  @return bool
-def IsTwoHandedWeapon(curEquip):
-    return curEquip.IsBothHands() == ShareDefine.Def_Weapon_Two_Handed
-
-
-## 双持武器,左右手都可以拿得起来的武器
-#  @param curEquip
-#  @return bool
-def IsDualWeapons(curEquip):
-    return curEquip.IsBothHands() == ShareDefine.Def_Weapon_Dual_Hands
-
-
-## 装备多位置装备处理
-#  @param equipPack 当前装备背包
-#  @param packEquipIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
-#  @param placeList 可装备的位置列表
-#  @return 装备位置
-def GetMultiPlaceEquipPlace(equipPack, packEquipIndex, placeList):
-            
-    #---客户端指定位置---
-    if packEquipIndex in placeList:
-        return packEquipIndex
-    
-    #---服务端判断空位置---
-    for placeIndex in placeList:
-        curEquip = equipPack.GetAt(placeIndex)
-        
-        if curEquip.IsEmpty():
-            return placeIndex
-        
-        elif IsTwoHandedWeapon(curEquip):
-            #武器特殊处理,双手直接交换
-            return placeIndex
-        
-    #---无空位置,替换---
-    return placeList[0]
-
 def GetOutPutItemObj(itemID, itemCount=1, isAuctionItem=False, expireTime=0, curPlayer=None, setAttrDict=None):
     ''' 获取功能产出的物品实例
     @param isAuctionItem: 是否拍品,默认非拍品
@@ -2569,198 +2241,6 @@
         GameWorld.ErrLog("产出物品异常,无法创建物品 = %s" % (itemID))
         return
     return curItem
-
-def GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr=False):
-    '''获取生成到装备上的传奇属性
-    @return: None 或者  [传奇属性效果ID列表], [属性值列表], [神ID], [神值], [仙ID], [仙值], [极ID], [极值]
-    '''
-#    if GetIsAuctionItem(curItem):
-#        #GameWorld.DebugLog("拍品无法生成传奇属性!")
-#        return
-    itemID = curItem.GetItemTypeID()
-    itemType = curItem.GetType()
-    itemColor = curItem.GetItemColor()
-    itemQuality = curItem.GetItemQuality()
-    isSuit = 1 if curItem.GetSuiteID() else 0
-    
-    ipyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipShenAttr", itemID)
-    if ipyData:
-        return ipyData.GetLegendAttrIDList(), ipyData.GetLegendAttrValueList(), \
-                ipyData.GetShenAttrIDList(), ipyData.GetShenAttrValueList(), \
-                ipyData.GetXianAttrIDList(), ipyData.GetXianAttrValueList(), \
-                ipyData.GetJiAttrIDList(), ipyData.GetJiAttrValueList()
-                
-    # 1. 定条数
-    attrCountIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipLegendAttrCount", itemType, itemColor, isSuit, itemQuality)
-    if not attrCountIpyData:
-        if itemColor >= ChConfig.Def_Quality_Purple:
-            GameWorld.DebugLog("该装备没有传奇属性: itemID=%s" % (itemID))
-        return
-    legendAttrCountInfoList = attrCountIpyData.GetLegendAttrCountInfo() # 传奇属性条数信息 [[条数, [属性类型库编号, ...]], ...]
-    if not legendAttrCountInfoList:
-        return
-    
-    if curPlayer:
-        playerID, playerLV = curPlayer.GetPlayerID(), curPlayer.GetLV()
-    else:
-        playerID = 0
-        playerLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
-        GameWorld.Log("生成装备传奇属性时没有玩家等级, 取当前世界等级! itemID=%s,worldLV=%s" % (itemID, playerLV))
-        
-    # 2. 定属性ID
-    attrTypeIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrType", itemType)
-    if not attrTypeIpyData:
-        return
-    legendAttrTypeLibDict = attrTypeIpyData.GetLegendAttrTypeLib() # 传奇属性类型库 {属性类型库编号:[属性ID,...], ...}
-    
-    curLegAttrIDList = []
-    curLegAttrValueList = []
-    itemClassLV = ItemCommon.GetItemClassLV(curItem)
-    if isAllAttr:
-        if curPlayer.GetGMLevel() != 90:
-            return
-        for attrIDList in legendAttrTypeLibDict.values():
-            curLegAttrIDList += attrIDList
-        #GameWorld.DebugLog("所有传奇属性: %s" % (curLegAttrIDList), playerID)
-    else:
-        #GameWorld.DebugLog("随机传奇属性: itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s" 
-        #                   % (itemID, itemType, itemClassLV, itemColor, isSuit), playerID)
-        for attrCount, libNumList in legendAttrCountInfoList:
-            attrIDList = []
-            for libNum in libNumList:
-                attrIDList.extend(legendAttrTypeLibDict.get(libNum, []))
-            for curAttrID in curLegAttrIDList:
-                if curAttrID in attrIDList:
-                    attrIDList.remove(curAttrID)
-            if len(attrIDList) < attrCount:
-                GameWorld.ErrLog("装备传奇属性ID库配置不够条数随机!itemID=%s,itemType=%s,legendAttrCountInfoList=%s,legendAttrTypeLibDict=%s" 
-                                 % (itemID, itemType, legendAttrCountInfoList, legendAttrTypeLibDict), playerID)
-                return
-            curLegAttrIDList += random.sample(attrIDList, attrCount)
-            #GameWorld.DebugLog("    随机传奇属性: attrCount=%s,libNumList=%s,attrIDList=%s,curLegAttrIDList=%s" 
-            #                   % (attrCount, libNumList, attrIDList, curLegAttrIDList), playerID)
-            
-    # 3. 定数值
-    attrValueIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrValue", itemType, itemClassLV, itemColor, isSuit, itemQuality)
-    if not attrValueIpyData:
-        GameWorld.ErrLog("传奇属性等级数值表找不到配置!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,itemQuality=%s" 
-                         % (itemID, itemType, itemClassLV, itemColor, isSuit, itemQuality), playerID)
-        return
-    
-    attrLVLibNumDict = attrValueIpyData.GetLVLegendAttrLibNumInfo() # {属性ID:{等级:库编号, ...}}
-    for attrID in curLegAttrIDList:
-        if attrID not in attrLVLibNumDict:
-            GameWorld.ErrLog("传奇属性等级数值表没有配置属性ID对应等级库编号!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,attrID=%s" 
-                             % (itemID, itemType, itemClassLV, itemColor, isSuit, attrID), playerID)
-            return
-        curLibNum = None
-        lvAttrLibList = attrLVLibNumDict[attrID]
-        for lv, libNum in lvAttrLibList:
-            if playerLV <= lv:
-                curLibNum = libNum
-                break
-        if curLibNum == None:
-            GameWorld.ErrLog("传奇属性等级数值表找不到属性ID对应等级库编号!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,attrID=%s,playerLV=%s" 
-                             % (itemID, itemType, itemClassLV, itemColor, isSuit, attrID, playerLV), playerID)
-            return
-        attrLibIpyData = attrValueIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrLib", attrID)
-        if not attrLibIpyData:
-            GameWorld.ErrLog("传奇属性库不存在传奇属性ID配置!itemID=%s,attrID=%s" % (itemID, attrID), playerID)
-            return
-        attrLibDict = attrLibIpyData.GetLegendAttrLib() # {库编号:[随机数值, ...], ...}
-        if curLibNum not in attrLibDict:
-            GameWorld.ErrLog("传奇属性库编号不存在!itemID=%s,attrID=%s,curLibNum=%s" % (itemID, attrID, curLibNum), playerID)
-            return
-        valueList = attrLibDict[curLibNum]
-        attrValue = random.choice(valueList)
-        curLegAttrValueList.append(attrValue)
-        #GameWorld.DebugLog("    随机属性: attrID=%s,attrValue=%s,playerLV=%s,curLibNum=%s,valueList=%s" 
-        #                   % (attrID, attrValue, playerLV, curLibNum, valueList), playerID)
-    return curLegAttrIDList, curLegAttrValueList, [], [], [], [], [], []
-
-def GetEquipLegendAttrAll(curItem):
-    ## 获取装备传奇属性 - 所有分组合并返回
-    legendAttrInfo = GetEquipLegendAttrGroup(curItem)
-    legAttrIDList = legendAttrInfo[0] + legendAttrInfo[2] + legendAttrInfo[4] + legendAttrInfo[6]
-    legAttrValueList = legendAttrInfo[1] + legendAttrInfo[3] + legendAttrInfo[5] + legendAttrInfo[7]
-    return legAttrIDList, legAttrValueList
-
-def GetEquipLegendAttrGroup(curItem):
-    ## 获取装备传奇属性 - 按类型分组返回
-    
-    legAttrIDList, legAttrValueList = [], []
-    legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
-    legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-    if legendAttrIDCnt == legendAttrValueCnt:
-        for i in xrange(legendAttrIDCnt):
-            legAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i))
-            legAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i))
-            
-    shenAttrIDList, shenAttrValueList = [], []
-    shenAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDShen)
-    shenAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueShen)
-    if shenAttrIDCnt == shenAttrValueCnt:
-        for i in xrange(shenAttrIDCnt):
-            shenAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDShen, i))
-            shenAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueShen, i))
-            
-    xianAttrIDList, xianAttrValueList = [], []
-    xianAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDXian)
-    xianAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueXian)
-    if xianAttrIDCnt == xianAttrValueCnt:
-        for i in xrange(xianAttrIDCnt):
-            xianAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDXian, i))
-            xianAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueXian, i))
-            
-    jiAttrIDList, jiAttrValueList = [], []
-    jiAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDJi)
-    jiAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueJi)
-    if jiAttrIDCnt == jiAttrValueCnt:
-        for i in xrange(jiAttrIDCnt):
-            jiAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDJi, i))
-            jiAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueJi, i))
-            
-    return legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList
-
-def SetEquipLegendAttr(curItem, legendAttrInfo):
-    ## 设置装备传奇属性
-    
-    legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, \
-        xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList = legendAttrInfo
-                       
-    # 普通传奇属性
-    if legAttrIDList and legAttrValueList and len(legAttrIDList) == len(legAttrValueList):
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
-        for i in xrange(len(legAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legAttrValueList[i])
-    
-    # 神 传奇属性
-    if shenAttrIDList and shenAttrValueList and len(shenAttrIDList) == len(shenAttrValueList):
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
-        for i in xrange(len(shenAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, shenAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, shenAttrValueList[i])
-    
-    # 仙 传奇属性
-    if xianAttrIDList and xianAttrValueList and len(xianAttrIDList) == len(xianAttrValueList):
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
-        for i in xrange(len(xianAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, xianAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, xianAttrValueList[i])
-            
-    # 极 传奇属性
-    if jiAttrIDList and jiAttrValueList and len(jiAttrIDList) == len(jiAttrValueList):
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
-        for i in xrange(len(jiAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, jiAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, jiAttrValueList[i])
-            
-    return
 
 ##创建物品所需的动态数据
 #
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 850d19e..c694aee 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
@@ -479,9 +479,9 @@
     else:
         attrProportion = placeIpyData.GetBaseAttrProportion()
         attrInfoList = [
-                        [ShareDefine.Def_Effect_Atk, colorIpyData.GetAtkStep()],
-                        [ShareDefine.Def_Effect_Def, colorIpyData.GetDefStep()],
-                        [ShareDefine.Def_Effect_MaxHP, colorIpyData.GetHPStep()],
+                        [ChConfig.AttrID_Atk, colorIpyData.GetAtkStep()],
+                        [ChConfig.AttrID_Def, colorIpyData.GetDefStep()],
+                        [ChConfig.AttrID_MaxHP, colorIpyData.GetHPStep()],
                         ]
         baseAttrIDList, baseAttrValueList = [], []
         for attrID, attrStep in attrInfoList:
@@ -550,182 +550,8 @@
     curItem.SetUserData(UserData, len(UserData))
     return
 
-def UpdateItemUserData(curItem, updateDict={}, delKeyList=[], isUpdateGS=False):
-    ''' 更新物品UserData数据
-    @param curItem: IPY_SingleItem 或  IPY_RoleItem
-    @param updateDict: 需要更新的数据 {key:value, key:valueList, ...}
-    @param delKeyList: 需要删除的数据 key列表[key, ...]
-    @param isUpdateGS: 是否更新评分
-    @note: UserData格式举例 {'17':['65','7','52'],'50':['0'],'19':['420','380','50'],'50':['1552728662']}
-    '''
-    
-    isRoleItem = False
-    if not hasattr(curItem, "SetUserData"):
-        item = curItem.GetItem()
-        isRoleItem = True
-    else:
-        item = curItem
-    userData = item.GetUserData()
-    if not userData:
-        userDataDict = {}
-    else:
-        userDataDict = eval(userData)
-        
-    for delKey in delKeyList:
-        userDataDict.pop(str(delKey), None)
-        
-    for key, value in updateDict.items():
-        if type(value) == int:
-            valueList = ['%s' % value]
-        elif type(value) == list:
-            valueList = ['%s' % v for v in value]
-        else:
-            continue
-        userDataDict['%s' % key] = valueList
-        
-    SetItemUserData(item, userDataDict)
-    if isUpdateGS:
-        MakeEquipGS(curItem)
-    elif isRoleItem:
-        curItem.SetCount(curItem.GetCount()) # 为了触发物品同步
-    return
-
 def MakeEquipGS(curItem):
-    if not CheckNoteEquipGS(curItem):
-        #GameWorld.DebugLog("不设置装备评分")
-        return
-    value = CalcEquipGS(curItem)
-    #GameWorld.DebugLog("设置装备评分: ItemID=%s,attrDict=%s,value=%s" % (curItem.GetItemTypeID(), attrDict, value))
-    SetEquipGearScore(curItem, value)
     return
-
-def CalcEquipGS(curItem):
-    '''计算装备评分
-        评分组成:装备基础 + 传奇属性
-    '''
-    if not CheckNoteEquipGS(curItem):
-        #GameWorld.DebugLog("不设置装备评分")
-        return 0
-    
-    attrDict = {}
-    #基础属性效果
-    for i in xrange(curItem.GetEffectCount()):
-        curEffect = curItem.GetEffectByIndex(i)
-        if not curEffect:
-            break
-        effectID = curEffect.GetEffectID()
-        if effectID == 0:
-            break
-        attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
-        
-    gsValueEx = 0
-    skillGSDict = IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)
-    itemSkillIDList = GetItemSkillIDList(curItem)
-    for addSkillID in itemSkillIDList:
-        gsValueEx += skillGSDict.get(str(addSkillID), 0)
-        
-    itemID = curItem.GetItemTypeID()
-    classLV = GetItemClassLV(curItem)
-    color = curItem.GetItemColor()
-    itemQuality = curItem.GetItemQuality()
-    isSuit = 1 if curItem.GetSuiteID() > 0 else 0
-    gsParamIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipGSParam", classLV, color, isSuit, itemQuality)
-    # 传奇属性
-    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curItem)
-    for i, legendAttrID in enumerate(legAttrIDList):
-        legendAttrValue = legAttrValueList[i]
-        attrDict[legendAttrID] = attrDict.get(legendAttrID, 0) + legendAttrValue
-        
-    lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
-    if lingQiIpyData:
-        gsValueEx += lingQiIpyData.GetLingQiAttrScore()
-        
-    Atk = attrDict.get(ShareDefine.Def_Effect_Atk, 0)
-    MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
-    MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
-    MaxHP = attrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
-    Def = attrDict.get(ShareDefine.Def_Effect_Def, 0)
-    ArmorDefPer = 0
-    IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
-    IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
-    FabaoHurt = attrDict.get(ShareDefine.Def_Effect_FabaoHurt, 0)
-    AtkBackHP = attrDict.get(ShareDefine.Def_Effect_AtkBackHP, 0)
-    
-    FinalHurt = attrDict.get(ShareDefine.Def_Effect_FinalHurt, 0)
-    FinalHurtReduce = attrDict.get(ShareDefine.Def_Effect_FinalHurtReduce, 0)
-    
-    BaseEquipMaxHPAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipMaxHPAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipMaxHPAddPerC())
-    BaseEquipAtkAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipAtkAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipAtkAddPerC())
-    AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
-    DamagePer = 0#attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
-    SuperHitRate = attrDict.get(ShareDefine.Def_Effect_SuperHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateC())
-    SuperHit = attrDict.get(ShareDefine.Def_Effect_SuperHit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitC())
-    SuperHitPer = attrDict.get(ShareDefine.Def_Effect_SuperHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitPerC())
-    DamReducePer = 0#attrDict.get(ShareDefine.Def_Effect_DamReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamReducePerC())
-    MaxHPPer = attrDict.get(ShareDefine.Def_Effect_MaxHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMaxHPPerC())
-    DefPer = 0#attrDict.get(ShareDefine.Def_Effect_DefPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDefPerC())
-    LuckyHitRate = attrDict.get(ShareDefine.Def_Effect_LuckyHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateC())
-    LuckyHitRateReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateReduceC())
-    LuckyHitPer = attrDict.get(ShareDefine.Def_Effect_LuckyHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitPerC())
-    LuckyHit = attrDict.get(ShareDefine.Def_Effect_LuckyHit, 0)
-    LuckyHitReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitReduce, 0)
-    LuckPer = attrDict.get(ShareDefine.Def_Effect_LuckPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckPerC())
-    PetDamPer = attrDict.get(ShareDefine.Def_Effect_PetDamPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPetDamPerC())
-    PerLVAtk = attrDict.get(ShareDefine.Def_Effect_PerLVAtk, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVAtkC())
-    MissRate = 0#attrDict.get(ShareDefine.Def_Effect_MissRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissRateC())
-    HitRate = 0#attrDict.get(ShareDefine.Def_Effect_HitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitRateC())
-    DamBackPer = 0#attrDict.get(ShareDefine.Def_Effect_DamBackPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamBackPerC())
-    PerLVMaxHP = attrDict.get(ShareDefine.Def_Effect_PerLVMaxHP, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVMaxHPC())
-    DropEquipPer = attrDict.get(ShareDefine.Def_Effect_DropEquipPer, 0)# * (1 if not gsParamIpyData else gsParamIpyData.GetDropEquipPerC())
-    DropMoneyPer = attrDict.get(ShareDefine.Def_Effect_DropMoneyPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropMoneyPerC())
-    IgnoreDefRateReduce = 0#attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
-    DamChanceDef = 0#attrDict.get(ShareDefine.Def_Effect_DamChanceDef, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamChanceDefC())
-    SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
-    SuperHitRateReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateReduceC())
-    SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
-    SpeedPer = 0#attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
-    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())
-    SkillAddPerA = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
-    SkillAddPerB = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
-    SkillAddPerC = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
-    SkillAddPerD = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
-    SkillAddPerE = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
-    SkillAddPerF = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
-    SkillAddPerG = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
-    SkillReducePerA = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
-    SkillReducePerB = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
-    SkillReducePerC = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
-    SkillReducePerD = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
-    SkillReducePerE = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
-    SkillReducePerF = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
-    SkillReducePerG = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
-    
-    ReduceSkillCDPer = attrDict.get(ShareDefine.Def_Effect_ReduceSkillCDPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetReduceSkillCDPerC())
-    
-    FaintDefRate = attrDict.get(ShareDefine.Def_Effect_FaintDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFaintDefRateC())
-    
-    IgnoreDefRate = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateC())
-    IgnoreDefRateReduce = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
-    ProDefPer = attrDict.get(ShareDefine.Def_Effect_ProDefHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetProDefPerC())
-    FinalHurtPerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtPerC())
-    FinalHurtReducePerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtReducePerC())
-    
-    # 攻速不默认乘,仅作为参数提供策划使用
-    AtkSpeed = 0#attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
-    AtkSpeedC = 1#1 if not gsParamIpyData else gsParamIpyData.GetAtkSpeedC()
-    
-    OnlyFinalHurt = attrDict.get(ShareDefine.Def_Effect_OnlyFinalHurt, 0)
-    PVPAtkBackHP = attrDict.get(ShareDefine.Def_Effect_PVPAtkBackHP, 0)  
-    
-    if GetIsDogzEquip(curItem):
-        # 神兽装备用不同公式
-        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
-    else:
-        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
-    value += gsValueEx
-    return value
 
 #---------------------------------------------------------------------
 ## 通过效果ID,检查是否为指定物品 
@@ -1293,13 +1119,7 @@
     return True
 
 def CheckNoteEquipGS(curItem):
-    if not CheckItemCanUse(curItem):
-        return False
-    
-    if curItem.GetType() not in IpyGameDataPY.GetFuncEvalCfg("EquipGSTypeForSort", 1):
-        return False
-    
-    return True
+    return False
 
 #---------------------------------------------------------------------
 ## 通过背包查找指定效果ID的指定数量物品
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
index e94c51f..829e069 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
@@ -49,7 +49,7 @@
         confLV = curEff.GetEffectValue(1) #等级限制当=0为不限制等级
         reLV = min(confLV, curLV) if confLV else curLV
         
-        lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)
+        lvIpyData = None #PlayerControl.GetPlayerLVIpyData(reLV)
         if not lvIpyData:
             return
         giveExp = int(lvIpyData.GetReExp() * expPer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 017176d..8b29dc8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -232,7 +232,7 @@
     if "LV" in npcFBAttrDict:
         strengthenLV = npcFBAttrDict["LV"]
         
-    attrDict = GetNPCStrengthenAttrDict(npcID, strengthenLV, strengthenPlayerCnt, strengthenIpyData)
+    attrDict = {} #GetNPCStrengthenAttrDict(npcID, strengthenLV, strengthenPlayerCnt, strengthenIpyData)
     attrDict.update(npcFBAttrDict) # 如果副本有指定属性,则以副本为主
     if not attrDict:
         return
@@ -320,130 +320,6 @@
     for skillID in skillIDList:
         skillManager.LearnSkillByID(skillID)
     return
-
-def GetNPCStrengthenAttrDict(npcID, strengthenLV=0, strengthenPlayerCnt=0, strengthenIpyData=None):
-    if not strengthenLV and not strengthenPlayerCnt:
-        return {}
-    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
-    if not npcData:
-        return {}
-    
-    attrStrengthenInfo = ReadChConfig.GetEvalChConfig("NPCAttrStrengthen")
-    if not attrStrengthenInfo:
-        return {}
-    
-    attrDict = {}
-    paramDict = attrStrengthenInfo[NPCAttr_ParamDict] # 过程参数公式字典
-    attrStrengthenDict = attrStrengthenInfo[NPCAttr_AttrStrengthenList] # 属性成长公式字典
-    playerCntCoefficient = attrStrengthenInfo[NPCAttr_PlayerCntCoefficient] # 人数系数
-    npcIDPlayerCntCoefficient = attrStrengthenInfo[NPCAttr_NPCPlayerCntCoefficient] # 特殊NPC人数系数
-    baseMaxHP = GameObj.GetHP(npcData) # NPCData 没有提供Max接口,对应使用GetHP
-    
-    if strengthenLV:
-        if not strengthenIpyData:
-            strengthenIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCStrengthen", npcID)
-        if not strengthenIpyData:
-            return {}
-        
-        playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(strengthenLV) # 取增强怪物等级对应此等级的玩家参考属性值
-        if not playerCurLVIpyData:
-            return {}
-        
-        # NPC表可用参数
-        SkillAtkRate = GetSkillAtkRate(npcData) # 技能伤害
-        FinalHurt = GetFinalHurt(npcData)
-        
-        # 参考玩家属性参数
-        ReMaxHP = playerCurLVIpyData.GetReMaxHP() # 最大生命值
-        ReAtk = playerCurLVIpyData.GetReAtk() # 攻击(最小、最大攻击)
-        ReDef = playerCurLVIpyData.GetReDef() # 防御
-        ReHit = playerCurLVIpyData.GetReHit() # 命中
-        ReMiss = playerCurLVIpyData.GetReMiss() # 闪避
-        ReAtkSpeed = playerCurLVIpyData.GetReAtkSpeed() # 攻击速度
-        ReSkillAtkRate = playerCurLVIpyData.GetReSkillAtkRate() # 技能伤害比例
-        ReDamagePer = playerCurLVIpyData.GetReDamagePer() # 增加伤害
-        ReDamReduce = playerCurLVIpyData.GetReDamReduce() # 减少伤害
-        ReIgnoreDefRate = playerCurLVIpyData.GetReIgnoreDefRate() # 无视防御比例
-        ReLuckyHitRate = playerCurLVIpyData.GetReLuckyHitRate() # 会心一击率
-        ReLuckyHit = playerCurLVIpyData.GetReLuckyHit() # 会心一击伤害
-        ReBleedDamage = playerCurLVIpyData.GetReBleedDamage() # 流血伤害增加
-        ReIceAtk = playerCurLVIpyData.GetReIceAtk() # 真实伤害
-        ReIceDef = playerCurLVIpyData.GetReIceDef() # 真实抵御
-        RePetAtk = playerCurLVIpyData.GetRePetAtk() # 灵宠攻击
-        RePetSkillAtkRate = playerCurLVIpyData.GetRePetSkillAtkRate() # 灵宠技能
-        RePetDamPer = playerCurLVIpyData.GetRePetDamPer() # 灵宠伤害增加
-        ReFinalHurt = playerCurLVIpyData.GetReFinalHurt() # 固定伤害增加
-        ReFinalHurtReduce = playerCurLVIpyData.GetReFinalHurtReduce() # 固定伤害减少
-        RePotionReply = playerCurLVIpyData.GetRePotionReply() # 血瓶恢复量
-        RePotionCD = playerCurLVIpyData.GetRePotionCD() # 血瓶CD
-        ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
-        
-        # 增加NPC属性参数
-        HitTime = strengthenIpyData.GetHitTime() # 怪物受击次数
-        DefCoefficient = strengthenIpyData.GetDefCoefficient() # 人物防御系数
-        AtkCoefficient = strengthenIpyData.GetAtkCoefficient() # 人物攻击系数
-        AdjustCoefficient = strengthenIpyData.GetAdjustCoefficient() # 调整系数比例
-        AtkInterval = strengthenIpyData.GetAtkInterval() # 怪物攻击间隔
-        HitRate = strengthenIpyData.GetHitRate() # 对人物的命中率
-        MissRate = strengthenIpyData.GetMissRate() # 对人物的闪避率
-        MonterNum = strengthenIpyData.GetMonterNum() # 怪物数
-        IceAtkCoefficient = strengthenIpyData.GetIceAtkCoefficient() # 元素攻击比例
-        IceDefCoefficient = strengthenIpyData.GetIceDefCoefficient() # 元素抗性比例
-        MaxEnduranceTime = strengthenIpyData.GetMaxEnduranceTime() # 玩家最大承受伤害时间
-        FightPowerCoefficient = strengthenIpyData.GetFightPowerCoefficient() # 压制战斗力系数
-        
-        # 过程参数
-        AtkReplyCoefficient = eval(FormulaControl.GetCompileFormula("NPCParam_AtkReplyCoefficient",
-                                                                    paramDict["AtkReplyCoefficient"])) # 怪物攻击回复调整值
-        MonterHurt = eval(FormulaControl.GetCompileFormula("NPCParam_MonterHurt", paramDict["MonterHurt"])) # 怪物固定伤害
-        LostHPPerSecond = eval(FormulaControl.GetCompileFormula("NPCParam_LostHPPerSecond", paramDict["LostHPPerSecond"])) # 玩家每秒掉血量
-        LVStrengthenMark = strengthenIpyData.GetLVStrengthenMark()
-        attrStrengthenList = attrStrengthenDict.get(LVStrengthenMark, [])
-        for attrKey, strengthenFormat in attrStrengthenList:
-            strengthenValue = int(eval(FormulaControl.GetCompileFormula("NPCStrengthen_%s_%s" % (attrKey,LVStrengthenMark), strengthenFormat)))
-            #GameWorld.DebugLog("    %s=%s" % (attrKey, strengthenValue))
-            locals()[attrKey] = strengthenValue # 创建该属性局部变量作为参数提供给后面属性计算时用
-            attrDict[attrKey] = strengthenValue
-            
-        # 当战力系数为0时,NPC战力默认为NPC表压制战力
-        if FightPowerCoefficient:
-            attrDict["FightPower"] = int(ReFightPower * FightPowerCoefficient / 10000.0)
-            
-    if strengthenPlayerCnt:
-        mapID = GameWorld.GetMap().GetMapID()
-        dataMapID = FBCommon.GetRecordMapID(mapID)
-        formulaKey = "MapCoefficient_%s" % mapID
-        playerCntAttrCoefficient = playerCntCoefficient.get(mapID, {})
-        if not playerCntAttrCoefficient and dataMapID in playerCntCoefficient:
-            playerCntAttrCoefficient = playerCntCoefficient[dataMapID]
-            formulaKey = "MapCoefficient_%s" % dataMapID
-        if npcID in npcIDPlayerCntCoefficient:
-            playerCntAttrCoefficient = npcIDPlayerCntCoefficient[npcID]
-            formulaKey = "NPCCoefficient_%s" % npcID
-        for attrKey, coefficientDict in playerCntAttrCoefficient.items():
-            if attrKey in attrDict:
-                attrValue = attrDict[attrKey]
-            elif attrKey == "MaxHP":
-                attrValue = baseMaxHP
-            else:
-                attrFuncName = "Get%s" % attrKey
-                if not hasattr(npcData, attrFuncName):
-                    continue
-                attrValue = getattr(npcData, attrFuncName)()
-            # 按字典配置
-            if isinstance(coefficientDict, dict):
-                coefficient = GameWorld.GetDictValueByRangeKey(coefficientDict, strengthenPlayerCnt, 1)
-            # 按公式配置
-            elif isinstance(coefficientDict, str):
-                formulaKey = "%s_%s" % (formulaKey, attrKey)
-                coefficient = eval(FormulaControl.GetCompileFormula(formulaKey, coefficientDict))
-            else:
-                coefficient = 1
-            attrDict[attrKey] = int(attrValue * coefficient)
-            
-    #GameWorld.DebugLog("计算NPC属性成长: npcID=%s,strengthenLV=%s,strengthenPlayerCnt=%s,baseMaxHP=%s,attrDict=%s" 
-    #                   % (npcID, strengthenLV, strengthenPlayerCnt, baseMaxHP, attrDict))
-    return attrDict
 
 def GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, exp_rate=None, mailTypeKey=None, isMail=False, 
                          extraItemList=[], prizeMultiple=1, dropItemMapInfo=[], curGrade=0, isVirtualDrop=False):
@@ -1836,8 +1712,8 @@
             addAngry += useSkill.GetSkillAngry()
             
         # 玩家攻击增加额外仇恨
-        if objDetel.GetGameObjType() == IPY_GameWorld.gotPlayer:
-            addAngry += PlayerControl.GetAddAngry(objDetel)
+        #if objDetel.GetGameObjType() == IPY_GameWorld.gotPlayer:
+        #    addAngry += PlayerControl.GetAddAngry(objDetel)
                     
         self.AddObjToAngryList(objDetel, addAngry)
         return
@@ -2726,19 +2602,6 @@
         curNPC.SetMaxAtk(heroAttrDict.get(ShareDefine.Def_Effect_Atk, 1))
         curNPC.SetDef(heroAttrDict.get(ShareDefine.Def_Effect_Def, 1))
         GameObj.SetMaxHP(curNPC, heroAttrDict.get(ShareDefine.Def_Effect_MaxHP, 1))
-        
-        #GameObj.SetMissRate(curNPC, npcDataEx.GetMissRate())
-        #GameObj.SetMissDefRate(curNPC, npcDataEx.GetMissDefRate())
-        #GameObj.SetSuperHitRate(curNPC, npcDataEx.GetSuperHitRate())
-        #GameObj.SetSuperHitRateReduce(curNPC, npcDataEx.GetSuperHitRateReduce())
-        #GameObj.SetFaintRate(curNPC, npcDataEx.GetFaintRate())
-        #GameObj.SetFaintDefRate(curNPC, npcDataEx.GetFaintDefRate())
-        #GameObj.SetComboRate(curNPC, npcDataEx.GetComboRate())
-        #GameObj.SetComboDefRate(curNPC, npcDataEx.GetComboDefRate())
-        #GameObj.SetAtkBackRate(curNPC, npcDataEx.GetAtkBackRate())
-        #GameObj.SetAtkBackDefRate(curNPC, npcDataEx.GetAtkBackDefRate())
-        #GameObj.SetSuckHPPer(curNPC, npcDataEx.GetSuckHPPer())
-        #GameObj.SetSuckHPDefPer(curNPC, npcDataEx.GetSuckHPDefPer())
         return
     
     ## 刷新NPC属性
@@ -3232,7 +3095,7 @@
         PlayerVip.DoAddVIPKillLVExp(lastHurtPlayer, GetNPCLV(curNPC))
         
         # SP值
-        PlayerControl.AddZhenQiByKillNPC(lastHurtPlayer, curNPC.GetSP())
+        #PlayerControl.AddZhenQiByKillNPC(lastHurtPlayer, curNPC.GetSP())
         return
     
     #---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 9c84d58..c82f489 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -38,7 +38,6 @@
 import PlayerGameWallow
 import NetPackCommon
 import ChPyNetSendPack
-import Operate_PlayerBuyZhenQi
 import DataRecordPack
 import PlayerBillboard
 import UpdatePlayerName
@@ -51,7 +50,6 @@
 import PlayerFamily
 import PlayerLoginDayAward
 import PlayerGodWeapon
-import PlayerWorldAverageLv
 import PlayerGoldInvest
 import PlayerActivity
 import FBCommon
@@ -62,7 +60,6 @@
 import PlayerDienstgrad
 import PlayerFreeGoods
 import PlayerRecover
-import GameLogic_IceLode
 import GameLogic_SkyTower
 import PlayerEquipDecompose
 import PlayerGreatMaster
@@ -200,6 +197,7 @@
 #@return 返回值无意义
 #@remarks 玩家登陆游戏初始化
 def InitLoginPlayer(curPlayer, tick):
+    PlayerOnline.OnPlayerLogin(curPlayer)
     #初始化玩家的时钟个数
     if curPlayer.GetTickTypeCount() == 0:
         curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
@@ -509,7 +507,6 @@
         if PlayerControl.GetCrossMapID(curPlayer):
             PlayerControl.SetCrossMapID(curPlayer, 0)
         
-    PlayerOnline.OnPlayerLogin(curPlayer)
     TurnAttack.OnPlayerLogin(curPlayer)
     SyncGuideState(curPlayer)
     
@@ -531,9 +528,6 @@
     
     #通知玩家的buff
     __Sync_ClientBuff(curPlayer)
-    
-    #初始化现实时间物品
-    InitRealityTimeItem(curPlayer, tick)
     
     #---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
     DoPlayerLoginInMap(curPlayer, tick)
@@ -563,9 +557,6 @@
     
     #PK模式
     SyncPKModel(curPlayer)
-        
-    #装备相关信息
-    ChEquip.OnPlayerEquipLoginLogic(curPlayer)
     
     #大师
     PlayerGreatMaster.MasterOnLogin(curPlayer)
@@ -580,9 +571,6 @@
     PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
     PlayerPet.OnPlayerPetLogin(curPlayer)
     
-    #清空玩家万能背包中的任务物品
-    ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
-    
     #PlayerLoginNotify(curPlayer, tick)
     
     #防沉迷计算下线累积时间
@@ -595,9 +583,6 @@
     # 首充/天天首充/充值豪礼
     PlayerGoldGift.OnLogin(curPlayer)
     
-    #通知购买功能中各购买类型的已购买和可购买次数
-    Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
-#    
 #    #通知功能首次触发情况
     GameFuncComm.Sync_FuncOpenState(curPlayer)
 #    
@@ -646,9 +631,6 @@
     
     # 副本进入时间
     FBCommon.FBOnLogin(curPlayer)
-    
-    #世界等级
-    PlayerWorldAverageLv.OnLogin(curPlayer)
     
     # 投资理财
     PlayerGoldInvest.OnLogin(curPlayer)
@@ -928,19 +910,19 @@
     
     #---补满血满魔---
     GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
-    curPlayer.SetMP(curPlayer.GetMaxMP())
+    #curPlayer.SetMP(curPlayer.GetMaxMP())
     
     #默认触发一次功能开启
     if curPlayer.GetLV() == 1:
         GameFuncComm.DoFuncOpenLogic(curPlayer)
         
     #初始化组队状态
-    autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
-    autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
-    PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
+    #autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
+    #autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
+    #PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
     
     #玩家默认恶名值
-    curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
+    #curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
     
     #curPlayer.SetDict("ThunderLogin", 1)
     #记录第一次登陆
@@ -951,6 +933,8 @@
     for mailTypeKey, mailItemList in mailList:
         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
         
+    PlayerHero.OnPlayerFirstLogin(curPlayer)
+    
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
     return
 
@@ -1097,18 +1081,6 @@
         rolePack = itemManager.GetPack(packIndex)
         rolePack.Sync_Refresh()
         
-        # 刷下装备评分,仓库可以暂不处理,取出装备后登录触发刷新
-        for i in xrange(rolePack.GetCount()):
-            curItem = rolePack.GetAt(i)
-            if curItem.IsEmpty():
-                continue
-            newScore = ItemCommon.CalcEquipGS(curItem)
-            hisScore = ItemCommon.GetEquipGearScore(curItem)
-            if hisScore != newScore:
-                ItemCommon.SetEquipGearScore(curItem, newScore)
-                GameWorld.Log("登录更新装备评分: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s" 
-                              % (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID())
-                
     for packIndex in ChConfig.Def_VPackCnt_Dict.keys():
         ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex)
         
@@ -1139,16 +1111,6 @@
 #    #itemManager.GetPack(IPY_GameWorld.rptBreakPrepare).Sync_Refresh()
 #    #itemManager.GetPack(IPY_GameWorld.rptBreakItem).Sync_Refresh()
 #===============================================================================
-    return
-
-#---------------------------------------------------------------------
-##初始化现实时间物品
-#@param curPlayer 玩家实例
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks 初始化现实时间物品
-def InitRealityTimeItem(curPlayer, tick):
-    PlayerState.ProcessTimeEquip(curPlayer, tick)
     return
 
 #---------------------------------------------------------------------
@@ -1291,9 +1253,8 @@
     if GameWorld.IsCrossServer():
         curPlayer.SetForbiddenSyncClientState(False)
         
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    #刷新所有状态
-    playerControl.ReCalcAllState()
+    olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+    olPlayer.ReCalcAllAttr()
     
     if GameWorld.IsCrossServer():
         curPlayer.SetForbiddenSyncClientState(True)
@@ -1769,7 +1730,6 @@
     
     PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
     PlayerYinji.OnLoadMap(curPlayer)
-    ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount()   # 刷新装备珍品星级
     
     #EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
     curPlayer.EndLoadMap()
@@ -1861,7 +1821,7 @@
     NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
     playerControl = PlayerControl.PlayerControl(curPlayer)
     playerControl.RefreshPlayerAttrState()
-    PlayerControl.SetLingGenMaxIndex(curPlayer)
+    #PlayerControl.SetLingGenMaxIndex(curPlayer)
     return
 
 #// B2 07 重置加点 #tagCMResetAttrPoint
@@ -2409,7 +2369,6 @@
     #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储
     #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
     #######################################################################
-    PlayerOnline.OnPlayerLogoff(curPlayer)
     #下线逻辑
     PlayerControl.PlayerLeaveServer(curPlayer, tick)
     
@@ -2448,6 +2407,9 @@
     
     #离线session
     EventReport.WriteEvent_session(curPlayer)
+    
+    #需放最后
+    PlayerOnline.OnPlayerLogoff(curPlayer)
     return
 
 #---------------------------------------------------------------------
@@ -3435,7 +3397,7 @@
     #参考经验
     rExp = PlayerControl.GetPlayerReExp(curPlayer)
     reLV = curPlayer.GetLV()                    #参考等级
-    worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #世界等级经验加成
+    worldLvExpRate = 0
     
     #经验公式
     redeemExp = int(eval(recList[1]))
@@ -3486,34 +3448,6 @@
 #  @param tick: 时间戳
 #  @return: None
 def ReceiveFamilyArrestAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    arrestID = clientData.ArrestID
-    
-    bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID)
-    if bit == None:
-        #没有这个家族悬赏任务
-        GameWorld.DebugLog("没有这个家族悬赏任务 arrestID=%s" % arrestID)
-        return
-    
-    receiveState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
-    
-    if receiveState & pow(2, bit):
-        #该任务奖励已经领取
-        GameWorld.DebugLog("该任务奖励已经领取 arrestID=%s" % arrestID)
-        return
-    
-    if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyArrestQueryState) == 1:
-        #已经在查询中, 不重复查询
-        GameWorld.DebugLog("已经在查询中, 不重复查询 arrestID=%s" % arrestID)
-        return
-    
-    sendMsg = '%s' % arrestID
-    
-    #向GameServer请求该悬赏任务是否已经完成
-    curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyArrest, 0, 'FamilyArrestAward', sendMsg, len(sendMsg))
-    
-    #设置状态查询中
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 1)
     return
 
 
@@ -3651,9 +3585,6 @@
     # 功能开启奖励
     elif rewardType == ChConfig.Def_RewardType_OpenFunc:
         GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
-    # 冰晶矿脉星级奖励
-    elif rewardType == ChConfig.Def_RewardType_IceLodeStar:
-        GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx)
     # 领取周狂欢活动奖励
     elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
         PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index befdb67..3d91259 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -78,8 +78,6 @@
                      ShareDefine.GameFuncID_Guaji:lambda curObj:PlayerGuaji.DoGuajiOpen(curObj),
                      #ShareDefine.GameFuncID_RunDaily:lambda curObj:FBCommon.DoFuncOpen_RunDaily(curObj),
                      #ShareDefine.GameFuncID_RunFamily:lambda curObj:FBCommon.DoFuncOpen_RunFamily(curObj),
-                     #ShareDefine.GameFuncID_RefineExp:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineExp(curObj),
-                     #ShareDefine.GameFuncID_RefineMoney:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineMoney(curObj),
 
                      }
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 33107f2..1699a7f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -405,9 +405,9 @@
     #SkillShell.CalcBuffer_NPCBaseEffect(rolePet)
     
     #宠物不可被攻击, 命中与攻速直接继承主人攻击属性,攻击取等级阶级加成
-    rolePet.SetMinAtk(PlayerControl.GetPetMinAtk(curPlayer))
-    rolePet.SetMaxAtk(PlayerControl.GetPetMaxAtk(curPlayer))
-    rolePet.SetSkillAtkRate(PlayerControl.GetPetSkillAtkRate(curPlayer))
+    #rolePet.SetMinAtk(PlayerControl.GetPetMinAtk(curPlayer))
+    #rolePet.SetMaxAtk(PlayerControl.GetPetMaxAtk(curPlayer))
+    #rolePet.SetSkillAtkRate(PlayerControl.GetPetSkillAtkRate(curPlayer))
     GameObj.SetPetDamPer(rolePet, GameObj.GetPetDamPer(curPlayer))
     #rolePet.SetMAtkMin(curPlayer.GetMAtkMin())
     #rolePet.SetMAtkMax(curPlayer.GetMAtkMax())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 4b9a6a4..cc3e3da 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -170,14 +170,15 @@
 
 def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
     ## 更新宠物排行榜
-    petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)
-    if not petMaxAtk:
-        return
-    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk) 
-       
-    if isUpdateTotal:
-        UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
     return
+#    petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)
+#    if not petMaxAtk:
+#        return
+#    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk) 
+#       
+#    if isUpdateTotal:
+#        UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
+#    return
 
 def UpdatePlayerLVBillboard(curPlayer, isForceUpdate=True):
     ##更新玩家等级排行榜
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 623a240..e9bb496 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -50,7 +50,6 @@
 import OpenServerCampaign
 import PlayerGodWeapon
 import PlayerExpandPackCfgMgr
-import PlayerWorldAverageLv
 import PlayerActivity
 import FBCommon
 import PassiveBuffEffMng
@@ -59,7 +58,6 @@
 import PlayerGatherTheSoul
 import PlayerSuccess
 import PlayerPet
-import PlayerGreatMaster
 import ItemControler
 import GameFuncComm
 import IpyGameDataPY
@@ -96,11 +94,11 @@
 import PlayerLove
 import PlayerGubao
 import PlayerShentong
+import PlayerOnline
 import PlayerCharm
 import PlayerTask
 import PlayerFace
 import PlayerMail
-import PlayerHero
 import ChPlayer
 import GameObj
 
@@ -1061,7 +1059,6 @@
     #清除地图玩家缓存
     PyGameData.g_playerFuncAttrDict.pop(playerID, None)
     PyGameData.g_playerEquipPartAttrDict.pop(playerID, None)
-    PyGameData.g_equipChangeClassLVInfo.pop(playerID, None)
     PyGameData.g_playerReqEnterFBEx.pop(playerID, None)
     NPCCommon.ClearPriWoodPile(curPlayer)
     #移除地图缓存的境界难度玩家ID信息
@@ -3288,16 +3285,11 @@
 # @return 返回值, 参考经验
 # @remarks 获得当前玩家的参考经验
 def GetPlayerReExp(curPlayer):
-    lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
-    if not lvIpyData:
-        return 0
-    return lvIpyData.GetReExp()
-
-## 获得当前玩家的参考金钱
-#  @param curPlayer 玩家实例
-#  @return
-def GetPlayerReMoney(curPlayer):
     return 0
+    #lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
+    #if not lvIpyData:
+    #    return 0
+    #return lvIpyData.GetReExp()
 
 #---------------------------------------------------------------------
 ##增加玩家的PK值
@@ -3463,204 +3455,6 @@
 
     
 #---------------------------------------------------------------------
-
-## 功能模块战斗力类
-#
-#  分模块计算战斗力
-class ModuleFightPower():
-    
-    __AttrName = "%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
-    __AttrNameNoline = "Noline_%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
-    __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed] # 需要记录的非线性战斗属性
-    
-    ## 初始化
-    #  @param self 类实例
-    #  @return 返回值无意义
-    #  @remarks 初始化
-    def __init__(self, mfpType):
-        self.mfpType = mfpType
-        self.ClearAttr()
-        return
-            
-    ## 重置所有属性
-    #  @param self 类实例
-    #  @return 返回值无意义
-    def ClearAttr(self):
-        for attrIndex in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            value = 0
-            setattr(self, self.__AttrName % attrIndex, value)
-        for attrIndex in self.__NolineAttrList:
-            setattr(self, self.__AttrNameNoline % attrIndex, 0)            
-        return
-            
-    ## 根据战斗属性列表设置计算战斗力属性
-    #  @param self 类实例
-    #  @return 返回值无意义
-    def SetCalcMFPBattleAttr(self, allAttrList):
-        battleAttrDict = allAttrList[ChConfig.CalcAttr_Battle]
-        # 设置本模块增加的线性战斗属性,非线性战斗属性增加的在刷属性时累加上去
-        for attrIndex, value in battleAttrDict.items():
-            self.AddCalcMFPAttr(attrIndex, value)
-            
-        # 非线性战斗属性仅设置时记录即可
-        battleNolineAttrDict = allAttrList[ChConfig.CalcAttr_BattleNoline]
-        for attrIndex, value in battleNolineAttrDict.items():
-            if attrIndex in self.__NolineAttrList:
-                setattr(self, self.__AttrNameNoline % attrIndex, value)
-        return
-    
-    ## 设置计算战斗力属性值
-    def SetCalcMFPAttr(self, attrIndex, value):
-        if 1 <= attrIndex < ChConfig.Def_Calc_AllAttrType_MAX:
-            attrName = self.__AttrName % attrIndex
-            setattr(self, attrName, value)
-        return
-            
-    ## 增加计算战斗力属性
-    #  @param self 类实例
-    #  @param key 计算属性类型
-    #  @param value 计算属性数值
-    #  @return 返回值无意义
-    def AddCalcMFPAttr(self, attrIndex, value):
-        # 如果有存在计算战斗力所需的参数key值,则增加上去
-        if 1 <= attrIndex < ChConfig.Def_Calc_AllAttrType_MAX:
-            attrName = self.__AttrName % attrIndex
-            setattr(self, attrName, getattr(self, attrName) + value)
-    
-    def GetModuleFightPower(self, fpParam, curPlayer):
-        MaxHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMaxHP) # 最大血量
-        MinAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMin) # 最小攻击
-        MaxAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMax) # 最大攻击
-        Def = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrDEF) # 物防
-        Hit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrHit) * fpParam.GetCftHit() # 命中值
-        Miss = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMiss) * fpParam.GetCftMiss() # 闪避值
-        AtkSpeed = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrAtkSpeed) # 攻击速度(数值非攻击间隔)
-        SuperHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRate) * fpParam.GetCftSuperHitRate() # 暴击率
-        SuperHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRateReduce) * fpParam.GetCftSuperHitRateReduce() # 暴击概率抗性
-        SuperHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHit) # 暴击伤害固定值
-        SuperHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitReduce) # 暴击固定减伤
-        LuckyHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRate) * fpParam.GetCftLuckyHitRate() # 会心一击
-        LuckyHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRateReduce) * fpParam.GetCftLuckyHitRateReduce() # 会心一击概率抗性
-        LuckyHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHit) # 会心一击伤害固定值
-        LuckyHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitReduce) # 会心一击伤害固定减伤
-        SkillAtkRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRate) * fpParam.GetCftSkillAtkRate() # 技能攻击比例加成
-        SkillAtkRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRateReduce) * fpParam.GetCftSkillAtkRateReduce() # 技能攻击比例减少
-        DamagePVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVP)  # PVP固定伤害
-        DamagePVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVPReduce)  # PVP固定减伤
-        DamagePVE = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVE)  # PVE固定伤害
-        HPRestore = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_HPRestorePer) # 自动回复血量,固定值
-        DamBackPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamBackPer) * fpParam.GetCftDamBackPer() # 反伤百分比
-        SpeedValue = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrSpeed) # 移动速度值
-        SpeedPer = 0#getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrSpeed) * fpParam.GetCftSpeedPer() # 移动速度百分比系数
-        PetMinAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetMinAtk) # 宠物最小攻击
-        PetMaxAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetMaxAtk) # 宠物最大攻击
-        PetDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetDamPer) # 宠物伤害百分比提升
-        IceAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrIceAtk) # 冰攻, 元素攻击
-        IceDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrIceDef) # 冰防, 元素防御
-        IgnoreDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_IgnoreDefRate) * fpParam.GetCftIgnoreDefRate() # 无视防御几率
-        IgnoreDefRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_IgnoreDefRateReduce) * fpParam.GetCftIgnoreDefRateReduce() # 无视防御概率抗性
-        DamChanceDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamChanceDef) * fpParam.GetCftDamChanceDef() # 20%的概率抵御伤害比率
-        BleedDamage = 0#getattr(self, self.__AttrName % ChConfig.TYPE_Calc_BleedDamage) * fpParam.GetCftBleedDamage() # 流血伤害
-        AtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AtkBackHPPer) # 攻击回复血量
-        FaintRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintRate) * fpParam.GetCftFaintRate() # 触发击晕
-        FaintDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintDefRate) * fpParam.GetCftFaintDefRate() # 击晕抵抗
-        FinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurt) # 最终固定伤害增加
-        FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
-        BossFinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_BossFinalHurtPer) * fpParam.GetCftBossFinalHurtPer() # Boss最终伤害万分率
-        FinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtPer) * fpParam.GetCftFinalHurtPer() # 最终伤害万分率
-        FinalHurtReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReducePer) * fpParam.GetCftFinalHurtReducePer() # 最终伤害减少万分率
-        DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
-        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() # 弓箭攻击伤害减免
-        AffairSpeedPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AffairSpeedPer) * fpParam.GetCftAffairSpeedPer() # 仙盟事务速度加成
-        FamilyBossHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyBossHurtPer) * fpParam.GetCftFamilyBossHurtPer() # 仙盟BOSS伤害加成
-        FamilyWarHPPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarHPPer) * fpParam.GetCftFamilyWarHPPer() # 仙盟联赛生命加成
-        FamilyWarAtkPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarAtkPer) * fpParam.GetCftFamilyWarAtkPer() # 仙盟联赛攻击加成
-        FamilySitExpPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilySitExpPer) * fpParam.GetCftFamilySitExpPer() # 仙盟打坐经验加成
-        
-        NormalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurt) 
-        NormalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurtPer) * fpParam.GetCftNormalHurtPer() # 普通附加伤害加成
-        FabaoHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurt)
-        FabaoHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurtPer) * fpParam.GetCftFabaoHurtPer() # 法宝附加伤害加成
-        Luck = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_Luck)
-        
-        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) # 最大防护值
-        #ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
-        ProDefPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefHPPer) # 防护转化百分比
-        
-        OnlyFinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_OnlyFinalHurt) # 额外输出伤害
-        PVPAtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PVPAtkBackHP) # PVP攻击回血
-        NPCHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NPCHurtAddPer) * fpParam.GetCftNPCHurtAddPer() # 对怪物伤害加成
-        
-        #其他需作为公式参数的系数
-        AtkSpeedParameter = fpParam.GetCftAtkSpeed()
-        LuckyHitParameter = 0#fpParam.GetCftLuckyHit()
-        
-        #取总属性的
-        SuperHitRateTotal = curPlayer.GetSuperHitRate()
-        LuckyHitRateTotal = curPlayer.GetLuckyHitRate()
-        
-        job = curPlayer.GetJob()
-        diffAttrDict = self.__GetAttrFightPowerParamDiff(job)
-        for paramName, diffValue in diffAttrDict.items():
-            exec("%s = max(0, %s - %s)" % (paramName, paramName, diffValue))
-            
-        #获取策划配置的表格
-        FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
-        totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
-        
-        #GameWorld.DebugLog("MfpType=%s,FightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
-        if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
-            GameWorld.ErrLog("模块战力超过数值上限, MfpType=%s,fightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
-            #totalFightPower = ShareDefine.Def_UpperLimit_DWord 模块战力支持超20亿,日志暂保留用于输出提醒
-        return totalFightPower
-        
-    def __GetAttrFightPowerParamDiff(self, job):
-        ## 战力计算属性参数与实际属性差值
-        
-        #角色基础模块某些属性不计算战力
-        if self.mfpType != ShareDefine.Def_MFPType_Role:
-            return {}
-        
-        roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
-        notFightPowerEffIDNameDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 2)
-        if job not in roleBaseAttrDict:
-            return {}
-        
-        diffAttrDict = {}
-        jobBaseAttrDict = roleBaseAttrDict[job]
-        for attrID, paramName in notFightPowerEffIDNameDict.items():
-            if attrID not in jobBaseAttrDict:
-                continue
-            diffAttrDict[paramName] = jobBaseAttrDict[attrID]
-        return diffAttrDict
-    
-    def GetMFPAttrStr(self):
-        attrStr = ""
-        for attrIndex in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            attrName = self.__AttrName % attrIndex
-            attrValue = getattr(self, attrName)
-            if attrValue <= 0:
-                continue
-            
-            attrStr += "%s=%s," % (attrName, attrValue)
-            
-        for attrIndex in self.__NolineAttrList:
-            attrName = self.__AttrNameNoline % attrIndex
-            attrValue = getattr(self, attrName)
-            if attrValue <= 0:
-                continue
-            
-            attrStr += "%s=%s," % (attrName, attrValue)
-        return attrStr
-
 ###############################################################
 #人物控制类
 
@@ -3669,7 +3463,7 @@
 #  人物死亡等逻辑处理
 class PlayerControl:
     __Player = None
-    __fpTypeObjDict = {}
+    
     #---------------------------------------------------------------------
     ## 初始化
     #  @param self 类实例
@@ -3678,46 +3472,6 @@
     #  @remarks 初始化
     def __init__(self, iPlayer):
         self.__Player = iPlayer
-    
-    ## 获取模块战斗力对象
-    #  @param self 类实例
-    #  @param fpType 战斗力类型
-    #  @return 返回战斗力对象
-    def GetModuleFightPowerObj(self, fpType):
-        fpObj = self.__fpTypeObjDict.get(fpType)
-        if not fpObj:
-            fpObj = ModuleFightPower(fpType)
-            self.__fpTypeObjDict[fpType] = fpObj
-        return fpObj
-    
-    ## 获取模块战斗力对象
-    #  @param self 类实例
-    #  @return 返回战斗力对象
-    def ResetFightPowerObj(self):
-        for obj in self.__fpTypeObjDict.values():
-            obj.ClearAttr()
-    
-    #---------------------------------------------------------------------
-    ## 玩家升级加点加技能 前20级自动加点 20级后 以前是加技能点现改成直接升级后读表加技能
-    #  @param self 类实例
-    #  @return None
-    #  @remarks 玩家升级 加点 2010-05-26 adaws修改 原来有加技能点 现将升级加技能提出 
-    def __DoLVUPAddPoint(self):
-        curPlayer = self.__Player
-        if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
-            # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
-            return
-
-        curFreePoint = curPlayer.GetFreePoint()
-        addPoint = GetLvUp_AddPoint(curPlayer)
-        if addPoint != 0:
-            setFreePoint = curFreePoint + addPoint
-            #NotifyCode(curPlayer, "ObtainAttributeDot", [addPoint])
-            
-            DataRecordPack.DR_Freepoint(curPlayer, "LvUP", addPoint)
-            curPlayer.SetFreePoint(setFreePoint)
-
-        return
     
     ## 加经验值 
     #  @param self 类实例
@@ -3769,7 +3523,7 @@
             exp_rate = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TotalExpRate)
         elif expViewType in [ShareDefine.Def_ViewExpType_GameEvent, ShareDefine.Def_ViewExpType_Sit]:
             exp_rate = curPlayer.GetGameEventExpRate()
-            exp_rate += GetFamilySitExpPer(curPlayer)
+            #exp_rate += GetFamilySitExpPer(curPlayer)
         else:
             exp_rate = max(GameWorld.GetGameWorld().GetExpRate(), ChConfig.Def_MaxRateValue)
             
@@ -3818,9 +3572,9 @@
     def PlayerLvUp(self, handLvUp=False):
         curPlayer = self.__Player
         
-        if GameObj.GetHP(curPlayer) <= 0:
-            #玩家死亡不可升级
-            return
+        #if GameObj.GetHP(curPlayer) <= 0:
+        #    #玩家死亡不可升级
+        #    return
         
         lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
         if not lvIpyData:
@@ -3895,18 +3649,18 @@
             
             # 升级需要执行的游戏功能处理
             GameFuncComm.DoFuncOpenLogic(curPlayer)
-            ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长
+            #ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长
             #if aftLV%10 == 0:
             #    # 控制下刷新次数
             #    PlayerPet.CalcPetItemAddPlayerAttr(curPlayer)   # 宠物有随等级变化的技能
             
-            self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard)
-            #放在功能开启后面
-            PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
+            PlayerOnline.CalcRoleBase(curPlayer)
+            PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+            
             #将血设置为最大
-            GameObj.SetHPFull(curPlayer)
-            if curPlayer.GetMaxMP() > 0:
-                curPlayer.SetMP(curPlayer.GetMaxMP())
+            #GameObj.SetHPFull(curPlayer)
+            #if curPlayer.GetMaxMP() > 0:
+            #    curPlayer.SetMP(curPlayer.GetMaxMP())
             
             FBLogic.OnPlayerLVUp(curPlayer)
             # 记录开服活动冲级数据
@@ -3929,149 +3683,6 @@
         return
     
     #---------------------------------------------------------------------
-
-    def CalcRoleBaseAttr(self, curPlayer):
-        # 计算玩家角色基础属性值
-        
-        curPlayerID = curPlayer.GetID()
-        job = curPlayer.GetJob()
-        
-        lvAttrDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAttr%s" % job, 1)
-        
-        if not lvAttrDict:
-            GameWorld.ErrLog('无此职业等级刷属性配置!job=%s' % (job), curPlayerID)
-            return
-        
-        allAttrList = [{} for _ in range(4)]
-        
-        # 职业初始属性
-        roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
-        if job in roleBaseAttrDict:
-            for roleBaseAttrID, value in roleBaseAttrDict[job].items():
-                CalcAttrDict_Type(roleBaseAttrID, value, allAttrList)
-        #GameWorld.DebugLog("初始加属性: %s" % allAttrList)
-                
-        # 等级成长属性
-        LV = curPlayer.GetLV()
-        for lvAttrID, formula in lvAttrDict.items():
-            calcValue = eval(FormulaControl.GetCompileFormula("LVUPAttr%s_%s" % (job, lvAttrID), formula))
-            CalcAttrDict_Type(lvAttrID, calcValue, allAttrList)
-            #GameWorld.DebugLog("    lvAttrID=%s,calcValue=%s" % (lvAttrID, calcValue))
-        #GameWorld.DebugLog("等级加属性: %s" % allAttrList)
-        
-        # 属性点属性
-        hadRefreshAttr = curPlayer.GetDictByKey(ChConfig.Def_Player_HadRefreshAttr) # 本地图是否刷新过属性
-        pointFightPowerEx = 0
-        pointValueInfo = {ShareDefine.Def_Effect_Metal:[lambda curObj:GetMetal(curObj), lambda curObj, value:SetMetalQualityLV(curObj, value), lambda curObj:GetMetalQualityLV(curObj)],
-                          ShareDefine.Def_Effect_Wood:[lambda curObj:GetWood(curObj), lambda curObj, value:SetWoodQualityLV(curObj, value), lambda curObj:GetWoodQualityLV(curObj)],
-                          ShareDefine.Def_Effect_Water:[lambda curObj:GetWater(curObj), lambda curObj, value:SetWaterQualityLV(curObj, value), lambda curObj:GetWaterQualityLV(curObj)],
-                          ShareDefine.Def_Effect_Fire:[lambda curObj:GetFire(curObj), lambda curObj, value:SetFireQualityLV(curObj, value), lambda curObj:GetFireQualityLV(curObj)],
-                          ShareDefine.Def_Effect_Earth:[lambda curObj:GetEarth(curObj), lambda curObj, value:SetEarthQualityLV(curObj, value), lambda curObj:GetEarthQualityLV(curObj)],
-                          }
-        hasChange_Qualitylv = False #灵根品级是否有变更
-        lingGenQualityAttrList = [{} for _ in range(4)]
-        for pointAttrID, pointFuncInfo in pointValueInfo.items():
-            pointValue = pointFuncInfo[0](curPlayer)
-            befPQLV = pointFuncInfo[2](curPlayer)
-            pointFuncInfo[1](curPlayer, 0)
-            if not pointValue:
-                if 0 != befPQLV:
-                    hasChange_Qualitylv = True
-                continue
-            ipyData = IpyGameDataPY.GetIpyGameData("RolePoint", pointAttrID)
-            if not ipyData:
-                continue
-            # 每点属性
-            perPointAddAttrDict = ipyData.GetAddAttrInfoPerPoint() # {"职业":[[每X点,属性ID,值], ...], ..}
-            addAttrList = perPointAddAttrDict.get(str(job), [])
-            for needPoint, pointAddAttrID, pointAddAttrValue in addAttrList:
-                pointAddValueTotal = pointAddAttrValue * (pointValue / needPoint)
-                CalcAttrDict_Type(pointAddAttrID, pointAddValueTotal, allAttrList)
-                #GameWorld.DebugLog("    属性点(%s)加属性: pointValue=%s,pointAddAttrID=%s,pointAddValueTotal=%s" % (pointAttrID, pointValue, pointAddAttrID, pointAddValueTotal))
-                
-            pointFightPowerEx += (ipyData.GetFightPowerPerPoint() * pointValue)
-            
-            # 点数品质属性
-            curPQLV = 0
-            pqIntervalList = ipyData.GetPointQualityIntervalList()
-            for pqLV, pqValue in enumerate(pqIntervalList, 1): # 灵根品级从1开始
-                if pointValue >= pqValue:
-                    curPQLV = pqLV
-                else:
-                    break
-            pointFuncInfo[1](curPlayer, curPQLV)
-            if curPQLV != befPQLV:
-                hasChange_Qualitylv = True
-            if not curPQLV:
-                continue
-            pqAttrInfoDict = ipyData.GetPointQualityAttrDict().get(str(curPlayer.GetJob()), {})
-            for pqAttrID, pqAttrValueList in pqAttrInfoDict.items():
-                pqAttrValue = 0 if curPQLV > len(pqAttrValueList) else pqAttrValueList[curPQLV - 1]
-                CalcAttrDict_Type(int(pqAttrID), pqAttrValue, lingGenQualityAttrList)
-            #GameWorld.DebugLog("        属性点(%s)品阶等级属性: befPQLV=%s,curPQLV=%s,pqAttrInfoDict=%s" % (pointAttrID, befPQLV, curPQLV, pqAttrInfoDict))
-                
-        #GameWorld.DebugLog("等级属性点加属性: %s" % allAttrList)
-        #GameWorld.DebugLog("灵根品阶等级属性: %s" % lingGenQualityAttrList)
-        #GameWorld.DebugLog("灵根点数附加战力: %s" % pointFightPowerEx)
-        SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Role, pointFightPowerEx)
-        SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase, allAttrList)
-        SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList)
-        return hasChange_Qualitylv
-    
-    #---------------------------------------------------------------------
-    def NotifyAllState(self, playerStateDict):
-        curPlayer = self.__Player
-        notifySelfList = []
-        notifyAllList = []
-        notifyAllAttrState = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NotifyAllAttrState)
-        
-        #在此处把所有属性的不同通知给客户端
-        for index, value in playerStateDict.items():
-            
-            curPlayerState, attrType, notifySelf, notifyAll = EffGetSet.GetValueByEffIndexEx(curPlayer, index)
-            
-            if not attrType:
-                continue
-            
-            if notifyAllAttrState and curPlayerState == value:
-                #GameWorld.Log("第%d个,原值%d等于现值%d,不发给客户端"%( index, value, curPlayerState ) )
-                continue
-            notifyStruct = ChPyNetSendPack.tagRefreshType()
-            notifyStruct.RefreshType = attrType
-            if attrType in [IPY_PlayerDefine.CDBPlayerRefresh_HP, IPY_PlayerDefine.CDBPlayerRefresh_MaxHP]:
-                notifyStruct.Value = curPlayerState % ShareDefine.Def_PerPointValue
-                notifyStruct.ValueEx = curPlayerState / ShareDefine.Def_PerPointValue
-            else:
-                notifyStruct.Value = curPlayerState               
-            if notifySelf:
-                notifySelfList.append(notifyStruct)
-            if notifyAll:
-                notifyAllList.append(notifyStruct)
-        
-        #属性组合包
-        #通知自己
-        if notifySelfList:
-            sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
-            sendPack.Clear()
-            sendPack.ObjID = curPlayer.GetID()
-            sendPack.ObjType = curPlayer.GetGameObjType()
-            sendPack.Count = len(notifySelfList)
-            sendPack.RefreshType = notifySelfList
-            NetPackCommon.SendFakePack(curPlayer, sendPack)
-            
-        if len(notifyAllList) != 0:
-            #广播周围玩家
-            sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
-            sendPack.Clear()
-            sendPack.ObjID = curPlayer.GetID()
-            sendPack.ObjType = curPlayer.GetGameObjType()
-            sendPack.Count = len(notifyAllList)
-            sendPack.RefreshType = notifyAllList
-            PyNotifyAll(curPlayer, sendPack, False, -1)
-            
-        if not notifyAllAttrState:
-            curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 1)
-        return
     
     ## 刷新玩家所有状态
     #  @param self 类实例
@@ -4079,59 +3690,13 @@
     #  @return 返回值无意义
     #  @remarks 刷新玩家所有状态
     def RefreshAllState(self, isSyncBuff=False, billboardFunc=None, isForce=False):
-        curPlayer = self.__Player
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("Start RefreshAllState!!!", playerID)
-        
-        self.RefreshPlayerActionState()
-        self.RefreshPlayerAttrState(billboardFunc, isForce)
         return
-    
     
     ## 重计算并刷新玩家所有状态, 目前只用与切换地图
     #  @param self 类实例
     #  @return 返回值无意义
     #  @remarks 刷新玩家所有状态
     def ReCalcAllState(self):
-        curPlayer = self.__Player
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("Start ReCalcAllState!!!", playerID)
-        
-        for funcIndex in ChConfig.CalcAttrFuncList:
-            ClearCalcAttrListValue(curPlayer, funcIndex)
-            
-        #先压入BUFF的效果值及技能战斗力
-        self.RefreshAllSkill()
-        ChEquip.RefreshPlayerEquipAttribute(curPlayer)
-        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
-        #SkillShell.RefreshPlayerBuffOnAttrAddEffect(curPlayer)
-        PlayerHorse.CalcHorseAttrEx(curPlayer)
-        PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
-        PlayerGodWeapon.CalcGodWeaponAttr(curPlayer)
-        PlayerDienstgrad.CalcAllDienstgradAttr(curPlayer)
-        PlayerPet.CalcPetItemAddPlayerAttr(curPlayer)
-        PlayerRune.RefreshRuneAttr(curPlayer)
-        PlayerMagicWeapon.CalcMagicWeaponAttr(curPlayer)
-        PlayerSuccess.CalcSuccessAttr(curPlayer)
-        PlayerVip.CalcVIPAttr(curPlayer)
-        PlayerRefineStove.CalcStoveAttr(curPlayer)
-        PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
-        PlayerEquipDecompose.RefreshEDAttr(curPlayer)
-        PlayerDogz.RefreshDogzAttr(curPlayer)
-        PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
-        PlayerGatherTheSoul.CalcSoulAttr(curPlayer)
-        PlayerCoat.CalcClothesCoatSkinAttr(curPlayer)
-        PlayerFaQi.CalcFaQiAttr(curPlayer)
-        PlayerLove.CalcLoveAttr(curPlayer)
-        PlayerCharm.CalcCharmAttr(curPlayer)
-        PlayerLianTi.CalcLianTiAttr(curPlayer)
-        PlayerShentong.CalcShentongAttr(curPlayer)
-        PlayerFamilyZhenfa.CalcZhenfaAttr(curPlayer)
-        PlayerFace.CalcFaceAttr(curPlayer)
-        PlayerFace.CalcFacePicAttr(curPlayer)
-        PlayerHero.CalcHeroItemAddAttr(curPlayer)
-        self.RefreshAllState(isForce=True)
-        GameWorld.DebugLog("End ReCalcAllState!!!", playerID)
         return
     
     
@@ -4146,36 +3711,7 @@
     
     # BUFF层单独刷新属性
     def RefreshPlayerAttrByBuffEx(self):
-        
-        curPlayer = self.__Player
-        if curPlayer.GetDictByKey(ChConfig.Def_Player_RefreshAttrByBuff) != 1:
-            return
-        
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("Start RefreshPlayerAttrByBuffEx!!!", playerID)
-        beforeMaxHP = GameObj.GetMaxHP(curPlayer)
-        beforeMoveSpeedValue = GetSpeedValue(curPlayer)
-        #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
-        playerStateDict = {}
-        for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            playerStateDict.update({index:EffGetSet.GetValueByEffIndex(curPlayer, index)})
-        #GameWorld.DebugLog("刷属性前=%s" % playerStateDict, playerID)
-        #self.PrintAttr(curPlayer, "刷之前")
-        #---------------------------开始计算-------------------------------------
-        curPlayer.BeginRefreshState()
-        # 恢复功能数值  不能调用函数self.InitPlayerState()
-        EffGetSet.RestorePlayerFuncAttr(curPlayer)
-        
-        # 6.计算buff属性, buff层级的不算如战斗力
-        self.__RefreshBuffAttr()
-        
-        # 7.刷完属性后需要处理的逻辑
-        self.__DoRefreshAttrAfterLogic(beforeMaxHP, beforeMoveSpeedValue, playerStateDict)
-        
-        curPlayer.SetDict(ChConfig.Def_Player_RefreshAttrByBuff, 0)
-        GameWorld.DebugLog("End RefreshPlayerAttrByBuffEx!!!", playerID)
         return
-    
     
     #===========================================================================
     # #装备和BUFF 效果的计算移到外层
@@ -4196,15 +3732,6 @@
         if isForce:
             self.RefreshPlayerAttrStateEx()
             
-        return
-    
-    def PrintAttr(self, curPlayer, mark):
-        attrInfo = ""
-        for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            value = EffGetSet.GetValueByEffIndex(curPlayer, index)
-            if value:
-                attrInfo = "%s,%s=%s" % (attrInfo, index, value)
-        GameWorld.DebugLog("%s AttrInfo=%s" % (mark, attrInfo))
         return
     
     def RefreshPlayerAttrStateEx(self):
@@ -4238,808 +3765,33 @@
                         无buff总属性  = 固定总属性 + 内部百分比加成值 + 交叉百分比加成  + 固定总属性百分比加成   + 技能百分比对固定属性加成  + 技能固定值
                         含buff总属性  = 无buff总属性 * buff百分比加成  +  buff固定值
         '''
-        curPlayer = self.__Player
-        
-        if curPlayer.GetDictByKey(ChConfig.Def_Player_RefreshAttr) != 1:
-            return False
-        
-        PlayerGubao.CalcGubaoAttr(curPlayer) # 古宝定位为对贯通所有游戏功能系统的属性玩法,所以每次都重新刷新
-        
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("Start RefreshPlayerAttrStateEx!!!", playerID)
-        
-        #beforeAtkInterval = curPlayer.GetAtkInterval()
-        beforeMaxHP = GameObj.GetMaxHP(curPlayer)
-        beforeMoveSpeedValue = GetSpeedValue(curPlayer)
-        beforeMaxProDef = GetMaxProDef(curPlayer)
-        #[金木水火土]
-        beforePointList = [GetMetal(curPlayer), GetWood(curPlayer), GetWater(curPlayer), GetFire(curPlayer), GetEarth(curPlayer)]
-        #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
-        playerStateDict = {}
-        for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            playerStateDict.update({index:EffGetSet.GetValueByEffIndex(curPlayer, index)})
-        #GameWorld.DebugLog("刷属性前=%s" % playerStateDict, playerID)
-        #self.PrintAttr(curPlayer, "刷之前")
-        #---------------------------开始计算-------------------------------------
-        curPlayer.BeginRefreshState()
-        self.ResetFightPowerObj()
-        #self.PrintAttr(curPlayer, "重置后")
-        notAttrList = [{} for _ in range(4)]
-        
-        # 1.初始化人物各项状态及属性
-        self.InitPlayerState()
-        #self.PrintAttr(curPlayer, "初始化")
-        
-        # 功能属性层级一...
-        # 2.计算基础属性
-        #    2.1 获取所有功能计算点计算的属性值, 统计基础属性累加
-        baseAttrDict = {}
-        baseAttrNolineDict = {}
-        funcAttrLen = len(ChConfig.CalcAttrFuncList)
-        funcAttrInfoList = [[{} for _ in range(4)]] * funcAttrLen
-        funcInsidePerAttrList = [{}] * funcAttrLen # 功能内部百分比附加属性
-        for funcIndex in ChConfig.CalcAttrFuncList:
-            # 基础属性等功能汇总完后统一刷新,因为各功能可能会加属性点数
-            if funcIndex in [ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.Def_CalcAttrFunc_LingGenQuailty]:
-                continue
-            attrInfo, insidePerAttrDict = GetCalcAttrListValue(curPlayer, funcIndex)[:2]
-            if attrInfo == notAttrList and not insidePerAttrDict:
-                continue
-            GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s" % (funcIndex, ChConfig.FuncIndexName.get(funcIndex, ""), attrInfo, insidePerAttrDict), playerID)
-            funcAttrInfoList[funcIndex] = attrInfo
-            funcInsidePerAttrList[funcIndex] = insidePerAttrDict
-            # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
-            AddAttrDictValue(baseAttrDict, attrInfo[ChConfig.CalcAttr_Base])
-            AddAttrDictValue(baseAttrNolineDict, attrInfo[ChConfig.CalcAttr_BaseNoline])
-            
-        #    2.2 将基础属性累加到玩家身上
-        if baseAttrDict or baseAttrNolineDict:
-            # 因为基础属性会影响战斗属性计算,所以先统计增加基础属性
-            GameWorld.DebugLog("功能附加点: baseAttrDict=%s,baseAttrNolineDict=%s" % (baseAttrDict, baseAttrNolineDict), playerID)
-            CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, baseAttrDict)
-            CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, baseAttrNolineDict)
-            
-        # 功能有加基础属性值,这里再重新刷新一下基础属性, 基础属性会影响战斗属性, 每次都刷新角色基础属性
-        hasChange_Qualitylv = self.CalcRoleBaseAttr(curPlayer)
-        roleBaseAttrInfo, roleInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)[:2]
-        lingGenQualityAttrList, lingGenQualityInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)[:2]
-        funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleBaseAttrInfo
-        funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleInsidePerAttrDict
-        funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] =  lingGenQualityAttrList
-        funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] =  lingGenQualityInsidePerAttrDict
-        GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s" 
-                           % (ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.FuncIndexName.get(ChConfig.Def_CalcAttrFunc_RoleBase, ""), roleBaseAttrInfo, roleInsidePerAttrDict), playerID)
-        GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s" 
-                           % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, ChConfig.FuncIndexName.get(ChConfig.Def_CalcAttrFunc_LingGenQuailty, ""), lingGenQualityAttrList, lingGenQualityInsidePerAttrDict), playerID)
-        
-        #self.PrintAttr(curPlayer, "基础后", playerID)
-        
-        # 3.计算战斗属性
-        #    3.1 战斗属性层级交叉影响基值数值汇总
-        #        基础层级(角色基础属性)
-        baseAttrList = AddAttrListValue([funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase],
-                                         funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGen],
-                                         funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty],
-                                         ])
-        #GameWorld.DebugLog("基础层级: %s" % baseAttrList, playerID)
-        
-        #        功能点交叉影响非线性层对应属性基值列表
-        funcAttrPerInfo = {ChConfig.TYPE_Calc_BaseAtkAddPer:[baseAttrList],
-                           ChConfig.TYPE_Calc_BaseMaxHPAddPer:[baseAttrList],
-                           ChConfig.TYPE_Calc_BaseDefAddPer:[baseAttrList],
-                           ChConfig.TYPE_Calc_BaseHitAddPer:[baseAttrList],
-                           ChConfig.TYPE_Calc_BaseMissAddPer:[baseAttrList],
-                           ChConfig.TYPE_Calc_FaQiMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
-                           ChConfig.TYPE_Calc_FaQiAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
-                           ChConfig.TYPE_Calc_FaQiDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
-                           ChConfig.TYPE_Calc_GodWeaponMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GodWeapon]],
-                           ChConfig.TYPE_Calc_GodWeaponAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GodWeapon]],
-                           ChConfig.TYPE_Calc_StoneMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
-                           ChConfig.TYPE_Calc_StoneAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
-                           ChConfig.TYPE_Calc_StoneBasePer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
-                           ChConfig.TYPE_Calc_RealmBasePer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Prestige]],
-                           ChConfig.TYPE_Calc_HorseAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Horse]],
-                           ChConfig.TYPE_Calc_HorseMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Horse]],
-                           ChConfig.TYPE_Calc_HorseTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseTarin]],
-                           ChConfig.TYPE_Calc_PetTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PetTarin]],
-                           ChConfig.TYPE_Calc_GuardTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GuardTarin]],
-                           ChConfig.TYPE_Calc_WingTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_WingTarin]],
-                           ChConfig.TYPE_Calc_PeerlessWeaponTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain]],
-                           ChConfig.TYPE_Calc_PeerlessWeapon2TrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train]],
-                           ChConfig.TYPE_Calc_LianTiAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LianTi]],
-                           ChConfig.TYPE_Calc_HorseSkinMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
-                           ChConfig.TYPE_Calc_HorseSkinAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
-                           ChConfig.TYPE_Calc_HorseSkinDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
-                           ChConfig.TYPE_Calc_TitleMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
-                           ChConfig.TYPE_Calc_TitleAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
-                           ChConfig.TYPE_Calc_TitleDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
-                           ChConfig.TYPE_Calc_FaceMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
-                           ChConfig.TYPE_Calc_FaceAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
-                           ChConfig.TYPE_Calc_FaceDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
-                           ChConfig.TYPE_Calc_FacePicMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
-                           ChConfig.TYPE_Calc_FacePicAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
-                           ChConfig.TYPE_Calc_FacePicDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
-                           }
-        #    3.2 统计各功能之间非线性属性交叉影响累加
-        funcCrossAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
-        for i, funcAttrList in enumerate(funcAttrInfoList):
-            battleNoLineAttrDict = funcAttrList[ChConfig.CalcAttr_BattleNoline] # 暂写死只取战斗非线性的
-            if not battleNoLineAttrDict:
-                continue
-            addAttrDict = {}
-            #GameWorld.DebugLog("交叉功能点: i=%s,%s" % (i,battleNoLineAttrDict), playerID)
-            for noLineAttrType, addAttrPer in battleNoLineAttrDict.items():
-                if noLineAttrType not in funcAttrPerInfo or noLineAttrType not in ChConfig.FuncNoLinearAttrDict:
-                    continue
-                # 使用的基值目标功能索引
-                attrRate = addAttrPer / float(ChConfig.Def_MaxRateValue)
-                addAttrTypeList = ChConfig.FuncNoLinearAttrDict[noLineAttrType]
-                useFuncAttrList = funcAttrPerInfo[noLineAttrType]
-                for attrType in addAttrTypeList:
-                    addValue = 0
-                    for useAttrList in useFuncAttrList:
-                        useAttrDict = useAttrList[ChConfig.CalcAttr_Battle] # 默认增加的是战斗线性
-                        # 默认提升的属性在线性战斗属性里
-                        if attrType not in useAttrDict:
-                            continue
-                        baseValue = useAttrDict[attrType] # 只是用到目标功能的基值
-                        addValue += int(baseValue * attrRate)
-                        #GameWorld.DebugLog("    i=%s,calcID=%s,per=%s,rate=%s,baseValue=%s,attrType=%s,addValue=%s" % (i, noLineAttrType, addAttrPer, attrRate, baseValue, attrType, addValue), playerID)
-                    if addValue <= 0:
-                        continue
-                    addAttrDict[attrType] = addAttrDict.get(attrType, 0) + addValue
-                    
-            if addAttrDict:
-                # 增加的数值统计到百分比属性所属功能点
-                # 如符文有个武器攻击百分比增加属性,增加的数值属于符文功能,不属于武器功能点的,只是基值使用了武器攻击     
-                funcCrossAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
-                
-        GameWorld.DebugLog("交叉影响属性: %s" % funcCrossAttrPerInfoDict, playerID)
-        
-        #    3.3 统计所有功能固定属性影响累加
-        allFixAttrDict = {} # 固定属性层级总属性基值
-        for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
-            # 技能模块不计入功能固定属性、不计战力
-            if funcIndex in ChConfig.CalcAttrFuncSkillList:
-                continue
-            AddAttrDictValue(allFixAttrDict, funcAttrList[ChConfig.CalcAttr_Battle])
-            
-        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("固定属性总和: %s" % allFixAttrDict, playerID)
-        GameWorld.DebugLog("固定百分比附加属性: %s" % fixAttrPerAddExDict, playerID)
-        
-        # 4. 计算属性及战力, 需在计算buff层之前计算
-        curLV = curPlayer.GetLV()
-        fpParam = IpyGameDataPY.GetIpyGameData("FightPowerParam", curLV)
-        mfpDict = {} # 模块战斗力
-        mfpObjDict = {}
-        for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
-            mfpAttrList = [{} for _ in range(4)]
-            mfpAttrExDict = {}
-            for funcIndex in attrFuncIndexList:
-                if funcIndex in ChConfig.CalcAttrFuncSkillList:
-                    # 技能模块不计入功能固定属性、不计战力
-                    continue
-                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:
-                    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)
-            mfpObjDict[mfpType] = mfpObj
-            
-        # 因为计算战力需要取到总属性,所以等各功能点属性累加完后再计算
-        for mfpType, mfpObj in mfpObjDict.items():
-            mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam, curPlayer)
-            mfpSkill = GetMFPSkillFightPower(curPlayer, mfpObj.mfpType)
-            mfpEx = GetMFPExFightPower(curPlayer, mfpType)
-            mfpTotal = mfpValue + mfpSkill + mfpEx
-            mfpDict[mfpObj.mfpType] = mfpTotal
-            
-            if mfpType == ShareDefine.Def_MFPType_Plus:
-                OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Plus, mfpTotal)
-            elif mfpType == ShareDefine.Def_MFPType_Horse:
-                OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Horse, mfpTotal)
-            elif mfpType == ShareDefine.Def_MFPType_Wash:
-                OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Wash, mfpTotal)
-                
-        #GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList, playerID)
-        
-        # 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, playerID)
-        
-        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)
-                
-        #特殊指定属性公式
-        GameMap.SpecialMapSetAttrValueByFormat(curPlayer)
-        
-        #护盾值刷新
-        self.__RefreshMaxProDef(beforeMaxProDef)
-        
-        # 【到此所有功能属性都已刷新处理完毕,复制一份 功能属性的刷新结果,用于BUFF属性单独刷新】
-        EffGetSet.CopyPlayerFuncAttr(curPlayer)
-        
-        # 6.计算buff属性, buff层级的不算如战斗力
-        self.__RefreshBuffAttr()
-        
-        # 7.刷完属性后需要处理的逻辑
-        self.__DoRefreshAttrAfterLogic(beforeMaxHP, beforeMoveSpeedValue, playerStateDict)
-        
-        #通知基础属性
-        self.__SyncBaseAttr(curPlayer, baseAttrList)
-        #五行灵根变更需要处理的逻辑
-        afterPointList = [GetMetal(curPlayer), GetWood(curPlayer), GetWater(curPlayer), GetFire(curPlayer), GetEarth(curPlayer)]
-        if beforePointList != afterPointList:
-            diffPointAttrList = []
-            for i, attrID in enumerate([ShareDefine.Def_Effect_Metal, ShareDefine.Def_Effect_Wood, ShareDefine.Def_Effect_Water,
-                           ShareDefine.Def_Effect_Fire, ShareDefine.Def_Effect_Earth]):
-                if beforePointList[i] != afterPointList[i]:
-                    diffPointAttrList.append(attrID)
-            SkillShell.RefreshElementSkillByAttr(curPlayer, diffPointAttrList)
-#        if hasChange_Qualitylv:
-#            #灵根品级变化处理
-#            ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
-            
-        # 更新开服活动灵根数据
-        OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
-        
-        # 同步前端战力,因为有 SetFightPower 所以累加战力放在这里所有刷新及计算处理完后才处理,才能正常触发set同步前端
-        self.SendModuleFightPowerPack(curPlayer, mfpDict)
-        billFuncCnt = len(PyGameData.g_refreshAttrBillboardFunc) # 只处理固定次数,防止死循环
-        while billFuncCnt > 0 and PyGameData.g_refreshAttrBillboardFunc:
-            billFuncCnt -= 1
-            billboardFunc = PyGameData.g_refreshAttrBillboardFunc.pop(0)
-            GameWorld.DebugLog("回调排行榜: %s" % billboardFunc, playerID)
-            billboardFunc(curPlayer, isForceUpdate=True)
-            
-        # 暂停刷新属性标志,必须被调用
-        curPlayer.SetDict(ChConfig.Def_Player_RefreshAttr, 0)
-        curPlayer.SetDict(ChConfig.Def_Player_RefreshAttrByBuff, 0)
-        curPlayer.SetDict(ChConfig.Def_Player_HadRefreshAttr, 1)
-        GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!", playerID)
-        return True
-    
-    
-    # 生命转化为防护值
-    def __RefreshMaxProDef(self, beforeMaxProDef):
-        curPlayer = self.__Player
-        if GetProDefHPPer(curPlayer) == 0:
-            return
-        maxHP = GameObj.GetMaxHP(curPlayer)
-        proDefPer = GetProDefHPPer(curPlayer)
-        
-        #获取策划配置的表格
-        GodWeapon4 = IpyGameDataPY.GetFuncCfg("GodWeapon4", 2)
-        maxProDef = eval(FormulaControl.GetCompileFormula("GodWeapon4", GodWeapon4))
-        SetMaxProDef(curPlayer, int(maxProDef))
-        
-        afterMaxProDef = GetMaxProDef(curPlayer)
-        addValue = max(0, afterMaxProDef - beforeMaxProDef)
-        curProDef = GetProDef(curPlayer)
-        
-        if beforeMaxProDef > 0 and addValue > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
-            # 同步增加 (死亡状态下不刷)
-            SetProDef(curPlayer, min(curProDef + addValue, afterMaxProDef))
-        elif curProDef > afterMaxProDef:
-            # 做一次防范纠正
-            SetProDef(curPlayer, min(curProDef, afterMaxProDef))
-            
         return
-    
-    def __RefreshBuffAttr(self):
-        ## 刷新buff层属性,该层属性只会改变玩家最终属性,不会影响战力等
-        curPlayer = self.__Player
-        playerID = curPlayer.GetPlayerID()
-        allAttrListBuffs = [{} for _ in range(4)]
-        # 6.计算buff属性, buff层级的不算如战斗力
-        #        算战斗力总值时该层影响的数值不统计,但刷属性时需计算
-        SkillShell.CalcBuffers_Effect(curPlayer, allAttrListBuffs)
-            
-        #        层非线性战斗属性累加
-        battleNolineAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_BattleNoline]
-        CalcNoLineEffect.AddPlayerMapAttrNolineEffect(curPlayer, battleNolineAttrBuff)
-        CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, battleNolineAttrBuff, isBuffAttr=True)
-        
-        battleAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_Battle]
-        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, battleAttrBuff, isBuffAttr=True)
-        
-        #        速度特殊处理 计算一次
-        self.__RefreshMoveSpeed(allAttrListBuffs)
-        
-        # GM测试属性特殊逻辑
-        self.__DoRefreshGMAttr()
-        
-        #        刷新攻击速度
-        self.__SetAtkInterval()
-        GameWorld.DebugLog("Buff层属性: %s" % allAttrListBuffs, playerID)
-        return
-    
-    def __DoRefreshGMAttr(self):
-        ## 刷新GM测试属性
-        curPlayer = self.__Player
-        if curPlayer.GetGMLevel() != ChConfig.Def_GM_LV_God:
-            return
-        
-        platform = GameWorld.GetPlatform()
-        if not GameWorld.IsTestPlatform(platform):
-            return
-        
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        if not ipyDataMgr.GetGMAttrCount():
-            return
-        
-        playerAccID = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
-        gmIpyData = None
-        commIpyData = None
-        for i in xrange(ipyDataMgr.GetGMAttrCount()):
-            ipyData = ipyDataMgr.GetGMAttrByIndex(i)
-            if not ipyData.GetIsValid():
-                continue
-            gmMaxLV = ipyData.GetGMMaxLV()
-            if curPlayer.GetLV() > gmMaxLV:
-                continue
-            gmAccID = ipyData.GetGMAccID()
-            if gmAccID == playerAccID:
-                gmIpyData = ipyData
-                break
-            
-            if not gmAccID and not commIpyData:
-                commIpyData = ipyData
-                
-        if not gmIpyData:
-            if not commIpyData:
-                return
-            gmIpyData = commIpyData
-            
-        setAttrDict = {}
-        specAttrDict = gmIpyData.GetAttrSpecDict()
-        attrLV = gmIpyData.GetAttrLV()
-        attrPer = gmIpyData.GetAttrPer()
-        if attrLV:
-            if attrLV == 1:
-                attrLV = curPlayer.GetLV()
-            lvIpyData = GetPlayerLVIpyData(attrLV)
-            if lvIpyData:
-                setAttrDict[ChConfig.AttrName_MaxHP] = int(lvIpyData.GetReMaxHP() * attrPer) # 最大生命值
-                setAttrDict[ChConfig.AttrName_Atk] = int(lvIpyData.GetReAtk() * attrPer) # 攻击(最小、最大攻击)
-                setAttrDict[ChConfig.AttrName_Def] = int(lvIpyData.GetReDef() * attrPer) # 防御
-                setAttrDict[ChConfig.AttrName_Hit] = int(lvIpyData.GetReHit() * attrPer) # 命中
-                setAttrDict[ChConfig.AttrName_DefRate] = int(lvIpyData.GetReMiss() * attrPer) # 闪避
-                setAttrDict[ChConfig.AttrName_AtkSpeed] = int((lvIpyData.GetReAtkSpeed() + 10000) * attrPer) # 攻击速度, 策划等级表配置的是附加值,所以这里要加
-                setAttrDict[ChConfig.AttrName_SkillAtkRate] = int(max(0, lvIpyData.GetReSkillAtkRate() - 10000) * attrPer) # 技能伤害比例, 策划等级表配置的是最终值,初始值是0,所以这里要减
-                setAttrDict[ChConfig.AttrName_DamagePVP] = int(lvIpyData.GetReDamagePer() * attrPer) # PVP固定伤害
-                setAttrDict[ChConfig.AttrName_DamagePVPReduce] = int(lvIpyData.GetReDamReduce() * attrPer) # PVP固定减伤
-                setAttrDict[ChConfig.AttrName_IgnoreDefRate] = int(lvIpyData.GetReIgnoreDefRate() * attrPer) # 无视防御比例
-                setAttrDict[ChConfig.AttrName_LuckyHitRate] = int(lvIpyData.GetReLuckyHitRate() * attrPer) # 会心一击率
-                setAttrDict[ChConfig.AttrName_LuckyHit] = int(lvIpyData.GetReLuckyHit() * attrPer) # 会心一击伤害
-                setAttrDict[ChConfig.AttrName_BleedDamage] = int(lvIpyData.GetReBleedDamage() * attrPer) # 流血伤害增加
-                setAttrDict[ChConfig.AttrName_IceAtk] = int(lvIpyData.GetReIceAtk() * attrPer) # 真实伤害
-                setAttrDict[ChConfig.AttrName_IceDef] = int(lvIpyData.GetReIceDef() * attrPer) # 真实抵御
-                setAttrDict[ChConfig.AttrName_PetAtk] = int(lvIpyData.GetRePetAtk() * attrPer) # 灵宠攻击
-                setAttrDict[ChConfig.AttrName_PetSkillAtkRate] = int(max(0, lvIpyData.GetRePetSkillAtkRate() - 10000) * attrPer) # 灵宠技能, 策划等级表配置的是最终值,初始值是0,所以这里要减
-                setAttrDict[ChConfig.AttrName_PetDamPer] = int(lvIpyData.GetRePetDamPer() * attrPer) # 灵宠伤害增加
-                setAttrDict[ChConfig.AttrName_FinalHurt] = int(lvIpyData.GetReFinalHurt() * attrPer) # 固定伤害增加
-                setAttrDict[ChConfig.AttrName_FinalHurtReduce] = int(lvIpyData.GetReFinalHurtReduce() * attrPer) # 固定伤害减少
-                
-        # 特殊属性的直接优先级最高,直接覆盖
-        for attrType, attrValue in specAttrDict.items():
-            setAttrDict[attrType] = attrValue
-            
-        gmAttrSetInfo = [{} for _ in range(4)]
-        for attrType, attrValue in setAttrDict.items():
-            if not attrValue:
-                setAttrDict.pop(attrType)
-                continue
-            CalcAttrDict_Type(attrType, attrValue, gmAttrSetInfo)
-            
-        # 直接设置的属性
-        if gmAttrSetInfo:
-            for key, value in gmAttrSetInfo[ChConfig.CalcAttr_Battle].items():
-                EffGetSet.SetValueByEffIndex(curPlayer, key, value)
-                
-        # 附加属性
-        attrExDict = gmIpyData.GetAttrExDict()
-        gmAttrExInfo = [{} for _ in range(4)]
-        for attrType, attrValue in attrExDict.items():
-            CalcAttrDict_Type(attrType, attrValue, gmAttrExInfo)
-        CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, gmAttrExInfo[ChConfig.CalcAttr_Battle])
-        
-        GameWorld.DebugLog("GM测试设置属性: GMAttrID=%s,playerAccID=%s" % (gmIpyData.GetGMAttrID(), playerAccID))
-        GameWorld.DebugLog("    GM等级属性: GMAttrLV=%s,attrPer=%s,setAttrDict=%s,specAttrDict=%s,%s" 
-                           % (attrLV, attrPer, setAttrDict, specAttrDict, gmAttrSetInfo))
-        GameWorld.DebugLog("    GM附加属性: attrExDict=%s,%s" % (attrExDict, gmAttrExInfo))
-        return
-    
-    def __DoRefreshAttrAfterLogic(self, beforeMaxHP, beforeMoveSpeedValue, playerStateDict):
-        '''刷完总属性(功能属性 + buff属性) 后需要处理的逻辑
-            包含一些数值纠正、属性变更通知等
-            @attention: 此函数为刷 功能属性 及 buff属性 通用逻辑,所以不是受buff影响的相关处理请不要放这里,比如战斗力等
-        '''
-        curPlayer = self.__Player
-        #------------------------------计算完毕--------------------------------
-        afterMaxHP = GameObj.GetMaxHP(curPlayer)
-        addMaxHP = max(0, afterMaxHP - beforeMaxHP)
-        if beforeMaxHP > 0 and addMaxHP > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
-            # 最大血量增加时,同步增加等量的当前血量 (死亡状态下不刷当前血量)
-            GameObj.SetHP(curPlayer, min(GameObj.GetHP(curPlayer) + addMaxHP, afterMaxHP))
-        #self.PrintAttr(curPlayer, "最终的")
-        curPlayer.EndRefreshState() # 统一在刷属性结束逻辑中调用
-        #---------------------------------------------------------------------
-        #把属性合并通知
-        self.NotifyAllState(playerStateDict)
-        
-        #移动速度不同则通知给客户端, 功能层处理的是 SpeedNotBuff , 通知客户端的需要是最终的 SpeedValue
-        if beforeMoveSpeedValue != GetSpeedValue(curPlayer):
-            SetSpeedValue(curPlayer, GetSpeedValue(curPlayer))
-            
-        #纠正当前血魔量不超过最大值
-        self.__RestoreHPMP()
-        
-        #通知客户端玩家当前经验倍率
-        Sync_ExpRateChange(curPlayer)
-        return
-    
-    def __SyncBaseAttr(self, curPlayer, baseAttrList):
-        baseBattleAttrDict = baseAttrList[ChConfig.CalcAttr_Battle]
-        attrTypeKeyDict = {ChConfig.TYPE_Calc_AttrATKMin:[ChConfig.Def_PlayerKey_BaseAtkMin, ShareDefine.CDBPlayerRefresh_BaseAtkMin],
-                           ChConfig.TYPE_Calc_AttrATKMax:[ChConfig.Def_PlayerKey_BaseAtkMax, ShareDefine.CDBPlayerRefresh_BaseAtkMax],
-                           ChConfig.TYPE_Calc_AttrMaxHP:[ChConfig.Def_PlayerKey_BaseMaxHP, ShareDefine.CDBPlayerRefresh_BaseMaxHP],
-                           ChConfig.TYPE_Calc_AttrDEF:[ChConfig.Def_PlayerKey_BaseDef, ShareDefine.CDBPlayerRefresh_BaseDef],
-                           ChConfig.TYPE_Calc_AttrHit:[ChConfig.Def_PlayerKey_BaseHit, ShareDefine.CDBPlayerRefresh_BaseHit],
-                           ChConfig.TYPE_Calc_AttrMiss:[ChConfig.Def_PlayerKey_BaseMiss, ShareDefine.CDBPlayerRefresh_BaseMiss],
-                           }
-        
-        notifySList = []
-        for attrType, attrInfo in attrTypeKeyDict.items():
-            attrKey, refreshType = attrInfo
-            baseValue = baseBattleAttrDict.get(attrType, 0)
-            curBaseValue = curPlayer.GetDictByKey(attrKey)
-            if baseValue != curBaseValue:
-                curPlayer.SetDict(attrKey, baseValue)
-                
-                notifyStruct = ChPyNetSendPack.tagRefreshType()
-                notifyStruct.RefreshType = refreshType
-                notifyStruct.Value = baseValue
-                notifySList.append(notifyStruct)
-                
-        # 通知基础属性
-        if notifySList:
-            sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
-            sendPack.Clear()
-            sendPack.ObjID = curPlayer.GetID()
-            sendPack.ObjType = curPlayer.GetGameObjType()
-            sendPack.Count = len(notifySList)
-            sendPack.RefreshType = notifySList
-            NetPackCommon.SendFakePack(curPlayer, sendPack)
-        return
-    
-    #---------------------------------------------------------------------
     
     ## 刷新玩家技能战斗力
     #  @param self 类实例
     #  @return 返回值无意义
     #  @remarks 刷新玩家被动技能Buff
     def RefreshAllSkill(self):
-        curPlayer = self.__Player
-        
-        skillManager = curPlayer.GetSkillManager()
-        
-        # 重置模块技能战斗力
-        for mfpType in ShareDefine.ModuleFightPowerTypeList:
-            SetMFPSkillFightPower(curPlayer, mfpType, 0)
-        
-        for i in range(0, skillManager.GetSkillCount()):
-            curSkill = skillManager.GetSkillByIndex(i)
-
-            mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
-            
-            skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
-            SetMFPSkillFightPower(curPlayer, mfpType, skillMFP + curSkill.GetFightPower())
-        
         return
     
     ## 技能升级刷属性战斗力处理
     def RefreshSkillFightPowerEx(self, skillID, beforeFightPower, isRefreshState=True):
-        curPlayer = self.__Player
-        # 新技能战力-旧技能战力为增加的技能战力
-        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-        if not curSkill:
-            return
-        
-        mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
-        addFightPower = curSkill.GetFightPower() - beforeFightPower        
-        skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
-        SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP + addFightPower))
-        GameWorld.DebugLog("刷新技能附加战斗力: skillID=%s,beforeFightPower=%s,mfpType=%s,skillMFP=%s,updMFP=%s" 
-                           % (skillID, beforeFightPower, mfpType, skillMFP, skillMFP + addFightPower), curPlayer.GetPlayerID())
-        
-        if isRefreshState:
-            # 如果需要同步排行榜的话先强制刷属性
-            self.RefreshPlayerAttrState()
-            
         return
     
     def RefreshSkillFightPowerByDel(self, delSkillID, isRefreshState=True):
-        curPlayer = self.__Player
-        # 新技能战力-旧技能战力为增加的技能战力
-        curSkill = GameWorld.GetGameData().GetSkillBySkillID(delSkillID)
-        if not curSkill:
-            return
-        delFightPower = curSkill.GetFightPower()
-        mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
-        skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
-        SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP - delFightPower))
-        GameWorld.DebugLog("刷新技能附加战斗力: delSkillID=%s,mfpType=%s,skillMFP=%s,delFightPower=%s" 
-                           % (delSkillID, mfpType, skillMFP, delFightPower), curPlayer.GetPlayerID())
-        
-        if isRefreshState:
-            # 如果需要同步排行榜的话先强制刷属性
-            self.RefreshPlayerAttrState()
-            
         return
     
     ## 计算被动buff属性加成
     #  @param self 类实例
     #  @return 
     def CalcPassiveBuffAttr(self):
-        #=======================================================================
-        # curPlayer = self.__Player
-        # allAttrListPassive = [{} for i in range(4)]
-        # SkillShell.CalcCurBuffer_Effect(curPlayer.GetPassiveBuf(), curPlayer, allAttrListPassive)
-        # SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PassiveBuf, allAttrListPassive)
-        #=======================================================================
         return
-    
-    ## //A3 A1 各功能模块战斗力信息 #tagMCModuleFightPowerInfo
-    #  @param curPlayer 玩家
-    #  @return None
-    def SendModuleFightPowerPack(self, curPlayer, mfpDict):
-        mfpDataList = []
-        totalFightPower = 0
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("战力功能点: %s" % ChConfig.MFPTypeAttrFuncIndexDict, playerID)
-        GameWorld.DebugLog("模块战力: %s" % mfpDict, playerID)
-        for mfpType, fightPower in mfpDict.items():
-            SetMFPFightPower(curPlayer, mfpType, fightPower)
-            mfpData = ChPyNetSendPack.tagMCModuleFightPower()
-            mfpData.Clear()
-            mfpData.MfpType = mfpType
-            mfpData.FightPower = fightPower % ChConfig.Def_PerPointValue # 当前模块战斗力数值
-            mfpData.FightPowerEx = fightPower / ChConfig.Def_PerPointValue # 当前模块战斗力数值
-            mfpDataList.append(mfpData)
-            totalFightPower += fightPower # 累加总战斗力
-            
-        # //A3 A1 各功能模块战斗力信息 #tagMCModuleFightPowerInfo
-        mfpInfo = ChPyNetSendPack.tagMCModuleFightPowerInfo()
-        mfpInfo.Clear()
-        
-        mfpInfo.TotalFightPower = totalFightPower % ChConfig.Def_PerPointValue
-        mfpInfo.TotalFightPoweEx = totalFightPower / ChConfig.Def_PerPointValue
-        mfpInfo.MFPCnt = len(mfpDataList)
-        mfpInfo.MFPList = mfpDataList
-        NetPackCommon.SendFakePack(curPlayer, mfpInfo)
-        beforeFightPower = GetFightPower(curPlayer)
-        SetFightPower(curPlayer, totalFightPower)
-        if totalFightPower < beforeFightPower:
-            DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
-        highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest, 0,
-                                                           ChConfig.Def_PDictType_FightPower)
-        highestFightPower += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_HighestEx, 0, 
-                                                            ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue
-        if totalFightPower > highestFightPower:
-            highestFightPower = totalFightPower
-            NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, highestFightPower % ChConfig.Def_PerPointValue,
-                                 ChConfig.Def_PDictType_FightPower)
-            NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue,
-                                 ChConfig.Def_PDictType_FightPower)
-        GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (totalFightPower, highestFightPower, beforeFightPower), playerID)
-        PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
-        # 记录开服活动数据
-        OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
-        if beforeFightPower != totalFightPower:
-            CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
-        return
-    
-    def __RefreshMoveSpeed(self, allAttrListBuffs):
-        ## 刷新移动速度
-        curPlayer = self.__Player
-        playerID = curPlayer.GetPlayerID()
-        
-        moveSpeedFormat = IpyGameDataPY.GetFuncCfg("MoveSpeed")
-        
-        speed = GetSpeedNotBuff(curPlayer)
-        GameWorld.DebugLog("功能移动速度值: speed=%s" % speed, playerID)
-        
-        # 骑乘状态加上骑乘附加速度
-        if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvHorse:
-            speedHorse = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedHorse)
-            speed += speedHorse
-            GameWorld.DebugLog("    骑乘状态附加值: %s, speed=%s" % (speedHorse, speed), playerID)
-        
-            
-        buffBattleAttr = allAttrListBuffs[ChConfig.CalcAttr_Battle]
-        buffBattleNolineAttr = allAttrListBuffs[ChConfig.CalcAttr_BattleNoline]
-        #buff速度加成     
-        buffSpeed = buffBattleAttr.get(ChConfig.TYPE_Calc_AttrSpeed, 0)
-        buffSpeedPer = buffBattleNolineAttr.get(ChConfig.TYPE_Calc_AttrSpeed, 0)
-        
-        if buffSpeed or buffSpeedPer:
-            speed = int(speed * (ShareDefine.Def_MaxRateValue + buffSpeedPer) / float(ShareDefine.Def_MaxRateValue) + buffSpeed)
-            GameWorld.DebugLog("    buff影响后速度值: speed=%s,buffSpeedPer=%s,buffSpeed=%s" % (speed, buffSpeedPer, buffSpeed), playerID)
-            
-        speed = max(speed, 0)   #防小于0错误
-        
-        if GetSpeedValue(curPlayer) != speed:
-            SetSpeedValue(curPlayer, speed)
-            moveSpeed = eval(FormulaControl.GetCompileFormula("MoveSpeed", moveSpeedFormat))
-            curPlayer.SetSpeed(moveSpeed)
-            GameWorld.DebugLog("公式计算后移动频率: moveSpeed=%s 毫秒/格" % moveSpeed, playerID)
-            
-            fightPet = curPlayer.GetPetMgr().GetFightPet()
-            #无出战宠物
-            if fightPet:
-                fightPet.SetSpeed(moveSpeed)
-                
-        return
-
-    ##刷新攻击间隔
-    # @param self 类实例
-    # @return None
-    def __SetAtkInterval(self):
-        curPlayer = self.__Player
-        
-        atkSpeed = GameObj.GetAtkSpeed(curPlayer)
-        
-        formula = IpyGameDataPY.GetFuncCfg("AtkInterval")
-        atkInterval = 0 if not formula else eval(FormulaControl.GetCompileFormula("AtkInterval", formula))
-        curPlayer.SetAtkInterval(atkInterval)
-        return
-    
     
     ## 刷新玩家所有行为BUFF状态
     #  @param self 类实例
     #  @return 返回值无意义
     #  @remarks 刷新玩家所有行为BUFF状态
     def RefreshPlayerActionState(self):
-        curPlayer = self.__Player
-        playerID = curPlayer.GetPlayerID()
-        GameWorld.DebugLog("Start RefreshPlayerActionState!!!", playerID)
-        #curTime = time.clock()
-        
-        #先清除所有状态
-        OperControlManager.ClearObjActionState(curPlayer)
-        
-        #再根据BUFF 加上状态
-        SkillShell.CalcBuffer_ActionState(curPlayer)
-    
-    #---------------------------------------------------------------------
-    ## 刷新血量和魔
-    #  @param self 类实例
-    #  @return 返回值无意义
-    #  @remarks 刷新血量和魔
-    def __RestoreHPMP(self):
-        curPlayer = self.__Player
-        
-        if not curPlayer.GetInitOK():
-            #玩家未初始化成功, 不修正血量和魔法值, 因此时有可能因为某些影响主角的物品未初始化完毕(如宠物装备)
-            return
-        
-        curPlayerHP = GameObj.GetHP(curPlayer)
-        curPlayerMaxHP = GameObj.GetMaxHP(curPlayer)
-        #=======================================================================
-        # curPlayerMP = curPlayer.GetMP()
-        # curPlayerMaxMP = curPlayer.GetMaxMP()
-        #=======================================================================
-        
-        if curPlayerHP > curPlayerMaxHP:
-            GameObj.SetHPFull(curPlayer)
-        
-        #=======================================================================
-        # if curPlayerMP > curPlayerMaxMP:
-        #    curPlayer.SetMP(curPlayerMaxMP)
-        #=======================================================================
-
-        return
-    #---------------------------------------------------------------------
-    ## 初始化玩家基本状态 这里不对( 计算现有战斗属性中的元素进行处理 )
-    #  @param self 类实例
-    #  @return 返回值无意义
-    #  @remarks 初始化玩家基本状态 这里不对( 计算现有战斗属性中的元素进行处理 )
-    def InitPlayerState(self):
-        curPlayer = self.__Player
-        #清空战斗属性 //战斗属性设置数值为0的, 由C++处理 如元素属性,命中等
-        curPlayer.ClearBattleEffect()
-        
-        initAttrDict = {
-                        #ChConfig.TYPE_Calc_AttrCurSTR:curPlayer.GetBaseSTR(),
-                        #ChConfig.TYPE_Calc_AttrCurPNE:curPlayer.GetBasePNE(),
-                        #ChConfig.TYPE_Calc_AttrCurPHY:curPlayer.GetBasePHY(),
-                        #ChConfig.TYPE_Calc_AttrCurCON:curPlayer.GetBaseCON(),
-                        #ChConfig.TYPE_Calc_AttrSpeed:curPlayer.GetBaseSpeed(),
-                        ChConfig.TYPE_Calc_AttrAtkSpeed:ChConfig.Def_BaseAtkSpeed,
-                        ChConfig.TYPE_Calc_AttrFightExpRate:GameWorld.GetGameWorld().GetExpRate(),
-                        ChConfig.TYPE_Calc_AttrGameExpRate:GameWorld.GetGameWorld().GetExpRate(),
-                        ChConfig.TYPE_Calc_AttrPetExpRate:GameWorld.GetGameWorld().GetExpRate(),
-                        ChConfig.TYPE_Calc_HitSucessRate:ChConfig.Def_MaxRateValue,
-                        ChConfig.TYPE_Calc_CurePer:ChConfig.Def_MaxRateValue,
-                        ChConfig.TYPE_Calc_YinjiTime:IpyGameDataPY.GetFuncCfg('Yinji', 1),  # 每X秒自动消失一个印记
-                        }
-        
-        for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
-            if i in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
-                continue
-            value = 0 if i not in initAttrDict else initAttrDict[i]
-            EffGetSet.SetValueByEffIndex(curPlayer, i, value)
-            
-        #初始化拾取距离
-        if curPlayer.GetPickupDist() != ChConfig.Def_RolePickupItemDist:
-            curPlayer.SetPickupDist(ChConfig.Def_RolePickupItemDist)
-            
-        #玩家初始化可攻击
-        if not curPlayer.GetCanAttack():
-            curPlayer.SetCanAttack(True)
-            
-        #初始化灵根
-        SetMetal(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Metal))
-        SetWood(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Wood))
-        SetWater(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Water))
-        SetFire(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Fire))
-        SetEarth(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Earth))
-        return True
-    
-    #---------------------------------------------------------------------
-    ## 初始化场景buff
-    #  @param self 类实例
-    #  @return 返回值无意义
-    #  @remarks 初始化场景buff
-    def InitMapBuffState(self):
-        curPlayer = self.__Player
-        
-        #初始化区域, 默认为普通区域
-        if GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) != IPY_GameWorld.gatNormal:
-            curPlayer.SetAreaType(IPY_GameWorld.gatNormal)
-            
         return
     
     #---------------------------------------------------------------------
@@ -5660,7 +4412,6 @@
 def Sync_ExpRateChange(curPlayer):
     totalExpRate = GetPlayerExpRate(curPlayer)
     fightExpRate = curPlayer.GetFightExpRate() # 系统及功能累加
-    fightExpRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # 世界等级
     fightExpRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP加成
     fightExpRate += PlayerGoldInvest.GetAddFightExpRate(curPlayer)
     
@@ -5717,17 +4468,6 @@
                 totalExpRate -= effExpRate
                 
     return totalExpRate
-
-##记录玩家失去金钱的流向记录,消息中会记录玩家拥有的金钱信息
-# @param curPlayer 玩家实例
-# @param moneyType 金钱类型
-# @param logIndex 流向记录索引
-# @param tagID 在此用于记录特别标识(物品ID)
-# @param par 在此用于记录金额
-# @param msg 记录特别的信息
-# @return None 
-def DataServerMoneyLog(curPlayer, moneyType, logIndex, tagID=0, par=0, msg=""):
-    return
 
 #===============================================================================
 #---玩家扩展字段---
@@ -5917,8 +4657,8 @@
 def SetVIPExpireTime(curPlayer, expireTime): return
 
 ##最近一次提升VIP等级时间
-def GetVIPLVUpTime(curPlayer): return curPlayer.GetExAttr9()
-def SetVIPLVUpTime(curPlayer, lvUpTime): return curPlayer.SetExAttr9(lvUpTime, False, True)
+def GetVIPLVUpTime(curPlayer): return 0
+def SetVIPLVUpTime(curPlayer, lvUpTime): return
 
 ##聊天气泡框
 def GetChatBubbleBox(curPlayer): return curPlayer.GetExAttr10()
@@ -5979,69 +4719,16 @@
         GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID)
     return
 
-##影响外观的3部位索引记录 123456789  123:武器格子索引 456:副手  789:衣服
-def GetFaceEquipIndexList(curPlayer):
-    attr15 = curPlayer.GetExAttr15()
-    return [attr15%1000, attr15/1000%1000, attr15/1000000]
-def SetFaceEquipIndex(curPlayer, value): return curPlayer.SetExAttr15(value)
-
-def SetLingGenMaxIndex(curPlayer):
-    return
-
 # 境界难度等级
-def GetRealmDifficulty(curPlayer): return curPlayer.GetExAttr18()
+def GetRealmDifficulty(curPlayer): return 0
 def SetRealmDifficulty(curPlayer, realmDifficulty):
     ''' 设置境界难度等级,任何地图均可选择
     '''
-    playerID = curPlayer.GetPlayerID()
-    
-    if realmDifficulty:
-        needRealmLV = GetDifficultyRealmLV(realmDifficulty)
-        curRealmLV = curPlayer.GetOfficialRank()
-        if curRealmLV < needRealmLV:
-            GameWorld.DebugLog("当前境界低于境界难度,无法选择! curRealmLV(%s) < %s" % (curRealmLV, needRealmLV), playerID)
-            return
-        
-        difficultyRealmList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 2)
-        if needRealmLV not in difficultyRealmList:
-            GameWorld.ErrLog("realmDifficulty(%s) needRealmLV(%s) not in difficultyRealmList(%s)" 
-                             % (realmDifficulty, needRealmLV, difficultyRealmList), playerID)
-            return
-        
-    GameWorld.DebugLog("SetRealmDifficulty: realmDifficulty=%s" % realmDifficulty, playerID)
-    realmMapIDList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 1)
-    mapID = curPlayer.GetMapID()
-    if mapID in realmMapIDList:
-        # 先移除之前选的难度
-        for playerIDList in PyGameData.g_realmDiffPlayerDict.values():
-            if playerID in playerIDList:
-                playerIDList.remove(playerID)
-                
-        # 加入新难度,0难度不处理
-        if realmDifficulty:
-            if realmDifficulty not in PyGameData.g_realmDiffPlayerDict:
-                PyGameData.g_realmDiffPlayerDict[realmDifficulty] = []
-            playerIDList = PyGameData.g_realmDiffPlayerDict[realmDifficulty]
-            if playerID not in playerIDList:
-                playerIDList.append(playerID)
-                
-        SetPlayerSightLevel(curPlayer, realmDifficulty)
-        
-    if curPlayer.GetExAttr18() != realmDifficulty:
-        curPlayer.SetExAttr18(realmDifficulty)
-        SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ExAttr18, realmDifficulty)
     return
-def GetDifficultyRealmLV(realmDifficulty): return realmDifficulty % 1000
+def GetDifficultyRealmLV(realmDifficulty): return 0
 def GetMapRealmDifficulty(curPlayer):
     ## 获取玩家在本地图中的境界难度层级,必须在境界地图且有选择境界难度才算,否则为默认0;该难度值同时也是视野层级
-    realmDifficulty = GetRealmDifficulty(curPlayer)
-    if not realmDifficulty:
-        return 0
-    mapID = curPlayer.GetMapID()
-    realmMapIDList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 1)
-    if mapID not in realmMapIDList:
-        return 0
-    return realmDifficulty
+    return 0
 
 ##玩家离开仙盟时间(主动或被踢都算)
 def GetLeaveFamilyTimeEx(curPlayer):return curPlayer.GetExAttr19()
@@ -6051,48 +4738,42 @@
     curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ExAttr19, value, 0, False)
     return
 
-##获得玩家威望值
-def GetPrestige(curPlayer): return 0
-def SetPrestige(curPlayer, value): return
-
 ##总战斗力,支持超过20E = 各模块战力总和
 def GetFightPower(curPlayer): return curPlayer.GetFightPowerEx() * ChConfig.Def_PerPointValue + curPlayer.GetFightPower()
 def SetFightPower(curPlayer, value):
+    beforeFightPower = GetFightPower(curPlayer)
     curPlayer.SetFightPower(value % ChConfig.Def_PerPointValue, value / ChConfig.Def_PerPointValue, False) # 不通知GameServer bNotifyGameServer False
+    if value < beforeFightPower:
+        DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
+    highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest)
+    highestFightPower += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_HighestEx) * ChConfig.Def_PerPointValue
+    if value > highestFightPower:
+        highestFightPower = value
+        NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, highestFightPower % ChConfig.Def_PerPointValue)
+        NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue)
+        
+    GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (value, highestFightPower, beforeFightPower), curPlayer.GetPlayerID())
+    PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
+    # 记录开服活动数据
+    #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
+    #if beforeFightPower != totalFightPower:
+    #    CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
     return
 
 ## 设置模块战斗力,支持超过20E = 模块公式战力 + 技能附加战力 + 其他附加战力
-def SetMFPFightPower(curPlayer, mfpType, fightPower):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, fightPower % ChConfig.Def_PerPointValue)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType, fightPower / ChConfig.Def_PerPointValue)
-    return
-
+def SetMFPFightPower(curPlayer, mfpType, fightPower): return
 ## 获取模块战斗力
-def GetMFPFightPower(curPlayer, mfpType):
-    return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType) * ChConfig.Def_PerPointValue + \
-        curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPower % mfpType)
+def GetMFPFightPower(curPlayer, mfpType): return 0
 
 ## 设置模块附加战斗力,支持超过20E
-def SetMFPExFightPower(curPlayer, mfpType, fightPower):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % mfpType, fightPower % ChConfig.Def_PerPointValue)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPExPoint % mfpType, fightPower / ChConfig.Def_PerPointValue)
-    return
-
+def SetMFPExFightPower(curPlayer, mfpType, fightPower): return
 ## 获取模块附加战斗力
-def GetMFPExFightPower(curPlayer, mfpType):
-    return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPExPoint % mfpType) * ChConfig.Def_PerPointValue + \
-        curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpType)
+def GetMFPExFightPower(curPlayer, mfpType): return 0
         
 ## 设置模块技能附加战斗力,支持超过20E
-def SetMFPSkillFightPower(curPlayer, mfpType, fightPower):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, fightPower % ChConfig.Def_PerPointValue)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType, fightPower / ChConfig.Def_PerPointValue)
-    return
-
+def SetMFPSkillFightPower(curPlayer, mfpType, fightPower): return
 ## 获取模块技能附加战斗力
-def GetMFPSkillFightPower(curPlayer, mfpType):
-    return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType) * ChConfig.Def_PerPointValue + \
-        curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
+def GetMFPSkillFightPower(curPlayer, mfpType): return 0
         
 #===============================================================================
 ##获取玩家分线信息
@@ -6131,19 +4812,6 @@
         atkInterval *= 100
     
     return atkInterval
-
-def AddZhenQiByKillNPC(curPlayer, npcSP, killCount=1):
-    ## 杀怪加真气
-    if not npcSP:
-        return
-    addSPValue = npcSP * killCount
-    npcSPRate = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_NPCSPRate)
-    
-    if npcSPRate:
-        npcHPRate = ChConfig.Def_MaxRateValue + npcSPRate
-        addSPValue = int(addSPValue * npcHPRate / float(ChConfig.Def_MaxRateValue))
-    PlayerAddZhenQi(curPlayer, addSPValue)
-    return
 
 ##玩家增加真气
 # @param curPlayer 玩家
@@ -6198,16 +4866,8 @@
     return True
 
 ## SP真气值 - 暂废弃 ExAttr7、ExAttr8 改为专精选择通知,用于前端表现其他玩家的不同专精特效
-def GetZhenQi(curPlayer): return 0 #curPlayer.GetExAttr8() * ChConfig.Def_PerPointValue + curPlayer.GetExAttr7()
-def SetZhenQi(curPlayer, totalZhenQi):
-#    zhenQi = totalZhenQi % ChConfig.Def_PerPointValue
-#    zhenQiPoint = min(totalZhenQi / ChConfig.Def_PerPointValue, ChConfig.Def_UpperLimit_DWord)
-#    # 玩家单独通知,不广播; c++接口默认广播,故这里设置False
-#    if zhenQi != curPlayer.GetExAttr7():
-#        curPlayer.SetExAttr7(zhenQi)
-#    if zhenQiPoint != curPlayer.GetExAttr8():
-#        curPlayer.SetExAttr8(zhenQiPoint)
-    return
+def GetZhenQi(curPlayer): return 0
+def SetZhenQi(curPlayer, totalZhenQi): return
 
 #===============================================================================
 # #@warning: ExAttr6~ExAttr10, 新增2个布尔默认参数, 是否通知客户端, 是否通知GameServer, 默认值为False
@@ -6413,36 +5073,6 @@
         GameWorld.AddDictValue(allAttrDict, {i:value})
     return
 
-#===============================================================================
-# CalcAttr_Base,
-# CalcAttr_BaseNoline,
-# CalcAttr_Battle,
-# CalcAttr_BattleNoline,
-#===============================================================================
-
-# 从srcAttrList计算出addAttrList带来的固定属性,用于后续计算使用
-#===============================================================================
-# def CalcAddFuncAttrByAttrList(srcAttrList, addAttrList):
-#    for addKey, addValue in addAttrList[ChConfig.CalcAttr_BaseNoline].items():
-#        value = srcAttrList[ChConfig.CalcAttr_Base].get(addKey, 0)
-#        if value == 0:
-#            continue
-#        
-#        addAttrList[ChConfig.CalcAttr_Base][addKey]  = addAttrList[ChConfig.CalcAttr_Base].get(addKey, 0)\
-#                                                         + value*addValue / ChConfig.Def_MaxRateValue
-# 
-#    addAttrList[ChConfig.CalcAttr_BaseNoline] = {}
-#    for addKey, addValue in addAttrList[ChConfig.CalcAttr_BattleNoline].items():
-#        value = srcAttrList[ChConfig.CalcAttr_Battle].get(addKey, 0)
-#        if value == 0:
-#            continue
-#        
-#        addAttrList[ChConfig.CalcAttr_Battle][addKey]  = addAttrList[ChConfig.CalcAttr_Battle].get(addKey, 0)\
-#                                                         + value*addValue / ChConfig.Def_MaxRateValue
-# 
-#    addAttrList[ChConfig.CalcAttr_BattleNoline] = {}
-#    return addAttrList
-#===============================================================================
 ## 培养境界等级
 def GetTrainRealmLVReal(curPlayer, funcType):
     trainRealmLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TrainRealmLV % funcType)
@@ -6482,324 +5112,23 @@
 
 def GetTotalLingGenPoint(curPlayer):
     # 总灵根点数(金木水火土+自由点数)
-    attrIDList = [ShareDefine.Def_Effect_Metal, ShareDefine.Def_Effect_Wood, ShareDefine.Def_Effect_Water, ShareDefine.Def_Effect_Fire, ShareDefine.Def_Effect_Earth]
-    curTotalPoint = 0
-    for attrID in attrIDList:
-        curTotalPoint += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
-    curTotalPoint += curPlayer.GetFreePoint()
-    return curTotalPoint
+    return 0
 
 # 灵根 - 金木水火土
-def GetMetal(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Metal)
-def SetMetal(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Metal, value)
-def GetWood(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Wood)
-def SetWood(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Wood, value)
-def GetWater(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Water)
-def SetWater(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Water, value)
-def GetFire(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Fire)
-def SetFire(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Fire, value)
-def GetEarth(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Earth)
-def SetEarth(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Earth, value)
-# 灵根品级 - 金木水火土
-def GetMetalQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MetalQualityLV)
-def SetMetalQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_MetalQualityLV, value)
-def GetWoodQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WoodQualityLV)
-def SetWoodQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WoodQualityLV, value)
-def GetWaterQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WaterQualityLV)
-def SetWaterQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WaterQualityLV, value)
-def GetFireQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FireQualityLV)
-def SetFireQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FireQualityLV, value)
-def GetEarthQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EarthQualityLV)
-def SetEarthQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_EarthQualityLV, value)
+def GetMetal(curPlayer): return 0
+def GetWood(curPlayer): return 0
+def GetWater(curPlayer): return 0
+def GetFire(curPlayer): return 0
+def GetEarth(curPlayer): return 0
 
 #---玩家扩展接口, 战斗属性,不存数据库,只通知本人---
 
-##玩家移动速度值, 不含buff对速度的影响; 功能等对速度的影响直接改变此值
-def GetSpeedNotBuff(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedValueNotBuff)
-def SetSpeedNotBuff(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValueNotBuff, value)
-##玩家移动速度值, 含buff对速度的影响; 此数值不是真正的移动速度,只是用于计算移动速度的参数值
-def GetSpeedValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedValue)
-def SetSpeedValue(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValue, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
-    
-#---攻击回复血量比率----
-## 获取玩家攻击回复血量比率
-#  @param curPlayer 玩家实例
-#  @return 
-def GetAtkBackHPPer(curPlayer):
-    return curPlayer.GetBattleValEx2()
-
-
-## 设置玩家攻击回复血量比率
-#  @param curPlayer 玩家实例
-#  @return None
-def SetAtkBackHPPer(curPlayer, value):
-    curPlayer.SetBattleValEx2(value)
-
-## 获取玩家攻击回复蓝量比率
-def GetAtkBackMPPer(curPlayer): return 0
-def SetAtkBackMPPer(curPlayer, value): return
-
 ## 玩家减技能CD比例
-def GetReduceSkillCDPer(curPlayer): return curPlayer.GetBattleValEx3()
-def SetReduceSkillCDPer(curPlayer, reducePer): return curPlayer.SetBattleValEx3(reducePer)
+def GetReduceSkillCDPer(curPlayer): return 0
+def SetReduceSkillCDPer(curPlayer, reducePer): return
 
-## 常规地图经验倍率加成
-def GetCommMapExpRate(curPlayer):
-    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
-        return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CommMapExpRate)
-    return 0
-def SetCommMapExpRate(curPlayer, expRate): return curPlayer.SetDict(ChConfig.Def_PlayerKey_CommMapExpRate, expRate)
-
-## 对怪物伤害加成
-def GetNPCHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NPCHurtAddPer)
-def SetNPCHurtAddPer(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_NPCHurtAddPer, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, value)
-    
-#---职业伤害加成---
-## 目标战士伤害加成
-def GetJobAHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobAHurtAddPer)
-def SetJobAHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobAHurtAddPer, value)
-## 目标法师伤害加成
-def GetJobBHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobBHurtAddPer)
-def SetJobBHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobBHurtAddPer, value)
-## 目标弓手伤害加成
-def GetJobCHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobCHurtAddPer)
-def SetJobCHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobCHurtAddPer, value)
-
-#---伤害减免---
-## NPC攻击伤害减免
-def GetNPCAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NPCAtkReducePer)
-def SetNPCAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NPCAtkReducePer, value)
-## 战士攻击伤害减免
-def GetJobAAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobAAtkReducePer)
-def SetJobAAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobAAtkReducePer, value)
-## 法师攻击伤害减免
-def GetJobBAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobBAtkReducePer)
-def SetJobBAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobBAtkReducePer, value)
-## 弓手攻击伤害减免
-def GetJobCAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobCAtkReducePer)
-def SetJobCAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobCAtkReducePer, value)
-
-#---特殊伤害减免---
-## 会心一击伤害减免固定值
-def GetLuckyHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitReduce)
-def SetLuckyHitReduce(curPlayer, value): 
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitReduce, value)
-    
-## 卓越一击伤害减免
-def GetGreatHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitReducePer)
-def SetGreatHitReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitReducePer, value)
-
-## 无视防御伤害减免
-def GetIgnoreDefReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefReducePer)
-def SetIgnoreDefReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefReducePer, value)
-
-#---抗特殊伤害概率---
-## 抗会心一击概率
-def GetLuckyHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitRateReduce)
-def SetLuckyHitRateReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitRateReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, value)
-## 抗卓越一击概率
-def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
-def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
-
-## 抗无视防御概率
-def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
-def SetIgnoreDefRateReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefRateReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, value)
-    
-#---特殊伤害概率---
-## 富豪一击概率
-def GetFuhaoHitRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FuhaoHitRate)
-def SetFuhaoHitRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FuhaoHitRate, value)
-
-## 流血伤害
-def GetBleedDamage(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BleedDamage)
-def SetBleedDamage(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_BleedDamage, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BleedDamage, value)
-    
-## Boss最终伤害百分比
-def GetBossFinalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossFinalHurtPer)
-def SetBossFinalHurtPer(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_BossFinalHurtPer, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, value)
-    
-## 最终固定伤害增加
-def GetFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurt)
-def SetFinalHurt(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurt, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurt, value)
-## 最终固定伤害减少
-def GetFinalHurtReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReduce)
-def SetFinalHurtReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurtReduce, value)
-## 对指定boss伤害加成固定值
-def GetBossIDHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossIDHurt)
-def SetBossIDHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BossIDHurt, value)
-## 对指定boss伤害加成倍率
-def GetBossIDHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossIDHurtAddPer)
-def SetBossIDHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BossIDHurtAddPer, value)
-## 装备掉落执行次数加成万分率
-def GetDropEquipDoCount(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_DropEquipDoCount)
-def SetDropEquipDoCount(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_DropEquipDoCount, value)
-
-# 基础攻击百分比
-def GetBaseAtkAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseAtkAddPer)
-def SetBaseAtkAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseAtkAddPer, value)
-# 基础生命百分比
-def GetBaseMaxHPAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseMaxHPAddPer)
-def SetBaseMaxHPAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseMaxHPAddPer, value)
-# 基础防御百分比
-def GetBaseDefAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseDefAddPer)
-def SetBaseDefAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseDefAddPer, value)
-# 基础命中百分比
-def GetBaseHitAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseHitAddPer)
-def SetBaseHitAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseHitAddPer, value)
-# 基础闪避百分比
-def GetBaseMissAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseMissAddPer)
-def SetBaseMissAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseMissAddPer, value)
-# 法器生命百分比
-def GetFaQiMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiMaxHPPer)
-def SetFaQiMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiMaxHPPer, value)
-# 法器攻击百分比
-def GetFaQiAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiAtkPer)
-def SetFaQiAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiAtkPer, value)
-# 法器防御百分比
-def GetFaQiDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiDefPer)
-def SetFaQiDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiDefPer, value)
-# 神兵生命百分比
-def GetGodWeaponMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GodWeaponMaxHPPer)
-def SetGodWeaponMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GodWeaponMaxHPPer, value)
-# 神兵攻击百分比
-def GetGodWeaponAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GodWeaponAtkPer)
-def SetGodWeaponAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GodWeaponAtkPer, value)
-# 宝石生命百分比
-def GetStoneMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneMaxHPPer)
-def SetStoneMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneMaxHPPer, value)
-# 宝石攻击百分比
-def GetStoneAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneAtkPer)
-def SetStoneAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneAtkPer, value)
 # 血瓶恢复效果
-def GetHPCureEnhance(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HPCureEnhance)
-def SetHPCureEnhance(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HPCureEnhance, value)
-
-# 额外输出伤害
-def GetOnlyFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_OnlyFinalHurt)
-def SetOnlyFinalHurt(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_OnlyFinalHurt, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_OnlyFinalHurt, value)
-    return
-
-# PVP攻击回血
-def GetPVPAtkBackHP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PVPAtkBackHP)
-def SetPVPAtkBackHP(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PVPAtkBackHP, value)
-
-# 命中成功率
-def GetHitSucessRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HitSucessRate)
-def SetHitSucessRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HitSucessRate, value)
-
-# 闪避成功率
-def GetMissSucessRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MissSucessRate)
-def SetMissSucessRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_MissSucessRate, value)
-
-# 治疗加成 默认百分百
-def GetCurePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CurePer)
-def SetCurePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_CurePer, value)
-
-# 加深受到伤害百分比
-def GetBeHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BeHurtPer)
-def SetBeHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BeHurtPer, value)
-
-# 称号生命加成
-def GetTitleMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleMaxHPPer)
-def SetTitleMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleMaxHPPer, value)
-# 称号攻击加成
-def GetTitleAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleAtkPer)
-def SetTitleAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleAtkPer, value)
-# 称号防御加成
-def GetTitleDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleDefPer)
-def SetTitleDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleDefPer, value)
-
-# 头像生命加成
-def GetFaceMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceMaxHPPer)
-def SetFaceMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceMaxHPPer, value)
-# 头像攻击加成
-def GetFaceAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceAtkPer)
-def SetFaceAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceAtkPer, value)
-# 头像防御加成
-def GetFaceDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceDefPer)
-def SetFaceDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceDefPer, value)
-
-# 头像框生命加成
-def GetFacePicMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicMaxHPPer)
-def SetFacePicMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicMaxHPPer, value)
-# 头像框攻击加成
-def GetFacePicAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicAtkPer)
-def SetFacePicAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicAtkPer, value)
-# 头像框防御加成
-def GetFacePicDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicDefPer)
-def SetFacePicDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicDefPer, value)
-
-# 坐骑幻化生命加成
-def GetHorseSkinMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinMaxHPPer)
-def SetHorseSkinMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinMaxHPPer, value)
-# 坐骑幻化攻击加成
-def GetHorseSkinAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinAtkPer)
-def SetHorseSkinAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinAtkPer, value)
-# 坐骑幻化防御加成
-def GetHorseSkinDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinDefPer)
-def SetHorseSkinDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinDefPer, value)
-
-# 坐骑攻击百分比
-def GetHorseAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseAtkPer)
-def SetHorseAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseAtkPer, value)
-
-# 坐骑生命加成
-def GetHorseMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseMaxHPPer)
-def SetHorseMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseMaxHPPer, value)
-
-# 灵宠攻击加成
-def GetPetAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetAtkPer)
-def SetPetAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetAtkPer, value)
-
-# 坐骑培养属性加成
-def GetHorseTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseTrainAttrPer)
-def SetHorseTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseTrainAttrPer, value)
-
-# 灵宠培养属性加成
-def GetPetTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetTrainAttrPer)
-def SetPetTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetTrainAttrPer, value)
-
-# 守护培养属性加成
-def GetGuardTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GuardTrainAttrPer)
-def SetGuardTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GuardTrainAttrPer, value)
-
-# 翅膀培养属性加成
-def GetWingTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WingTrainAttrPer)
-def SetWingTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WingTrainAttrPer, value)
-
-# 灭世培养属性加成
-def GetPeerlessWeaponTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PeerlessWeaponTrainAttrPer)
-def SetPeerlessWeaponTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PeerlessWeaponTrainAttrPer, value)
-
-# 弑神培养属性加成
-def GetPeerlessWeapon2TrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PeerlessWeapon2TrainAttrPer)
-def SetPeerlessWeapon2TrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PeerlessWeapon2TrainAttrPer, value)
-
-# 炼体属性属性加成
-def GetLianTiAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LianTiAttrPer)
-def SetLianTiAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_LianTiAttrPer, value)
-
-def GetAttr160(curPlayer): return 0
-def SetAttr160(curPlayer, value): pass
+def GetHPCureEnhance(curPlayer): return 0
 
 # 仙盟徽章ID
 def GetFamilyEmblemID(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyEmblemID)
@@ -6813,302 +5142,34 @@
     curPlayer.SetFamilyMemberLV(fmLV) # 也同步设置该值,防止有些地方直接调用 curPlayer.GetFamilyMemberLV()
     return
 
-# 仙盟事务速度加成
-def GetAffairSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AffairSpeedPer)
-def SetAffairSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AffairSpeedPer, value)
-
-# 仙盟BOSS伤害加成
-def GetFamilyBossHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyBossHurtPer)
-def SetFamilyBossHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyBossHurtPer, value)
-
-# 仙盟联赛生命加成
-def GetFamilyWarHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarHPPer)
-def SetFamilyWarHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarHPPer, value)
-
-# 仙盟联赛攻击加成
-def GetFamilyWarAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarAtkPer)
-def SetFamilyWarAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarAtkPer, value)
-
-# 仙盟打坐经验加成
-def GetFamilySitExpPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilySitExpPer)
-def SetFamilySitExpPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilySitExpPer, value)
-
-# 宝石基础属性百分比
-def GetStoneBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneBasePer)
-def SetStoneBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneBasePer, value)
-
-# 境界基础属性百分比
-def GetRealmBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RealmBasePer)
-def SetRealmBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_RealmBasePer, value)
-
-# 翅膀生命百分比
-def GetWingHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WingHPPer)
-def SetWingHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WingHPPer, value)
-
-# 套装基础属性百分比
-def GetSuiteBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuiteBasePer)
-def SetSuiteBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SuiteBasePer, value)
-
-# 强化基础攻击百分比
-def GetPlusBaseAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PlusBaseAtkPer)
-def SetPlusBaseAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PlusBaseAtkPer, value)
-
-## 暂无用
-#  @param curPlayer 玩家实例
-#  @return 
-def GetAddBackHPPer(curPlayer):
-    return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AddBackHPPer)
-
-## 暂无用
-#  @param curPlayer 玩家实例
-#  @return None
-def SetAddBackHPPer(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AddBackHPPer, value)
-    
-#---降低生命恢复效果----
-## 获取降低生命恢复效果万分率
-#  @param curPlayer 玩家实例
-#  @return 
-def GetReduceBackHPPer(curPlayer):
-    return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ReduceBackHPPer)
-
-## 设置降低生命恢复效果万分率
-#  @param curPlayer 玩家实例
-#  @return None
-def SetReduceBackHPPer(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ReduceBackHPPer, value)
-    
-#---触发定身----
-def GetAtkerFreezed(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAtkerFreezed)
-def SetAtkerFreezed(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAtkerFreezed, value)
-    
-#---增加仇恨----
-def GetAddAngry(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAddAngry)
-def SetAddAngry(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAddAngry, value)
-
-#---技能攻击比例减少----
-def GetSkillAtkRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAtkRateReduce)
-def SetSkillAtkRateReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAtkRateReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, value)
-#---PVP固定伤害----
-def GetDamagePVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVP)
-def SetDamagePVP(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVP, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVP, value)
-#---PVP固定伤害减少----
-def GetDamagePVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVPReduce)
-def SetDamagePVPReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVPReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVPReduce, value)
-#---伤害输出固定值计算对NPC附加----
-def GetDamagePVE(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVE)
-def SetDamagePVE(curPlayer, value): 
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVE, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVE, value)
-    
-#---伤害输出计算百分比对玩家附加----
-def GetDamagePerPVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVP)
-def SetDamagePerPVP(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVP, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVP, value)
-def GetDamagePerPVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce)
-def SetDamagePerPVPReduce(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, value)
-    
-#---受伤计算百分比----
-def GetHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrHurtPer)
-def SetHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrHurtPer, value)
-  
-#---自动恢复XP值比率----
-def GetXPRestorePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrXPRestorePer)
-def SetXPRestorePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrXPRestorePer, value)
-
-#---魔法盾伤害吸收蓝耗比率----
-def GetShieldMPCostRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrShieldMPCostRate)
-def SetShieldMPCostRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrShieldMPCostRate, value)
-  
-#---20%的概率抵御伤害比率----
-def GetDamChanceDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamChanceDef)
-def SetDamChanceDef(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamChanceDef, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamChanceDef, value)
-    
 #---当前防护值,需存DB----
-def GetProDef(curPlayer): return curPlayer.GetExAttr4()
-def SetProDef(curPlayer, value):
-    curPlayer.SetExAttr4(value, True)
-    return
+def GetProDef(curPlayer): return 0
+def SetProDef(curPlayer, value): return
 
 #---最大防护值----
-def GetMaxProDef(curPlayer): return curPlayer.GetExAttr16()
-def SetMaxProDef(curPlayer, value):
-    value = min(value, ChConfig.Def_UpperLimit_DWord)
-    curPlayer.SetExAttr16(value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, 0, True) # 周围玩家需要通知
-    return
-    
-#---生命上限换算为防护值的百分比----
-def GetProDefHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefHPPer)
-def SetProDefHPPer(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefHPPer, value)
-    #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefHPPer, value)
-    
-#---防护值吸收伤害比率----
-def GetProDefAbsorb(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefAbsorb)
-def SetProDefAbsorb(curPlayer, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefAbsorb, value)
-    #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value)
-    
-#---宠物攻击提升值----
-def GetPetMinAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMinAtk)
-def SetPetMinAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetMinAtk, value)
-def GetPetMaxAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMaxAtk)
-def SetPetMaxAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetMaxAtk, value)
-
-#---宠物伤害百分比提升----移到GameObj下
-#===============================================================================
-# def GetPetDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
-# def SetPetDamPer(curPlayer, value): 
-#    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
-#    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PetDamPer, value)
-#===============================================================================
-#---宠物技能伤害百分比提升----
-def GetPetSkillAtkRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetSkillAtkRate)
-def SetPetSkillAtkRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetSkillAtkRate, value)
-    
-#---每1级+%s攻击, 数值取万分率,支持小数算法----
-def GetPerLVAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPerLVAtk)
-def SetPerLVAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPerLVAtk, value)
-#---每1级+%s生命, 数值为固定值----
-def GetPerLVMaxHP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPerLVMaxHP)
-def SetPerLVMaxHP(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPerLVMaxHP, value)
-
-#---装备掉率----
-def GetDropEquipPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDropEquipPer)
-def SetDropEquipPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDropEquipPer, value)
-
-#---功能层防御值----
-def GetFuncDef(curPlayer): return EffGetSet.GetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF)
-def SetFuncDef(curPlayer, value): EffGetSet.SetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF, value)
-
-#普通攻击增伤:普通攻击附加的固定值伤害
-def GetNormalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NormalHurt)
-def SetNormalHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NormalHurt, value)
-#普通攻击加成:普通攻击附加的伤害百分比
-def GetNormalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NormalHurtPer)
-def SetNormalHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NormalHurtPer, value)
-#法宝技能增伤:法宝技能攻击附加的固定值伤害
-def GetFabaoHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurt)
-def SetFabaoHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurt, value)
-#法宝技能加成:法宝技能攻击附加的伤害百分比
-def GetFabaoHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurtPer)
-def SetFabaoHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurtPer, value)
+def GetMaxProDef(curPlayer): return 0
+def SetMaxProDef(curPlayer, value): return
 
 # 每X秒自动消失一个印记, 毫秒记录
-def GetLostYinjiTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LostYinjiTime)
-def SetLostYinjiTime(curPlayer, value): 
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_LostYinjiTime, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiTime, value)
+def GetLostYinjiTime(curPlayer): return 0
+def SetLostYinjiTime(curPlayer, value): return
 
 # 当前印记数
-def GetYinjiCnt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_YinjiCnt)
-def SetYinjiCnt(curPlayer, value): 
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_YinjiCnt, value)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiCnt, value)
+def GetYinjiCnt(curPlayer): return 0
+def SetYinjiCnt(curPlayer, value): return
 
 # 减少指定技能组CD XX%
-def GetTheFBSkillsCD(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TheFBSkillsCD)
-def SetTheFBSkillsCD(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TheFBSkillsCD, value)
+def GetTheFBSkillsCD(curPlayer): return 0
+def SetTheFBSkillsCD(curPlayer, value): return
 # 灼烧固定伤害
-def GetBurnValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnValue)
-def SetBurnValue(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnValue, value)
+def GetBurnValue(curPlayer): return 0
+def SetBurnValue(curPlayer, value): return
 # 延长灼烧时间百分比
-def GetBurnTimePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnTimePer)
-def SetBurnTimePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnTimePer, value)
+def GetBurnTimePer(curPlayer): return 0
+def SetBurnTimePer(curPlayer, value): return
 # 减移动速度百分比
-def GetSubSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SubSpeedPer)
-def SetSubSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SubSpeedPer, value)
-
-# 技能伤害增强
-def GetSkillAddPer1(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer1)
-def SetSkillAddPer1(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer1, value)
-def GetSkillAddPer2(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer2)
-def SetSkillAddPer2(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer2, value)
-def GetSkillAddPer3(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer3)
-def SetSkillAddPer3(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer3, value)
-def GetSkillAddPer4(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer4)
-def SetSkillAddPer4(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer4, value)
-def GetSkillAddPer5(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer5)
-def SetSkillAddPer5(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer5, value)
-def GetSkillAddPer6(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer6)
-def SetSkillAddPer6(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer6, value)
-def GetSkillAddPer7(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer7)
-def SetSkillAddPer7(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer7, value)
-
-# 受到技能伤害减少
-def GetSkillReducePer1(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer1)
-def SetSkillReducePer1(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer1, value)
-def GetSkillReducePer2(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer2)
-def SetSkillReducePer2(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer2, value)
-def GetSkillReducePer3(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer3)
-def SetSkillReducePer3(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer3, value)
-def GetSkillReducePer4(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer4)
-def SetSkillReducePer4(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer4, value)
-def GetSkillReducePer5(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer5)
-def SetSkillReducePer5(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer5, value)
-def GetSkillReducePer6(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer6)
-def SetSkillReducePer6(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer6, value)
-def GetSkillReducePer7(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer7)
-def SetSkillReducePer7(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer7, value)
-
-#---诛仙一击概率---
-def GetZhuXianRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianRate)
-def SetZhuXianRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianRate, value)
-
-#---诛仙护体减伤---
-def GetZhuXianReducePer(curPlayer): return 0#curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuXianReducePer)
-def SetZhuXianReducePer(curPlayer, value): return #curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuXianReducePer, value)
-
-## 计算功能背包物品属性 
-#  @param curPlayer 当前玩家
-#  @param packType 背包类型
-#  @param allAttrListEquip 属性列表
-#  @return None
-def CalcFuncPackItem(curPlayer, packType, allAttrListEquip):
-    #===========================================================================
-    # funcPack = curPlayer.GetItemManager().GetPack(packType)
-    # equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
-    # 
-    # #玩家当前可装备的装备类型
-    # for equipIndex in range(0, funcPack.GetCount()):
-    #    
-    #    curEquip = funcPack.GetAt(equipIndex)
-    #    if curEquip.IsEmpty():
-    #        continue
-    #    
-    #    #计算效果
-    #    for i in range(0, curEquip.GetEffectCount()):
-    #        curEffect = curEquip.GetEffectByIndex(i)
-    #        if not curEffect:
-    #            break
-    #        
-    #        effectID = curEffect.GetEffectID()
-    #        if effectID == 0:
-    #            #最后一个
-    #            break
-    #        
-    #        effectValue = curEffect.GetEffectValue(0)
-    #        if not effectValue:
-    #            continue
-    #        
-    #        #添加物品效果的属性值
-    #        CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
-    #    
-    #    
-    #===========================================================================
-    return
+def GetSubSpeedPer(curPlayer): return 0
+def SetSubSpeedPer(curPlayer, value): return
 
 #-------------------------------------------------------------------------------
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
index b0d3e90..5c8f699 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
@@ -522,6 +522,7 @@
 
 def RefreshDogzAttr(curPlayer, isUpdateSucc=False):
     ## 刷新神兽属性
+    return
     totalPlusLv = 0 #出战神兽装备总强化等级
     fightPowerEx = 0
     allAttrList = [{} for _ in range(4)]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 4068544..ba98981 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -24,11 +24,9 @@
 import GameServerRefresh
 import ShareDefine
 import PlayerGameWallow
-import Operate_PlayerBuyZhenQi
 import PlayerSignDay
 import PlayerCoin
 import PlayerControl
-import PlayerWorldAverageLv
 import PlayerFamily
 import PlayerFamilyZhenfa
 import PlayerOnlinePrize
@@ -350,8 +348,6 @@
     elif onEventType == ShareDefine.Def_OnEventTypeEx:
         # 资源找回
         PlayerRecover.RecoverOnDay(curPlayer)
-        #购买次数清空
-        Operate_PlayerBuyZhenQi.PlayerOnDay(curPlayer)
         # 世界boss
         BossHurtMng.OnDay(curPlayer)
         # 仙盟过天
@@ -1262,17 +1258,6 @@
     elif key == ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_YaomoBoss:
         if gameWorldMgr.GetGameWorldDictByKey(key) != value:
             PlayerCrossYaomoBoss.OnYaomoBossStateChange(value, tick)
-            
-    # 世界等级      
-    elif key == ShareDefine.Def_Notify_WorldKey_WorldAverageLv:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            gameWorldMgr.SetGameWorldDict(key, value) # 世界等级先更新再处理
-            playerManager = GameWorld.GetPlayerManager()
-            for index in xrange(playerManager.GetPlayerCount()):
-                curPlayer = playerManager.GetPlayerByIndex(index)
-                if not GameWorld.IsNormalPlayer(curPlayer):
-                    continue
-                PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
             
     #通用设置
     befValue = gameWorldMgr.GetGameWorldDictByKey(key)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index a59e6a5..c5ce267 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -1638,7 +1638,7 @@
     starInfo = affairStarDict.get(str(star), [])
     needDuration = starInfo[1] if len(starInfo) > 1 else 0
     # 可扩展减时长属性
-    speedPer = PlayerControl.GetAffairSpeedPer(curPlayer)
+    speedPer = 0#PlayerControl.GetAffairSpeedPer(curPlayer)
     if speedPer:
         needDuration = int(needDuration * max(10000 - speedPer, 0) / 10000.0)
         #GameWorld.DebugLog("事务加速: needDuration=%s,speedPer=%s" % (needDuration, speedPer), curPlayer.GetPlayerID())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
index b0d20d0..06d0f9a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
@@ -406,68 +406,6 @@
 #    tagHead        Head;
 #};
 def OnTryFirstGoldItem(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTry) != 1:
-        return
-    tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})
-    tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)
-    if not tryItemID:
-        return
-    
-    
-    #先卸下主手武器(若背包满则发邮件),再穿上送的武器
-    equipPlace = ShareDefine.retWeapon
-    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    curItem = curPack.GetAt(equipPlace)
-    if ItemCommon.CheckItemCanUse(curItem):
-        spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)
-        if spaceIndex == -1:
-            itemObj = ItemCommon.GetMailItemDict(curItem)
-            PlayerControl.SendMailByKey('', [curPlayer.GetID()], [itemObj])
-            ItemCommon.DelItem(curPlayer, curItem, 1, False)
-        else:
-            result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipPlace, spaceIndex)
-            if not result:
-                GameWorld.Log('    试用首充武器 卸下原装备失败!!', curPlayer.GetID())
-                return
-    tryItem = ItemControler.GetOutPutItemObj(tryItemID)
-    if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, ItemCommon.GetEquipPackIndex(tryItem), tick):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 2)
-    else:
-        curItem.clear()
-        GameWorld.Log('    试用首充武器 试穿失败!!tryItemID=%s'%tryItemID, curPlayer.GetID())
-    Sync_FirstGoldInfo(curPlayer)
-    return
-
-def FirstGoldTryItemOutTime(curPlayer):
-    ##首充试用物品过期了 若背包仓库没武器则送一把
-    
-    haveEquip = False #是否有可穿的武器
-    playerItemControl = ItemControler.PlayerItemControler(curPlayer)
-    for packIndex in [IPY_GameWorld.rptItem, IPY_GameWorld.rptWarehouse]:
-        curPack = curPlayer.GetItemManager().GetPack(packIndex)
-        for i in range(0, curPack.GetCount()):
-            curItem = curPack.GetAt(i)
-            if not ItemCommon.CheckItemCanUse(curItem):
-                continue
-            if curItem.GetEquipPlace() != ShareDefine.retWeapon:
-                continue
-            if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
-                # 过期
-                continue
-            if not playerItemControl.PlayerCanEquipItem(curItem, False):
-                continue
-            haveEquip = True
-            break
-    if not haveEquip:
-        giveItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 2, {})
-        giveItemID = giveItemDict.get(curPlayer.GetJob(), 0)
-        if not giveItemID:
-            return
-        GameWorld.DebugLog('首充试用物品过期了 背包仓库没武器则送一把giveItemID=%s'%giveItemID, curPlayer.GetID())
-        if not ItemControler.GivePlayerItem(curPlayer, giveItemID, 1, 0, [IPY_GameWorld.rptItem]):
-            GameWorld.DebugLog('首充试用物品过期了 背包仓库没武器则送一把 没给成功!!giveItemID=%s'%giveItemID, curPlayer.GetID())
-            
     return
 
 def OnGetHistoryRechargeAward(curPlayer, awardID):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
index 8c8c66b..7342acf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
@@ -43,7 +43,7 @@
     openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Talent)
     setTalentPoint = 0
     for lv in xrange(openLV, curLV+1):
-        lvIpyData = PlayerControl.GetPlayerLVIpyData(lv)
+        lvIpyData = None #PlayerControl.GetPlayerLVIpyData(lv)
         addTalentPoint = lvIpyData.GetTalentPoint() if lvIpyData else 0
         setTalentPoint += addTalentPoint
     curFreeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
index f737e3d..8de7d6b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
@@ -19,7 +19,6 @@
 import ShareDefine
 import PlayerControl
 import ChPyNetSendPack
-import PlayerWorldAverageLv
 import PlayerActGarbageSorting
 import PlayerActCollectWords
 import PlayerGoldInvest
@@ -36,11 +35,13 @@
 Def_Process_Seconds = 60 # 在线定时处理间隔,秒,离线上线后一次性处理
 
 def DoGuajiOpen(curPlayer):
+    return
     openAwardMinutes = IpyGameDataPY.GetFuncCfg("GuajiTime", 1) # 功能开启获得收益时长,分钟
     AddGuajiAward(curPlayer, openAwardMinutes * 60)
     return
 
 def OnPlayerLogin(curPlayer):
+    return
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
         return
     if not ProcessGuaji(curPlayer):
@@ -48,6 +49,7 @@
     return
 
 def PlayerOnDay(curPlayer):
+    return
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
         return
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiQuickCount, 0)
@@ -56,6 +58,7 @@
 
 def ProcessGuaji(curPlayer):
     ## 挂机定时处理收益
+    return
     if GameWorld.IsCrossServer():
         return
     
@@ -200,7 +203,7 @@
     
     playerID = curPlayer.GetPlayerID()
     reLV = curPlayer.GetLV()
-    lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)
+    lvIpyData = None #PlayerControl.GetPlayerLVIpyData(reLV)
     reExp = lvIpyData.GetReExp() if lvIpyData else 0
     worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
     #GameWorld.DebugLog("计算挂机收益: awardSeconds=%s,useUnsecond=%s,reLV=%s,reExp=%s,worldLV=%s" 
@@ -317,7 +320,6 @@
 def GetGuajiExpRate(curPlayer):
     ## 挂机收益经验加成
     expRate = curPlayer.GetFightExpRate() # 系统及功能累加
-    expRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # 世界等级
     expRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP加成
     return expRate
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index e0515cf..6139b88 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -23,13 +23,71 @@
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerControl
+import PlayerOnline
 import GameWorld
 import ChConfig
 
 import random
-
+    
+    
 def OnPlayerLogin(curPlayer):
     Sync_HeroInfo(curPlayer)
+    return
+
+def OnPlayerFirstLogin(curPlayer):
+    OnFirstLoginInitPlayer(curPlayer)
+    OnFirstLoginInitHero(curPlayer)
+    return
+
+def OnFirstLoginInitPlayer(curPlayer):
+    ## 初始化主公
+    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    if not equipPack.GetCount():
+        identifyPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
+        if not identifyPack.GetCount():
+            return
+    defaultEquipInfo = IpyGameDataPY.GetFuncEvalCfg("NewRoleInit", 1, {})
+    if not defaultEquipInfo:
+        return
+    GameWorld.DebugLog("初始化新手定制装备: %s" % defaultEquipInfo, curPlayer.GetPlayerID())
+    
+    for equipID, appointID in defaultEquipInfo.items():
+        itemData = GameWorld.GetGameData().GetItemByTypeID(equipID)
+        if not itemData:
+            continue
+        equipPlace = itemData.GetEquipPlace()
+        equipPlaceIndex = equipPlace - 1 # 暂固定直接装备位-1
+        if equipPlaceIndex < 0 or equipPlaceIndex >= equipPack.GetCount():
+            continue
+        destEquip = equipPack.GetAt(equipPlaceIndex)
+        if not destEquip.IsEmpty():
+            continue
+        setAttrDict = {ShareDefine.Def_CItemKey_AppointID:appointID} if appointID else {}
+        curItem = ItemControler.GetOutPutItemObj(equipID, 1, curPlayer=curPlayer, setAttrDict=setAttrDict)
+        if not curItem:
+            continue
+        destEquip.AssignItem(curItem)
+        
+    return
+
+def OnFirstLoginInitHero(curPlayer):
+    ## 初始化默认武将阵型
+    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+    GameWorld.DebugLog("OnFirstLoginInitHero: %s" % curPack.GetCount(), curPlayer.GetPlayerID())
+    if not curPack.GetCount():
+        return
+    defaultHeroInfo = IpyGameDataPY.GetFuncEvalCfg("NewRoleInit", 2, {})
+    if not defaultHeroInfo:
+        return
+    GameWorld.DebugLog("初始化新手武将: %s" % defaultHeroInfo, curPlayer.GetPlayerID())
+    
+    lineupID = ShareDefine.Lineup_Main
+    shapeType = 0
+    for heroID, posNum in defaultHeroInfo.items():
+        lineupValue = ComLineupValue(lineupID, shapeType, posNum)
+        setAttrDict = {ShareDefine.Def_IudetHeroLineup:[lineupValue]}
+        ItemControler.GivePlayerItem(curPlayer, heroID, 1, False, [ShareDefine.rptHero], setAttrDict=setAttrDict)
+        
     return
 
 def InitHeroItem(singleItem):
@@ -201,10 +259,10 @@
         return 0
     for lpIndex in range(lineupCount)[::-1]:
         lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
-        #阵容类型*10000+阵型类型*100+位置编号
-        if lineupValue / 10000 != lineupID:
+        lpID, _, posNum = GetLineupValue(lineupValue)
+        if lpID != lineupID:
             continue
-        return lineupValue % 100
+        return posNum
     return 0
 
 #// B2 30 武将升级 #tagCSHeroLVUP
@@ -258,9 +316,7 @@
     GameWorld.DebugLog("武将升级: itemIndex=%s,heroID=%s,updHeroLV=%s" % (itemIndex, heroID, updHeroLV), playerID)
     heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 def GetHeroLVMax(heroItem):
@@ -373,9 +429,8 @@
         __DoHeroStarTalentUp(item, addStar)
     heroItem.Sync_Item()
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    itemIndex = heroItem.GetItemPlaceIndex()
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 def __DoHeroStarTalentUp(singleItem, addLV):
@@ -517,9 +572,7 @@
     GameWorld.DebugLog("武将突破: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextBreakLV), playerID)
     SetHeroBreakLV(heroItem, nextBreakLV)
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 def SetHeroBreakLV(heroItem, breakLV):
@@ -574,12 +627,10 @@
         GameWorld.DebugLog("材料不足,武将无法觉醒! costItemID=%s, costItemCount=%s" % (costItemID, costItemCount))
         return
     ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "HeroAwake")
-    GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
+    GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextAwakeLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
     SetHeroAwakeLV(heroItem, nextAwakeLV)
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 def SetHeroAwakeLV(heroItem, awakeLV):
@@ -711,9 +762,7 @@
     
     heroItem.Sync_Item()
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 #// B2 35 武将洗炼 #tagCSHeroWash
@@ -849,9 +898,7 @@
     heroItem.Sync_Item()
     GameWorld.DebugLog("武将洗炼替换! itemIndex=%s,heroID=%s,washIDList=%s" % (itemIndex, heroID, washIDList))
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 #// B2 36 武将换肤 #tagCSHeroWearSkin
@@ -884,10 +931,7 @@
             return
     heroItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)
     
-    # 刷属性
-    if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
-        RefreshLordAttr(curPlayer)
-        
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
     return
 
 def ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive=True):
@@ -962,6 +1006,9 @@
 def __doHeroBookStarLVUP(curPlayer, heroID, itemIndex):
     ## 图鉴星级升级
     playerID = curPlayer.GetPlayerID()
+    if not GetHeroBookInitState(curPlayer, heroID):
+        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
+        return
     heroItem = GetHeroItem(curPlayer, itemIndex)
     if not heroItem:
         return
@@ -983,6 +1030,9 @@
 def __doHeroBookBreakLVUP(curPlayer, heroID, itemIndex):
     ## 图鉴突破升级
     playerID = curPlayer.GetPlayerID()
+    if not GetHeroBookInitState(curPlayer, heroID):
+        GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
+        return
     heroItem = GetHeroItem(curPlayer, itemIndex)
     if not heroItem:
         return
@@ -1071,8 +1121,7 @@
         item = heroItem.GetItem()
         for lpIndex in range(lineupCount)[::-1]:
             lineupValue = item.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
-            #阵容类型*10000+阵型类型*100+位置编号
-            if lineupValue / 10000 != lineupID:
+            if GetLineupValue(lineupValue)[0] != lineupID:
                 continue
             item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
             delCount += 1
@@ -1082,6 +1131,7 @@
             
     # 更新新阵型
     heroIDList = []
+    heroItemDict = {}
     for posNum, itemIndex in heroPosDict.items():
         if itemIndex < 0 or itemIndex >= curPack.GetCount():
             continue
@@ -1094,34 +1144,70 @@
             continue
         heroIDList.append(itemID)
         item = heroItem.GetItem()
-        lineupValue = lineupID * 10000 + shapeType * 100 + posNum
+        lineupValue = ComLineupValue(lineupID, shapeType, posNum)
         item.AddUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
         if itemIndex not in syncItemDict:
             syncItemDict[itemIndex] = heroItem
+        heroItemDict[itemIndex] = posNum
         
-    # 主阵容修改时重整背包
-    if lineupID == ShareDefine.Lineup_Main:
-        ResetHeroPack(curPlayer)
-    else:
-        for syncItem in syncItemDict.values():
-            syncItem.Sync_Item()
-            
-    RefreshLordAttr(curPlayer)
+    # 主阵容修改时重整背包,约定所有背包由前端自行排序
+    #if lineupID == ShareDefine.Lineup_Main:
+    #    ResetHeroPack(curPlayer)
+    #else:
+    for syncItem in syncItemDict.values():
+        syncItem.Sync_Item()
+        
+    lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID)
+    lineup.UpdLineup(heroItemDict, shapeType)
     return
 
-def ResetHeroPack(curPlayer):
-    tick = GameWorld.GetGameWorld().GetTick()
-    curPlayer.SetResetItemTick(0)
-    ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
-    return
-    
+def ComLineupValue(lineupID, shapeType, posNum): return lineupID * 10000 + shapeType * 100 + posNum
+def GetLineupValue(lineupValue):
+    lineupID = lineupValue / 10000
+    shapeType = lineupValue % 10000 / 100
+    posNum = lineupValue % 100
+    return lineupID, shapeType, posNum
+
+#def ResetHeroPack(curPlayer):
+#    tick = GameWorld.GetGameWorld().GetTick()
+#    curPlayer.SetResetItemTick(0)
+#    ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
+#    return
+
 def RefreshLordAttr(curPlayer):
     ## 刷新主公属性
-    CalcHeroItemAddAttr(curPlayer)
+    CalcHeroAddAttr(curPlayer)
+    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
     return
 
-def CalcHeroItemAddAttr(curPlayer):
-    #allAttrListPet = [{} for _ in range(4)]
+def CalcHeroAddAttr(curPlayer):
+    ## 计算武将对主公增加的属性
+    
+    heroBookAttrDict = {}
+    playerID = curPlayer.GetID()
+    
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetHeroCount()):
+        ipyData = ipyDataMgr.GetHeroByIndex(index)
+        heroID = ipyData.GetHeroID()
+        if not GetHeroBookInitState(curPlayer, heroID):
+            # 图鉴未激活
+            continue
+        quality = ipyData.GetQuality()
+        qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+        if not qualityIpyData:
+            continue
+        bookInitAddPer = qualityIpyData.GetBookInitAddPer()
+        bookStarAddPer = qualityIpyData.GetBookStarAddPer()
+        bookBreakLVAddPer = qualityIpyData.GetBookBreakLVAddPer()
+        bookStar = GetHeroBookStarLV(curPlayer, heroID)
+        bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
+        for attrPerID in ChConfig.BaseAttrPerIDList:
+            addPer = bookInitAddPer + bookStar * bookStarAddPer + bookBreakLV * bookBreakLVAddPer
+            heroBookAttrDict[attrPerID] = heroBookAttrDict.get(attrPerID, 0) + addPer
+            
+    GameWorld.DebugLog("武将图鉴属性: %s" % heroBookAttrDict, playerID)
+    PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HeroBook, heroBookAttrDict)
     return
 
 def RefreshLineupHeroAttr(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 19ee09a..9c66bbb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -314,9 +314,9 @@
         PlayerRideHorseDown(curPlayer, False)
     
     #---执行玩家换装逻辑---
-    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
-        if isRideHorse:
-            PlayerRideHorseUp(curPlayer, False)
+    #if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
+    #    if isRideHorse:
+    #        PlayerRideHorseUp(curPlayer, False)
             
     return True
 
@@ -377,8 +377,8 @@
         if not curHorse:
             return
         #---执行玩家换装逻辑---
-        tick = GameWorld.GetGameWorld().GetTick()
-        ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
+        #tick = GameWorld.GetGameWorld().GetTick()
+        #ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
         
     GameWorld.DebugLog("坐骑功能开启! horseLV=%s,horseID=%s" % (horseLV, horseID))
     Sync_HorseClassData(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index ef64c77..0c96bc7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -9,7 +9,7 @@
 # @date 2025-07-02
 # @version 1.0
 #
-# 详细描述: 在线玩家管理,用于管理在线玩家、准在线玩家的临时数据
+# 详细描述: 在线玩家管理,用于管理在线玩家、准在线玩家的临时数据,重读不会被重置
 #         准在线玩家 - 实际不在线,x分钟内离线的玩家,用于支持断线重连,短时间内临时数据可持续
 #
 #-------------------------------------------------------------------------------
@@ -18,28 +18,222 @@
 
 import TurnAttack
 import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import FormulaControl
+import PlayerHero
+import GameWorld
+import ChConfig
+import ChEquip
 
 import time
 
+class LineupHero():
+    ## 阵容战斗武将,注意:同一个武将在不同阵容中可能属性不一样
+    
+    def __init__(self):
+        self.Clear()
+        return
+    
+    def Clear(self):
+        self.itemIndex = 0
+        self.heroID = 0
+        self.posNum = 0
+        self.heroBatAttrDict = {} # 武将的最终战斗属性字典, {attrID:value, ...}
+        self.heroSkillIDList = [] # 武将拥有的技能ID列表 [skillID, ...]
+        self.fightPower = 0 # 武将最终战力
+        return
+    
+class Lineup():
+    ## 阵容
+    
+    def __init__(self, playerID, lineupID):
+        self.playerID = playerID
+        self.lineupID = lineupID
+        self.olPlayer = None
+        self.shapeType = 0
+        self.heroItemDict = {} # 阵容武将背包索引信息  {itemIndex:posNum, ...}
+        self.__refreshState = 0 # 刷属性标记, 0-不需要刷新了,1-需要刷新
+        
+        self.__freeLineupHeroObjs = [] # 释放的空闲对象[LineupHero, ...]
+        self.lineupHeroDict = {} # 阵容武将 {posNum:LineupHero, ...}
+        self.fightPower = 0 # 阵容总战力
+        return
+    
+    def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False):
+        '''变更阵容时更新
+        @param heroItemDict: 武将背包索引信息  {itemIndex:posNum, ...}
+        @param shapeType: 阵型
+        @param refreshForce: 是否强制刷属性
+        '''
+        self.shapeType = shapeType
+        self.heroItemDict = heroItemDict
+        GameWorld.DebugLog("更新阵容: lineupID=%s,%s" % (self.lineupID, heroItemDict), self.playerID)
+        self.RefreshLineupAttr(refreshForce)
+        return
+    
+    def FreeLineupHero(self):
+        ## 释放阵容武将对象,重新计算
+        for freeObj in self.lineupHeroDict.values():
+            if freeObj not in self.__freeLineupHeroObjs:
+                self.__freeLineupHeroObjs.append(freeObj)
+        self.lineupHeroDict = {}
+        self.fightPower = 0
+        return
+    
+    def GetLineupHero(self, posNum):
+        lineupHero = None
+        if posNum in self.lineupHeroDict:
+            lineupHero = self.lineupHeroDict[posNum]
+        elif self.__freeLineupHeroObjs:
+            lineupHero = self.__freeLineupHeroObjs.pop(0)
+            lineupHero.Clear()
+            self.lineupHeroDict[posNum] = lineupHero
+        else:
+            lineupHero = LineupHero()
+            self.lineupHeroDict[posNum] = lineupHero
+        return lineupHero
+    
+    def GetLineupHeroByID(self, heroID):
+        for posNum in self.lineupHeroDict.keys():
+            lineup = self.GetLineupHero(posNum)
+            if lineup.heroID == heroID:
+                return lineup
+        return
+    
+    def GetLineupInfo(self):
+        ## 获取阵容信息,即要用到该阵容了,如战斗或者保存缓存信息等
+        self.DoRefreshLineupAttr() # 取阵容时先检查
+        return
+    
+    def SetNeedRefreshState(self):
+        ## 设置需要刷属性
+        self.__refreshState = 1
+        return
+    
+    def RefreshLineupAttr(self, refreshForce=False):
+        self.__refreshState = 1 # 标记要刷新
+        if refreshForce:
+            self.DoRefreshLineupAttr()
+        return
+    
+    def DoRefreshLineupAttr(self):
+        if not self.__refreshState:
+            return False
+        doRefreshLineupAttr(self.olPlayer.curPlayer, self.olPlayer, self)
+        self.__refreshState = 0
+        return True
+    
+    def CheckHeroItemUpdate(self, itemIndex):
+        if itemIndex not in self.heroItemDict:
+            return
+        self.RefreshLineupAttr()
+        return True
+    
 class OnlinePlayer():
-    ## 准在线玩家临时数据
+    ## 玩家在线临时数据,主要时数据的缓存,逻辑可不在类中处理,方便重读脚本时测试
     
     def __init__(self, playerID):
         self.playerID = playerID
+        self.curPlayer = None
+        
+        # 属性、阵容
+        self.calcAttrDict = {} # 非武将功能点属性统计 {calcIndex:{attrID:value, ...}, ...}
+        self.lineupDict = {} # 上阵阵容 {lineupID:Lineup, ...}
+        
+        # 主线战斗
         self.mainFight = TurnAttack.MainFight(playerID)
-        return
-    
-    def OnPlayerLogin(self, curPlayer):
-        self.mainFight.playerLogin(curPlayer)
-        return
-    
-    def OnPlayerOffline(self, curPlayer):
-        self.mainFight.playerOffline(curPlayer)
         return
     
     def OnClear(self):
         self.mainFight.clear()
         return
+    
+    def SetPlayer(self, curPlayer):
+        self.curPlayer = curPlayer
+        self.mainFight.turnFight.curPlayer = curPlayer
+        return
+    
+    def IsRealOnline(self):
+        ## 是否真的在线
+        return self.curPlayer != None
+    
+    def GetLineup(self, lineupID):
+        lineup = None
+        if lineupID in self.lineupDict:
+            lineup = self.lineupDict[lineupID]
+        else:
+            lineup = Lineup(self.playerID, lineupID)
+            self.lineupDict[lineupID] = lineup
+        lineup.olPlayer = self
+        return lineup
+    
+    def GetCalcAttr(self, calcIndex): return self.calcAttrDict.get(calcIndex, {})
+    def SetCalcAttr(self, calcIndex, attrDict):
+        ## 设置某个功能点计算的属性
+        self.calcAttrDict[calcIndex] = attrDict
+        return
+    
+    def ReCalcAllAttr(self):
+        ## 重置所有功能点计算的属性,一般登录的时候调用一次即可,其他单功能刷新的话一般使用 RefreshRoleAttr
+        curPlayer = self.curPlayer
+        GameWorld.DebugLog("ReCalcAllAttr...", self.playerID)
+        
+        self.calcAttrDict = {}
+        self.lineupDict = {}
+        
+        doCalcAllAttr(curPlayer)
+        doReloadLineup(curPlayer, self)
+        
+        self.RefreshRoleAttr()
+        return
+    
+    def RefreshRoleAttr(self, refreshForce=False, isAllLineup=False):
+        '''刷新主公属性,影响主公属性的功能点属性变化时统一调用此函数
+        @param refreshForce: 是否强制立马刷新
+        @param isAllLineup: 是否只同步刷所有阵容属性,如果设置False则默认仅刷主阵容属性
+        '''
+        GameWorld.DebugLog("请求刷属性: refreshForce=%s" % (refreshForce), self.playerID)
+        # 主公属性刷新时,所有阵容都要同步刷新
+        for lineup in self.lineupDict.values():
+            lineup.SetNeedRefreshState()
+            
+        if refreshForce:
+            self.DoRefreshRoleAttr(isAllLineup)
+        return
+    
+    def DoRefreshRoleAttr(self, isAllLineup=False):
+        '''执行刷属性,默认额外刷主阵容,其他阵容可以用到的时候再刷新
+        @param isAllLineup: 是否刷所有阵容,如果设置False则默认仅刷主阵容属性
+        @return: 是否有刷属性,0-无;1-有
+        '''
+        
+        isRefresh = False
+        # 同步执行阵容属性刷新
+        for lineupID, lineup in self.lineupDict.items():
+            if not isAllLineup and lineupID != ShareDefine.Lineup_Main:
+                continue
+            if lineup.DoRefreshLineupAttr():
+                isRefresh = True
+                
+        return isRefresh
+    
+    def OnHeroItemUpate(self, itemIndexList):
+        '''武将物品养成更新
+        @param itemIndexList: 变化武将物品所在武将背包格子索引列表
+        @param return: 影响的阵容ID列表
+        '''
+        effLineupIDList = []
+        
+        for lineupID, lineup in self.lineupDict.items():
+            for itemIndex in itemIndexList:
+                if lineup.CheckHeroItemUpdate(itemIndex):
+                    if lineupID not in effLineupIDList:
+                        effLineupIDList.append(lineupID)
+                        
+        GameWorld.DebugLog("武将物品养成更新索引: %s, 影响阵容:%s" % (itemIndexList, effLineupIDList), self.playerID)
+        return effLineupIDList
     
 class OnlineMgr():
     ## 准在线玩家管理
@@ -57,7 +251,7 @@
         else:
             olPlayer = OnlinePlayer(playerID)
             self.__onlinePlayerDict[playerID] = olPlayer
-            
+        olPlayer.SetPlayer(curPlayer)
         return olPlayer
     
     def SetPlayerOnline(self, curPlayer):
@@ -69,7 +263,7 @@
             self.__onlinePlayerDict[playerID] = olPlayer
         else:
             olPlayer = self.__onlinePlayerDict[playerID]
-        olPlayer.OnPlayerLogin(curPlayer)
+        olPlayer.SetPlayer(curPlayer)
         return
     
     def SetPlayerOffline(self, curPlayer):
@@ -78,7 +272,7 @@
         if playerID not in self.__onlinePlayerDict:
             return
         olPlayer = self.__onlinePlayerDict[playerID]
-        olPlayer.OnPlayerOffline(curPlayer)
+        olPlayer.SetPlayer(None)
         self.__offlinePlayerTimeDict[playerID] = int(time.time())
         return
     
@@ -104,15 +298,412 @@
         mgr = OnlineMgr()
         PyGameData.g_onlineMgr = mgr
     return mgr
-    
+
+def GetOnlinePlayer(curPlayer): return GetOnlineMgr().GetOnlinePlayer(curPlayer)
+
 def OnPlayerLogin(curPlayer):
+    ## 需登录逻辑最早调用
     GetOnlineMgr().SetPlayerOnline(curPlayer)
     return
 
 def OnPlayerLogoff(curPlayer):
+    ## 需下线逻辑最后调用
     GetOnlineMgr().SetPlayerOffline(curPlayer)
     return
 
 def OnMinute():
     GetOnlineMgr().ProcessOffline()
     return
+
+def CalcRoleBase(curPlayer):
+    playerID = curPlayer.GetID()
+    playerLV = curPlayer.GetLV()
+    lvIpyData = PlayerControl.GetPlayerLVIpyData(playerLV)
+    
+    lvAttrDict = {}
+    if lvIpyData:
+        lvAttrDict = {ChConfig.AttrID_Atk:lvIpyData.GetAtk(),
+                    ChConfig.AttrID_Def:lvIpyData.GetDef(),
+                    ChConfig.AttrID_MaxHP:lvIpyData.GetMaxHP()
+                    }
+        
+    GameWorld.DebugLog("角色等级属性: %s" % lvAttrDict, playerID)
+    GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_LV, lvAttrDict)
+    return
+
+def doReloadLineup(curPlayer, olPlayer):
+    ## 重新载入阵容    
+    loadLineupIDList = ShareDefine.LineupList
+    lineupDict = {} # {阵容ID:{itemIndex:posNum, ...}, ...}
+    lineShapeTypeDict = {} # {阵容ID:阵型, ...}
+    syncItemDict = {} # 需要同步的异常物品 {index:heroItem, ...}
+    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+    for index in range(curPack.GetCount()):
+        heroItem = curPack.GetAt(index)
+        if not heroItem or heroItem.IsEmpty():
+            continue
+        lineupCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)
+        if not lineupCount:
+            continue
+        delValueList = []
+        for lpIndex in range(lineupCount)[::-1]:
+            lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+            lineupID, shapeType, posNum = PlayerHero.GetLineupValue(lineupValue)
+            if lineupID not in loadLineupIDList:
+                continue
+            # 任意取一个武将保存的阵型即可,同阵容的武将理论上保存的阵型是一样的
+            if lineupID not in lineShapeTypeDict:
+                lineShapeTypeDict[lineupID] = shapeType
+            if lineupID not in lineupDict:
+                lineupDict[lineupID] = {}
+            heroItemDict = lineupDict[lineupID]
+            
+            # 超出人数限制或位置异常
+            if len(heroItemDict) >= ShareDefine.LineupObjMax or posNum in heroItemDict.values() or index in heroItemDict:
+                delValueList.append(lineupValue)
+            else:
+                heroItemDict[index] = posNum
+                
+        if delValueList:
+            item = heroItem.GetItem()
+            for lineupValue in delValueList:
+                item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
+            syncItemDict[index] = heroItem
+            
+    for syncItem in syncItemDict.values():
+        syncItem.Sync_Item()
+        
+    GameWorld.DebugLog("重载阵容: %s" % lineupDict, curPlayer.GetPlayerID())
+    for lineupID, heroItemDict in lineupDict.items():
+        lineup = olPlayer.GetLineup(lineupID)
+        
+        # 获取其他绑定该阵容的功能,如红颜、灵兽等
+        
+        shapeType = lineShapeTypeDict.get(lineupID, 0)
+        lineup.UpdLineup(heroItemDict, shapeType)
+        
+    return
+
+def doCalcAllAttr(curPlayer):
+    ## 计算所有属性
+    GameWorld.DebugLog("doCalcAllAttr...", curPlayer.GetPlayerID())
+    CalcRoleBase(curPlayer)
+    ChEquip.CalcRoleEquipAttr(curPlayer)
+    PlayerHero.CalcHeroAddAttr(curPlayer)
+    return
+
+def doRefreshLineupAttr(curPlayer, olPlayer, lineup):
+    ''' 刷新某个阵容属性
+        基础属性-面板显示:
+        1.全体基础固定值=所有穿戴装备【装备基础固定值】+【法宝基础固定值】+【红颜基础固定值】+【其它模块的固定值】
+        2.全体百分比加成=图鉴加成+【灵兽模块】+【红颜模块】+【其它模块】+所有上阵卡牌【初始加成+升级加成+突破加成+吞噬加成】
+        3.卡牌继承比例=卡牌品质及职业继承比例不同
+        4.卡牌自身培养加成=【羁绊加成%+突破词条加成%+天赋加成%】
+        最终面板生命=【E全体基础固定值】*【1+E全体百分比加成】*【卡牌自身继承比例+ 卡牌自身培养%加成】+【卡牌自身固定值】
+
+        战斗属性/战斗抗性/特殊属性-面板显示:
+        1.全体战斗属性值=所有穿戴装备【装备战斗属性值】+【法宝战斗属性值】+【红颜战斗属性值】+【其它模块的战斗属性】
+        2.卡牌继承比例=默认100%
+        3.卡牌自身培养战斗属性=【卡牌初始战斗属性+突破词条战斗属性+天赋战斗属性+觉醒战斗属性】+【法则洗炼】+【秘能装备】+【其它模块】
+        最终面板战斗属性=【E全体战斗属性值】*【卡牌继承比例】+【卡牌自身培养战斗属性】
+    '''
+    playerID = curPlayer.GetPlayerID()
+    lineupID = lineup.lineupID
+    
+    GameWorld.DebugLog("刷新阵容属性: lineupID=%s" % lineupID, playerID)
+    GameWorld.DebugLog("    itemIndex-posNum : %s" % lineup.heroItemDict, playerID)
+    
+    lineup.FreeLineupHero()
+    
+    # 因为同阵容的武将ID不能重复,所以字典key可以用武将ID
+    countryHeroInfo = {} # 国家武将统计 {country:[heroID, ...], ...}
+    fetterHeroInfo = {} # 阵容羁绊武将统计信息 {fetterID:[heroID, ...], ...}
+    heroSelfAttrInfo = {} # 武将自身属性 {heroID:{attrID:value, ...}, ...}
+    heroStarTalentInfo = {} # 武将星级天赋属性 {heroID:{attrID:value, ...}, ...}
+    heroBreakAttrInfo = {} # 武将突破潜能属性 {heroID:{attrID:value, ...}, ...}
+    heroAwakeTalentInfo = {} # 武将觉醒天赋属性 {heroID:{attrID:value, ...}, ...}
+    
+    # 上阵卡牌【初始加成+升级加成+突破加成+吞噬加成】
+    InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer = 0, 0, 0, 0
+    
+    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+    for itemIndex, posNum in lineup.heroItemDict.items():
+        if itemIndex < 0 or itemIndex >= curPack.GetCount():
+            continue
+        heroItem = curPack.GetAt(itemIndex)
+        if not heroItem or heroItem.IsEmpty():
+            continue
+        heroID = heroItem.GetItemTypeID()
+        heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+        if not heroIpyData:
+            continue
+        quality = heroIpyData.GetQuality()
+        qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+        if not qualityIpyData:
+            continue
+        
+        heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+        star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+        breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+        awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
+        
+        InitAddPer += qualityIpyData.GetInitAddPer()
+        LVAddPer += qualityIpyData.GetLVAddPer() * heroLV
+        BreakLVAddPer += qualityIpyData.GetBreakLVAddPer() * breakLV
+        StarAddPer += qualityIpyData.GetStarAddPer() * star
+        
+        lineupHero = lineup.GetLineupHero(posNum)
+        #if False:
+        #    lineupHero = LineupHero()
+        lineupHero.itemIndex = itemIndex
+        lineupHero.posNum = posNum
+        lineupHero.heroID = heroID
+        lineupHero.heroBatAttrDict = {}
+        lineupHero.heroSkillIDList = []
+        lineupHero.fightPower = 0
+        
+        normalSkillID = heroIpyData.GetNormalSkillID()
+        angerSkillID = heroIpyData.GetAngerSkillID()
+        lineupHero.heroSkillIDList.extend([normalSkillID, angerSkillID])
+        
+        # 自身属性
+        selfAttrDict = {}
+        selfAttrDict.update({ChConfig.AttrID_AtkInheritPer:heroIpyData.GetAtkInheritPer(),
+                             ChConfig.AttrID_DefInheritPer:heroIpyData.GetDefInheritPer(),
+                             ChConfig.AttrID_HPInheritPer:heroIpyData.GetHPInheritPer(),
+                             })
+        for k, v in heroIpyData.GetBatAttrDict().items():
+            selfAttrDict[int(k)] = v
+        heroSelfAttrInfo[heroID] = selfAttrDict
+        
+        # 星级天赋
+        starTalentAttrDict = {}
+        idCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentID)
+        lvCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDLV)
+        for aIndex in range(min(idCount, lvCount)):
+            talentID = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentID, aIndex)
+            talentLV = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentIDLV, aIndex)
+            stIpyData = IpyGameDataPY.GetIpyGameData("HeroTalent", talentID)
+            if not stIpyData:
+                continue
+            attrID = stIpyData.GetAttrID()
+            attrValue = stIpyData.GetAttrValue() * talentLV
+            starTalentAttrDict[attrID] = starTalentAttrDict.get(attrID, 0) + attrValue
+        heroStarTalentInfo[heroID] = starTalentAttrDict
+        
+        # 突破潜能
+        breakAttrDict = {}
+        awakeIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroBreak", heroID)
+        if awakeIpyDataList:
+            for breakIpyData in awakeIpyDataList:
+                if breakIpyData.GetBreakLV() > breakLV:
+                    break
+                attrIDList = breakIpyData.GetAttrIDList()
+                attrValueList = breakIpyData.GetAttrValueList()
+                for aIndex in range(min(len(attrIDList), len(attrValueList))):
+                    attrID = attrIDList[aIndex]
+                    attrValue = attrValueList[aIndex]
+                    breakAttrDict[attrID] = breakAttrDict.get(attrID, 0) + attrValue
+                skillID = breakIpyData.GetSkillID()
+                if skillID:
+                    lineupHero.heroSkillIDList.append(skillID)
+        heroBreakAttrInfo[heroID] = breakAttrDict
+        
+        # 觉醒天赋
+        awakeTalentAttrDict = {}
+        awakeIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroAwake", heroID)
+        if awakeIpyDataList:
+            for awakeIpyData in awakeIpyDataList:
+                if awakeIpyData.GetAwakeLV() > awakeLV:
+                    break
+                attrIDList = awakeIpyData.GetAttrIDList()
+                attrValueList = awakeIpyData.GetAttrValueList()
+                for aIndex in range(min(len(attrIDList), len(attrValueList))):
+                    attrID = attrIDList[aIndex]
+                    attrValue = attrValueList[aIndex]
+                    awakeTalentAttrDict[attrID] = awakeTalentAttrDict.get(attrID, 0) + attrValue
+                skillID = awakeIpyData.GetSkillID()
+                if skillID:
+                    lineupHero.heroSkillIDList.append(skillID)
+        heroAwakeTalentInfo[heroID] = awakeTalentAttrDict
+        
+        # 羁绊统计
+        for fetterID in heroIpyData.GetFetterIDList():
+            if fetterID not in fetterHeroInfo:
+                fetterHeroInfo[fetterID] = []
+            fetterHeroIDList = fetterHeroInfo[fetterID]
+            if heroID not in fetterHeroIDList:
+                fetterHeroIDList.append(heroID)
+                
+        # 国家统计
+        country = heroIpyData.GetCountry()
+        if country not in countryHeroInfo:
+            countryHeroInfo[country] = []
+        countryHeroIDList = countryHeroInfo[country]
+        if heroID not in countryHeroIDList:
+            countryHeroIDList.append(heroID)
+    
+    # 羁绊属性 - 仅羁绊相关武将有效
+    heroFetterAttrInfo = {} # 武将羁绊属性 {heroID:{attrID:value, ...}, ...}
+    for fetterID, fetterHeroIDList in fetterHeroInfo.items():
+        fetterIpyData = IpyGameDataPY.GetIpyGameData("HeroFetter", fetterID)
+        if not fetterIpyData:
+            continue
+        needHeroIDList = fetterIpyData.GetHeroIDList()
+        canFetter = True
+        for needHeroID in needHeroIDList:
+            if needHeroID not in fetterHeroIDList:
+                canFetter = False
+                break
+        if not canFetter:
+            continue
+        attrIDList = fetterIpyData.GetAttrIDList()
+        attrValueList = fetterIpyData.GetAttrValueList()
+        for aIndex in range(min(len(attrIDList), len(attrValueList))):
+            attrID = attrIDList[aIndex]
+            attrValue = attrValueList[aIndex]
+            for heroID in needHeroIDList:
+                if heroID not in heroFetterAttrInfo:
+                    heroFetterAttrInfo[heroID] = {}
+                heroFetterAttrDict = heroFetterAttrInfo[heroID]
+                heroFetterAttrDict[attrID] = heroFetterAttrDict.get(attrID, 0) + attrValue
+                
+    # 阵容属性 - 阵容所有武将有效
+    lineupHaloAttrInfo = {} # 阵容光环属性 {attrID:value, ...}
+    for country, countryHeroIDList in countryHeroInfo.items():
+        haloIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroLineupHalo", country)
+        if not haloIpyDataList:
+            continue
+        
+        attrIDList, attrValueList = [], []
+        countryHeroCnt = len(countryHeroIDList)
+        for haloIpyData in haloIpyDataList:
+            needHeroCount = haloIpyData.GetNeedHeroCount()
+            if countryHeroCnt < needHeroCount:
+                break
+            attrIDList = haloIpyData.GetAttrIDList()
+            attrValueList = haloIpyData.GetAttrValueList()
+        # 每个国家最多仅生效一条属性,不同国家属性可叠加
+        for aIndex in range(min(len(attrIDList), len(attrValueList))):
+            attrID = attrIDList[aIndex]
+            attrValue = attrValueList[aIndex]
+            lineupHaloAttrInfo[attrID] = lineupHaloAttrInfo.get(attrID, 0) + attrValue
+            
+    # --------------------------- 上面统计好了,下面计算武将最终属性 --------------------------------
+    baseAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 1)
+    otherAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 2)
+    fightPowerFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 3)
+    
+    lvAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_LV)
+    equipAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_MainEquip)
+    bookAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_HeroBook)
+
+    GameWorld.DebugLog("    国家武将统计=%s" % countryHeroInfo, playerID)
+    GameWorld.DebugLog("    羁绊武将统计=%s" % fetterHeroInfo, playerID)
+    GameWorld.DebugLog("    武将自身属性=%s" % heroSelfAttrInfo, playerID)
+    GameWorld.DebugLog("    武将吞噬属性=%s" % heroStarTalentInfo, playerID)
+    GameWorld.DebugLog("    武将突破潜能=%s" % heroBreakAttrInfo, playerID)
+    GameWorld.DebugLog("    武将觉醒天赋=%s" % heroAwakeTalentInfo, playerID)
+    GameWorld.DebugLog("    武将羁绊属性=%s" % heroFetterAttrInfo, playerID)
+    GameWorld.DebugLog("    阵容光环属性=%s" % lineupHaloAttrInfo, playerID)
+    GameWorld.DebugLog("    阵容上阵加成=InitAddPer=%s,LVAddPer=%s,BreakLVAddPer=%s,StarAddPer=%s" % (InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer), playerID)
+    
+    GameWorld.DebugLog("    主公等级属性=%s" % lvAttrDict, playerID)
+    GameWorld.DebugLog("    主公装备属性=%s" % equipAttrDict, playerID)
+    GameWorld.DebugLog("    主公图鉴属性=%s" % bookAttrDict, playerID)
+    
+    lineupFightPower = 0 # 阵容总战力
+    InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer = InitAddPer / 10000.0, LVAddPer / 10000.0, BreakLVAddPer / 10000.0, StarAddPer / 10000.0
+    for heroID, selfAttrDict in heroSelfAttrInfo.items():
+        lineupHero = lineup.GetLineupHeroByID(heroID)
+        if not lineupHero:
+            continue
+        lineupHero.heroBatAttrDict = {}
+        lineupHero.fightPower = 0
+        
+        starTalentAttrDict = heroStarTalentInfo.get(heroID, {})
+        breakAttrDict = heroBreakAttrInfo.get(heroID, {})
+        awakeTalentAttrDict = heroAwakeTalentInfo.get(heroID, {})
+        fetterAttrDict = heroFetterAttrInfo.get(heroID, {})
+        
+        logAttrDict = {}
+        fightPowerParamDict = {}
+        for attrID in ChConfig.CalcBattleAttrIDList:
+            attrPerID = ChConfig.AttrPerDict.get(attrID, 0) # 对应百分比提升的属性ID
+            
+            lvValue = lvAttrDict.get(attrID, 0)
+            equipValue = equipAttrDict.get(attrID, 0)
+            bookValue = bookAttrDict.get(attrID, 0)
+            bookPer = bookAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+            
+            lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = 0, 0, 0, 0
+            if attrID in ChConfig.BaseAttrIDList:
+                lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer
+                
+            heroSelfValue, heroSelfPer = selfAttrDict.get(attrID, 0), 0 # 武将自身基值
+            inheritPer = 1 # 继承比例,默认100%
+            if attrID in ChConfig.AttrInheritPerDict:
+                attrInheritPerID = ChConfig.AttrInheritPerDict[attrID] # 继承ID
+                inheritPer = selfAttrDict.get(attrInheritPerID, 100) # 继承比例从武将自身属性中取
+                inheritPer /= 100.0
+                
+            lineupHaloValue, lineupHaloPer = lineupHaloAttrInfo.get(attrID, 0), 0
+            fetterValue, fetterPer = fetterAttrDict.get(attrID, 0), 0
+            starTalentValue, starTalentPer = starTalentAttrDict.get(attrID, 0), 0
+            breakLVValue, breakLVPer = breakAttrDict.get(attrID, 0), 0
+            awakeTalentValue, awakeTalentPer = awakeTalentAttrDict.get(attrID, 0), 0
+            if attrPerID:
+                heroSelfPer = selfAttrDict.get(attrPerID, 0) / 10000.0
+                lineupHaloPer = lineupHaloAttrInfo.get(attrPerID, 0) / 10000.0
+                fetterPer = fetterAttrDict.get(attrPerID, 0) / 10000.0
+                starTalentPer = starTalentAttrDict.get(attrPerID, 0) / 10000.0
+                breakLVPer = breakAttrDict.get(attrPerID, 0) / 10000.0
+                awakeTalentPer = awakeTalentAttrDict.get(attrPerID, 0) / 10000.0
+                
+            # 计算
+            attrParamDict = {"lvValue":lvValue, "equipValue":equipValue, "bookValue":bookValue, "bookPer":bookPer, 
+                             "lineupInitAddPer":lineupInitAddPer, "lineupLVAddPer":lineupLVAddPer, "lineupBreakLVAddPer":lineupBreakLVAddPer, "lineupStarAddPer":lineupStarAddPer,
+                             "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer,
+                             "lineupHaloValue":lineupHaloValue, "lineupHaloPer":lineupHaloPer, "fetterValue":fetterValue, "fetterPer":fetterPer,
+                             "starTalentValue":starTalentValue, "starTalentPer":starTalentPer, "breakLVValue":breakLVValue, "breakLVPer":breakLVPer,
+                             "awakeTalentValue":awakeTalentValue, "awakeTalentPer":awakeTalentPer,
+                             }
+            
+            if attrID in ChConfig.BaseAttrIDList:
+                attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict)
+            else:
+                attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict)
+            #GameWorld.DebugLog("    attrID=%s,attrValue=%s,attrParamDict=%s" % (attrID, attrValue, attrParamDict))
+            lineupHero.heroBatAttrDict[attrID] = attrValue
+            
+            attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
+            attrName = attrIpyData.GetParameter() if attrIpyData else "%s" % attrID
+            fightPowerParamDict[attrName] = attrValue
+            if attrValue:
+                logAttrDict["%s-%s" % (attrID, attrName)] = attrValue
+                
+        # 计算战力
+        fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
+        skillFightPower = 0
+        for skillID in lineupHero.heroSkillIDList:
+            skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+            if not skillData:
+                continue
+            skillFightPower += skillData.GetFightPower()
+        fightPowerTotal = fightPower + skillFightPower
+        lineupHero.fightPower = fightPowerTotal
+        lineupFightPower += fightPowerTotal
+        
+        GameWorld.DebugLog("    武将最终战力: heroID=%s,fightPower=%s(%s+%s),%s,skillIDList=%s" 
+                           % (heroID, fightPowerTotal, fightPower, skillFightPower, logAttrDict, lineupHero.heroSkillIDList), playerID)
+        
+    lineup.fightPower = lineupFightPower
+    GameWorld.DebugLog("    阵容最终战力: lineupID=%s,lineupFightPower=%s" % (lineupID, lineupFightPower), playerID)
+    
+    # 更新排行榜
+    if lineupID != ShareDefine.Lineup_Main:
+        return
+    
+    PlayerControl.SetFightPower(curPlayer, lineupFightPower)
+    
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py
deleted file mode 100644
index f29edf3..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-
-##@package PlayerRequest
-# 请求逻辑处理
-#
-# @author Mark
-# @date 2010-4-28
-# @version 1.0
-#
-# 修改时间 修改人 修改内容
-# VER = "2010-05-12 18:30" zhengyang 添加注释
-#
-# 模块详细说明
-#---------------------------------------------------------------------
-import GameWorld
-import ChConfig
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-## 判断玩家是否有相同的请求 
-#  @param curPlayer 当前玩家
-#  @param curTagPlayer 目标玩家
-#  @param requestType 请求类型
-#  @return True or False
-#  @remarks 函数详细说明.
-def CheckRequest(curPlayer,curTagPlayer,requestType):
-    if curTagPlayer == None:
-        return False
-    
-    curTagPlayerID = curTagPlayer.GetPlayerID()
-    #玩家请求次数
-    requestCount = curPlayer.GetRequestCount()
-    for i in range(0,requestCount):
-        requestID = curPlayer.GetRequestID(i)
-        type = curPlayer.GetRequestType(i)
-        if requestID == curTagPlayerID and type == requestType:
-            #GameWorld.Log("curTagID = %d请求检查通过"%requestID)
-            return True
-        
-    GameWorld.Log("双方请求ID不同或组队类型不正确" , curPlayer.GetPlayerID(), curTagPlayerID)
-    #GameWorld.Log("请求失败")
-    return False
-
-## 刷新玩家请求
-#  @param curPlayer 当前玩家
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def ProcessPlayerRequest(curPlayer, tick):
-    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_PlayerRequest) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_PlayerRequest]:
-        #没有到刷新间隔
-        return
-    
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_PlayerRequest, tick)
-    
-    #单位时间刷新一次
-    #玩家请求次数
-    requestCount = curPlayer.GetRequestCount()
-    curIndex = 0
-    while curIndex < requestCount:  
-        #获得请求开始时间
-        requestTick = curPlayer.GetRequestTick(curIndex)
-        if requestTick == 0:
-            curIndex += 1
-            continue
-        
-        #获得请求最大时间
-        requestMaxTick = curPlayer.GetRequestMaxTick(curIndex)
-        if (tick - requestTick) < requestMaxTick:
-            curIndex += 1
-            continue
-        
-        curPlayer.DeleteRequest(curIndex)
-        #GameWorld.Log("请求响应 = %s超时,状态已清除"%(curIndex) , curPlayer.GetPlayerID())
-        requestCount = curPlayer.GetRequestCount()
-    
-    return
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 582a8cf..5cc7d0c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -18,7 +18,6 @@
 import SkillShell
 import BuffSkill
 import PlayerControl
-import PlayerRequest
 import ChEquip
 import SkillCommon
 import FBLogic
@@ -58,6 +57,7 @@
 import PlayerActivity
 import PlayerBackup
 import MirrorAttack
+import PlayerOnline
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -671,25 +671,6 @@
     return
 
 #---------------------------------------------------------------------
-##刷新时效道具
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值, 是否重刷玩家属性
-# @remarks 刷新以单位时间(分钟)消耗耐久的物品
-def ProcessRefreshTimeItem(curPlayer, tick):
-    reFlash = False
-    
-    #2分钟遍历一次,时效道具时间到不消失,
-    if tick - curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EquipTime) \
-        < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem]:
-        return reFlash
-    #耐久减少值/分钟
-    reFlash = ProcessTimeEquip(curPlayer, tick)
-    
-    return reFlash
-
-
-#---------------------------------------------------------------------
 ##刷新玩家Buff
 # @param curPlayer 玩家实例
 # @param tick 时间戳
@@ -875,68 +856,6 @@
     #    curPlayer.SetXP(nextXPValue)
     #===========================================================================
 
-
-#---------------------------------------------------------------------
-##玩家自动回复生命和魔法
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return None
-# @remarks 玩家自动回复生命和魔法
-def ProcessHPMPState(curPlayer, tick):
-    
-#    #仅打坐状态回复
-#    if curPlayer.GetPlayerAction() != IPY_GameWorld.paSit:
-#        return
-    
-    if not curPlayer.IsAlive():
-        #死亡状态不处理
-        return
-    
-    #检测是否到CD时间, 暂定5秒回一次
-    if tick - curPlayer.GetRestoreTime() < ChConfig.Def_HPRestoreInterval:
-        return
-    #设置当前回复开始时间
-    curPlayer.SetRestoreTime(tick)
-
-    #没有恢复能力
-    if curPlayer.GetHPRestorePer() == 0:
-        return
-    
-    #满血不处理
-    if GameObj.GetHP(curPlayer) == GameObj.GetMaxHP(curPlayer):
-        return
-    
-    #战斗中返回
-    #if curPlayer.IsBattleState():
-    #    return False
-    
-#    #战斗对峙返回
-#    if curPlayer.GetIsConfronting():
-#        return False
-    
-    #---回复玩家血量---
-    playerHP = GameObj.GetHP(curPlayer)
-    #playerMP = curPlayer.GetMP()
-    playerMaxHP = GameObj.GetMaxHP(curPlayer)
-    #playerMaxMP = curPlayer.GetMaxMP()
-    
-    # 目前回复频率暂定5秒回复一次,回复数值是1秒的值,所以此处乘5
-    addHPValue = curPlayer.GetHPRestorePer() * 5
-    
-    #addMPValue = GameWorld.GetFloatUpper(playerMaxMP * mpPer + mpValue)
-   
-    #GameWorld.Log('addHPValue = %s, addMPValue = %s'%(addHPValue, addMPValue))
-    
-    #当前不是满血, 就回血
-    if playerHP != playerMaxHP:
-        SkillCommon.SkillAddHP(curPlayer, 0, addHPValue)
-        #GameObj.SetHP(curPlayer, min(playerHP + addHPValue, playerMaxHP))
-    
-    #当前不是满魔, 就回魔
-    #if playerMP != playerMaxMP:
-    #    curPlayer.SetMP(min(playerMP + addMPValue, playerMaxMP))
-    return
-
 #---------------------------------------------------------------------
 ##刷新组队状态
 # @param curPlayer 玩家实例
@@ -1071,81 +990,6 @@
     return
 
 #---------------------------------------------------------------------
-##处理耐久计算方式为:现实时间刷新方式的物品
-# @param curPlayer 玩家实例
-# @return 布尔值
-# @remarks 处理耐久计算方式为:现实时间刷新方式的物品
-def ProcessTimeEquip(curPlayer, tick):
-    itemManager = curPlayer.GetItemManager()
-    hasItemClear = False
-    
-    classLV = 0 # 只处理非境界装备的时效物品
-    curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
-    for equipPlace in ChConfig.EquipPlace_LingQi:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
-        if not ipyData:
-            continue
-        index = ipyData.GetGridIndex()
-        curItem = curPack.GetAt(index)
-        
-        #异常物品
-        if not ItemCommon.CheckItemCanUse(curItem):
-            continue
-        
-        if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
-                                                 ChConfig.Def_EquipReduceType_Time]:
-            continue
-        
-        #处理现实时间物品逻辑
-        if __DoLogic_ProcessTimeEquip(curPlayer, curItem, index):
-            hasItemClear = True
-            
-    if hasItemClear:
-        #装备重刷属性
-        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
-        
-    # 进行更新时效道具刷新时间
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
-    return hasItemClear
-
-#---------------------------------------------------------------------
-## 装备有效时间到了需要脱下,有效时间物品改成不消失,但是无使用效果 可出售和续费
-def __DoLogic_ProcessTimeEquip(curPlayer, curItem, equipIndex):
-    #验证物品是否过期
-    curItemExpireTime = curItem.GetUserAttr(ShareDefine.Def_IudetExpireTime)
-    if not curItemExpireTime:
-        curItemExpireTime = curItem.GetExpireTime()
-    curItemPastTime = time.time() - curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)
-    if curItemExpireTime - curItemPastTime > 0:
-        return
-    
-    spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)
-    if spaceIndex == -1:
-        # 没有空位,玩家主动取下,计算属性时无效化
-        # 过期属性时效需刷属性
-        return True
-    
-    result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipIndex, spaceIndex)
-    if not result:
-        # 过期属性时效需刷属性
-        return True
-    equipID = result[0]
-    equipPlace = result[1]
-    if equipPlace in [ShareDefine.retGuard1, ShareDefine.retGuard2]:
-        PlayerControl.NotifyCode(curPlayer, 'Guardian_Timeout', [equipID, spaceIndex])
-    elif equipPlace == ShareDefine.retWing:
-        PlayerControl.NotifyCode(curPlayer, 'WingTiyan_Timeout')
-        
-    #tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})
-    #tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)
-    #if tryItemID and ItemControler.GetAppointItemRealID(tryItemID) == equipID:
-    #    #首充试用武器过期并且还没首充的提示()
-    #    if not curPlayer.GetChangeCoinPointTotal():
-    #        PlayerControl.NotifyCode(curPlayer, 'FirstGoldWPOver')
-    #        PlayerGoldGift.FirstGoldTryItemOutTime(curPlayer)
-            
-    return True
-#---------------------------------------------------------------------
 ##全局定时器调用, 刷新玩家状态
 # @param curPlayer 玩家实例
 # @param tick 时间戳
@@ -1166,112 +1010,56 @@
     PlayerBackup.CheckPlayerBackup(curPlayer)
     
     #玩家镜像战斗AI
-    MirrorAttack.ProcessPlayerMirrorAI(curPlayer, tick)
+    #MirrorAttack.ProcessPlayerMirrorAI(curPlayer, tick)
     
     #被GM封状态响应
     ProcessGMOperLogic(curPlayer, tick)
     
     #刷新玩家战斗状态
-    ProcessPlayerBattle(curPlayer, tick)
+    #ProcessPlayerBattle(curPlayer, tick)
     
     #战斗状态判断
-    CheckBattleState(curPlayer, tick)
+    #CheckBattleState(curPlayer, tick)
     
     #切换玩家呆滞状态
-    ProcessPlayerNeedProcess(curPlayer , tick)
+    #ProcessPlayerNeedProcess(curPlayer , tick)
     
     #放在刷buff前
-    ProcessPassiveSkill(curPlayer, tick)
-    
-    #---影响属性刷新---------------------------------------------
-    #是否刷新列表
-    reFlashList = []
-    
-    #刷新玩家Buff
-    reFlashBuff = ProcessRefreshBuffState(curPlayer, tick)
-    
-    #刷新玩家场景buff效果
-    ProcessPlayerBuffEffect(curPlayer, tick)
-    
-    #时效道具刷新
-    reFlash = ProcessRefreshTimeItem(curPlayer, tick)
-    reFlashList.append(reFlash)
-#    GameWorld.Log('刷新以单位时间(分钟)消耗耐久的物品 %s'%(time.clock() - curTime))
-#    curTime = time.clock()
+    #ProcessPassiveSkill(curPlayer, tick)
     
     ProcessPlayerMinute(curPlayer, tick)
     
-    #vip体验
-    reFlash = PlayerVip.CheckVIPExperience(curPlayer, tick)
-    reFlashList.append(reFlash)
-    
-    #===影响人物行为刷新, 支持控制类BUFF可刷属性======================================
-    # 控制类有属性刷新交给属性处理
-    attrBuffResult, actBuffResult = ProcessRefreshActionBuffState(curPlayer, tick)
-    
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    if actBuffResult:
-        playerControl.RefreshPlayerActionState()
-    
-    #===行为刷新结束==============================================================    
-    
-    #重刷属性
-    # 1. 循环内需要刷属性
-    # 2. buff消失刷属性
-    # 3. 玩家其他行为触发缓存刷属性
-    # 4. 玩家因buff缓存刷属性
-    if True in reFlashList :
-        #Buff影响到属性刷新
-        playerControl.RefreshPlayerAttrState()
-    
-    
-    #此处才是真正的刷新人物属性值,需刷属性逻辑应在此行前调用
-    if not playerControl.RefreshPlayerAttrStateEx():
-        if reFlashBuff or attrBuffResult:
-            playerControl.RefreshPlayerAttrByBuff()
-        
-        # 只刷BUFF情况
-        playerControl.RefreshPlayerAttrByBuffEx()   
-        
+    PlayerOnline.GetOnlinePlayer(curPlayer).DoRefreshRoleAttr()
     #---到这边应该属性刷新结束,下面的逻辑有的需要用到属性值--------------------
     
     
     #当前玩家的状态
-    curPlayerAction = curPlayer.GetPlayerAction()
+    #curPlayerAction = curPlayer.GetPlayerAction()
     
 #    curTime = time.clock()
     #刷新玩家的准备进度条
-    if curPlayerAction == IPY_GameWorld.paPreparing :
-        ProcessPlayerPrepareState(curPlayer, tick)
+    #if curPlayerAction == IPY_GameWorld.paPreparing :
+    #    ProcessPlayerPrepareState(curPlayer, tick)
     
-    #刷新玩家请求
-    PlayerRequest.ProcessPlayerRequest(curPlayer, tick)
-    
-    #回血回魔状态处理
-    ProcessHPMPState(curPlayer, tick)
-    
-    PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
+    #PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
     
     #刷新组队状态
     #ProcessTeamState(curPlayer, tick)
 
     #玩家在线时间刷新
-    ProcessPlayer_OnlineTime(curPlayer, tick)
+    #ProcessPlayer_OnlineTime(curPlayer, tick)
     
     #反外挂验证
-    PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
+    #PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
     
     #副本相关时间处理
-    PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
+    #PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
     
     #挂机收益
-    PlayerGuaji.ProcessGuaji(curPlayer)
-    
-    #PK/boss状态
-    ProcessPKBossState(curPlayer, tick)
+    #PlayerGuaji.ProcessGuaji(curPlayer)
     
     #恶意攻击时间处理
-    AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
+    #AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
     #成就
     PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
     #限时抢购
@@ -1281,15 +1069,15 @@
     #神秘商店刷新
     FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
     #活跃放置
-    PlayerActivity.ProcessActivityPlace(curPlayer)
+    #PlayerActivity.ProcessActivityPlace(curPlayer)
     #自定义场景
-    FBLogic.OnCustomSceneProcess(curPlayer, tick)
+    #FBLogic.OnCustomSceneProcess(curPlayer, tick)
     #炼器
-    PlayerActLianqi.OnProcess(curPlayer)
+    #PlayerActLianqi.OnProcess(curPlayer)
     #仙盟攻城战
-    PlayerActFamilyGCZ.OnProcess(curPlayer)
+    #PlayerActFamilyGCZ.OnProcess(curPlayer)
     #跨服数据同步,放最后
-    CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
+    #CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
     return
 
 def ProcessPlayerMinute(curPlayer, tick):
@@ -1423,66 +1211,6 @@
     PlayerGMOper.DoGMOperLogic(curPlayer, tick)
     return
 
-
-#===============================================================================
-# 警告:1.此功能应该会导致更加频繁处理战斗逻辑附带的刷新属性等逻辑
-# 需三思考虑,暂时关闭。
-# 
-# ## 计时器入口,战斗逻辑
-# # @param None
-# # @return None
-# def PlayerProcessFight(timerType, tick):
-#    if not GameWorld.GetGameWorld().GetInitOK() :
-#        return
-#    
-#    #GameWorld.DebugLog("---!!PlayerProcessFight %s"%([timerType, tick]))
-#    
-#    for i in xrange(GameWorld.GetGameWorld().GetGameWorldCount()):
-#        #设置当前的世界
-#        GameWorld.GetGameWorld().SetCurGameWorldIndex(i)
-# 
-#        playerManager = GameWorld.GetPlayerManager()
-#        playerCount = playerManager.GetActivePlayerCount()
-#        for i in range(0, playerCount):
-#            curPlayer = playerManager.GetActivePlayerByIndex(i)
-#            if curPlayer.IsEmpty():
-#                continue
-# 
-#            if not curPlayer.GetInitOK():
-#                #GameWorld.Log("玩家还未初始化成功, 不处理")
-#                continue
-#            
-#            if curPlayer.IsMoving():
-#                continue
-#            
-#            ProcessFight(curPlayer, tick)
-# 
-#    GameWorld.GetGameWorld().SetCurGameWorldIndex(-1)
-#        
-#    return
-#===============================================================================
-
-def ProcessPKBossState(curPlayer, tick):
-    ## 处理PK及boss状态
-    validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000
-    
-    pkStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick)
-    if pkStateTick and (tick - pkStateTick) >= validTime:
-        curPlayer.SetDict(ChConfig.Def_PDict_PKStateTick, 0)
-        PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, 0)
-        #GameWorld.DebugLog("退出PK状态!", curPlayer.GetPlayerID())
-        curPlayer.SetDict("StartProDTick", tick) # 开始恢复时间点
-        
-    bossStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick)
-    if bossStateTick and (tick - bossStateTick) >= validTime:
-        curPlayer.SetDict(ChConfig.Def_PDict_BossStateTick, 0)
-        PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, 0)
-        #GameWorld.DebugLog("退出Boss状态!", curPlayer.GetPlayerID())
-    
-    # 脱离PK战斗 X秒后按比例恢复
-    ProcessProDef(curPlayer, tick)
-    return
-
 def Sync_PKBossState(curPlayer):
     psState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) else 0
     PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, psState)
@@ -1490,40 +1218,6 @@
     bossState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick) else 0
     PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, bossState)
     return
-
-# 脱离PK战斗 X秒后按比例恢复
-def ProcessProDef(curPlayer, tick):
-    if PlayerControl.GetProDefHPPer(curPlayer) == 0:
-        # 没转化值
-        return
-    
-    # 脱离PK战斗 X秒后按比例恢复
-    if IsInPKState(curPlayer):
-        return
-    
-    if tick - curPlayer.GetDictByKey("StartProDTick") < IpyGameDataPY.GetFuncCfg("MagicExterior", 2) * 1000:
-        return
-    
-    if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
-        return
-    
-    # 每秒恢复
-    if tick - curPlayer.GetDictByKey("restoreProDTick") < 1000:
-        return
-    
-    curProDef = PlayerControl.GetProDef(curPlayer)
-    maxProDef = PlayerControl.GetMaxProDef(curPlayer)
-    
-    if curProDef == maxProDef:
-        return
-    
-    #非PK状态恢复护盾
-    PlayerControl.SetProDef(curPlayer, min(curProDef + \
-                            IpyGameDataPY.GetFuncCfg("MagicExterior", 3)*maxProDef/ChConfig.Def_MaxRateValue, maxProDef))
-    curPlayer.SetDict("restoreProDTick", tick)
-
-    return
-
 
 def IsInPKState(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) > 0
 def SetPKStateTick(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py
deleted file mode 100644
index 6d48083..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package PlayerWorldAverageLv.py
-#
-# @todo:世界等级
-#
-# @author zhangxi
-# @date 2012-07-09
-# @version 1.2
-# @note:
-# @change: "2013-03-13 17:00" wdb 删除封包
-# @change: "2014-08-18 12:30" hxp 恢复世界等级
-#
-#------------------------------------------------------------------------------ 
-#"""Version = 2014-08-18 12:30"""
-#------------------------------------------------------------------------------ 
-import GameWorld
-import ShareDefine
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerControl
-import GameFuncComm
-import IpyGameDataPY
-
-import math
-#-----------------------------------------------------------------------------
-
-
-def OnLogin(curPlayer):
-    ## 登录世界等级处理
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
-        return
-    
-    __CheckAverageLvBuff(curPlayer)
-    # 同步
-    Sync_WorldAverageLv(curPlayer)
-    return
-
-def UpdatePlayerWorldAverageLv(curPlayer):
-    ## 世界等级变更更新
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
-        return
-    
-    # 世界等级,经验倍率,能否领奖
-    Sync_WorldAverageLv(curPlayer)
-    # 经验倍率改变
-    PlayerControl.Sync_ExpRateChange(curPlayer)
-    
-    __CheckAverageLvBuff(curPlayer)
-    return
-
-def __CheckAverageLvBuff(curPlayer):
-    ## 检查世界等级buff
-    #===========================================================================
-    # tick = GameWorld.GetGameWorld().GetTick()
-    # worldLv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
-    # expRate = GetWorldAverageLvExpRate(curPlayer)
-    # GameWorld.DebugLog("UpdatePlayerWorldAverageLv...worldLv=%s,expRate=%s" % (worldLv, expRate))
-    # if expRate > 0:
-    #    GameWorld.DebugLog("    AddBuffNoRefreshState...")
-    #    addSkill = GameWorld.GetGameData().GetSkillBySkillID(ChConfig.Def_SkillID_WorldAverageLvBuff)
-    #    buffType = SkillCommon.GetBuffType(addSkill)
-    #    BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, addSkill, tick, 0, curPlayer)
-    # else:
-    #    GameWorld.DebugLog("    DelBuffBySkillID...")
-    #    BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_WorldAverageLvBuff, tick, False)
-    #===========================================================================
-    return
-
-
-def GetWorldAverageLvExpRate(curPlayer):
-    ## 获取世界等级的经验倍率
-    worldLv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
-    if not worldLv:
-        return 0
-    
-    #等级限制
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
-        return 0
-    playerLv = curPlayer.GetLV() #参数
-    worldExpRateFormula = IpyGameDataPY.GetFuncCompileCfg('WorldLvExpRate')
-    expRate = eval(worldExpRateFormula)
-    
-    expRate = int(expRate)
-    return expRate
-
-
-def Sync_WorldAverageLv(curPlayer):
-    ## 通知世界等级
-    gameWorld = GameWorld.GetGameWorld()
-    worldAverageLv = ChPyNetSendPack.tagPyMCWorldAverageLv()
-    worldAverageLv.Clear()
-    worldAverageLv.WorldLv = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
-    worldAverageLv.ExpRate = GetWorldAverageLvExpRate(curPlayer)
-    NetPackCommon.SendFakePack(curPlayer, worldAverageLv)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py
deleted file mode 100644
index 8f00e1b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_FamilyArrestAward
-# @todo: 领取帮会悬赏任务奖励
-#
-# @author: jiang
-# @date 2012-02-14
-# @version 1.2
-#
-# @note: 
-# @change: "2014-10-31 13:30" hxp 恢复战盟悬赏任务;增加给物品奖励
-# @change: "2015-02-11 16:40" ljd 领奖记录流向
-#---------------------------------------------------------------------
-"""Version = 2015-02-11 16:40"""
-#---------------------------------------------------------------------
-import IPY_GameWorld
-import GameWorld
-import ChConfig
-import ReadChConfig
-import ItemCommon
-import PlayerControl
-import ItemControler
-import ShareDefine
-import ChPlayer
-import DataRecordPack
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 领取帮会悬赏任务奖励
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ''
-
-
-#---------------------------------------------------------------------
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    #更改查询状态
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 0)
-    
-    result, arrestID = eval(funResult)
-    if not result:
-        #该悬赏任务还没有完成
-        GameWorld.DebugLog("该悬赏任务还没有完成")
-        return
-    
-    state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
-    bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID)
-    
-    if state & pow(2, bit):
-        #已经领取过
-        GameWorld.DebugLog("该悬赏任务奖励已经领取过")
-        return
-    
-    arrestAwardDict = ReadChConfig.GetEvalChConfig("FamilyArrestAward")
-    awardItemInfo = arrestAwardDict.get(arrestID)
-    if awardItemInfo == None:
-        #找不到悬赏奖励的威望
-        GameWorld.ErrLog("PlayerFamilyArrest arrestID = %s no award"%arrestID)
-        return
-    
-    needSpace, awardItemList = awardItemInfo
-    # 检查背包
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    
-    # 给物品
-    for itemID, itemCnt, isBind in awardItemList:
-        recordData = {'FamilyArrest':state, 'ArrestID':arrestID}
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem], event=["FamilyArrestAward", False, recordData])
-
-    #设置奖励领取成功
-    state = state|pow(2, bit)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyArrestAwardState, state)
-
-    #奖励领取情况
-    ChPlayer.Sync_FamilyArrestAwardReceiveState(curPlayer)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index dc9a2e1..69d97b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -50,7 +50,6 @@
 g_refreshAttrBillboardFunc = [] # 刷属性后需要触发的同步排行榜函数列表
 g_playerFuncAttrDict = {} # 玩家功能点属性 {playerID:{funcIndex:属性列表, ...}, ...}
 g_playerEquipPartAttrDict = {} # 玩家装备位养成属性 {playerID:{阶:[强化属性列表, 宝石属性列表, 洗练属性列表], ...}, ...}
-g_equipChangeClassLVInfo = {} # 玩家装备变更的装备阶信息 {playerID:[classLV, ...], ...}
 
 g_filterEquipDict = {} # 按装备条件过滤的装备ID,不分职业 {"classLV_color_star":{(itemJob,itemPlace):itemID, ...}, ...}
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index dc071ed..95da8ae 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1057,10 +1057,10 @@
 CDBPlayerRefresh_DamagePVE,             # 对NPC的伤害固定值
 CDBPlayerRefresh_PetDamPer,             # 灵宠增加伤害
 CDBPlayerRefresh_IgnoreDefRateReduce,   # 无视防御抗性
-CDBPlayerRefresh_DamChanceDef,          # 概率抵御, 玩家每次被攻击有20%的几率减少伤害比率
+CDBPlayerRefresh_ParryRate,             # 概率抵御, 玩家每次被攻击有20%的几率减少伤害比率
 CDBPlayerRefresh_BleedDamage,           # 流血伤害 155
-CDBPlayerRefresh_FaintRate,             # 击晕概率
-CDBPlayerRefresh_FaintDefRate,          # 击晕概率抵抗
+CDBPlayerRefresh_StunRate,              # 击晕概率
+CDBPlayerRefresh_StunRateDef,           # 击晕概率抵抗
 CDBPlayerRefresh_FinalHurt,             # 最终输出伤害附加
 CDBPlayerRefresh_FinalHurtReduce,       # 最终输出伤害减少
 CDBPlayerRefresh_DamagePerPVP,          # PVP伤害增加 160
@@ -1077,7 +1077,7 @@
 CDBPlayerRefresh_RealmPoint,            # 境界修炼点
 CDBPlayerRefresh_Ysog,                  # 魔精
 CDBPlayerRefresh_FamilyActivity,        # 仙盟活跃令
-CDBPlayerRefresh_174,
+CDBPlayerRefresh_ParryRateDef,          # 抗格挡
 CDBPlayerRefresh_PKState,               # 战斗状态 175
 CDBPlayerRefresh_BossState,             # boss状态
 CDBPlayerRefresh_BaseAtkMin,            # 基础最小攻击
@@ -1092,7 +1092,7 @@
 CDBPlayerRefresh_TreasureScore,         # 寻宝积分
 CDBPlayerRefresh_Danjing,               # 丹精
 CDBPlayerRefresh_NPCHurtAddPer,         # 对怪物伤害加成
-CDBPlayerRefresh_FinalHurtPer,          # 最终输出伤害百分比
+CDBPlayerRefresh_FinalDamPer,           # 最终输出伤害百分比
 CDBPlayerRefresh_TalentPoint,           # 天赋点数 190
 CDBPlayerRefresh_DamagePVPReduce,       # PVP固定伤害减少
 CDBPlayerRefresh_GodWeaponLV_1,         # 神兵等级 - 类型1 192
@@ -1113,9 +1113,9 @@
 CDBPlayerRefresh_NormalHurtPer,         # 属性普通攻击加成:普通攻击附加的伤害百分比 207
 CDBPlayerRefresh_FabaoHurt,             # 属性法宝技能增伤:法宝技能攻击附加的固定值伤害 208
 CDBPlayerRefresh_FabaoHurtPer,          # 属性法宝技能加成:法宝技能攻击附加的伤害百分比 209
-CDBPlayerRefresh_SuperHitRateReduce,   # 暴击概率抗性 210
+CDBPlayerRefresh_SuperHitRateDef,       # 暴击概率抗性 210
 CDBPlayerRefresh_LuckyHitReduce,        # 会心伤害减免固定值 
-CDBPlayerRefresh_FinalHurtReducePer,   # 最终伤害减少百分比 
+CDBPlayerRefresh_FinalDamPerDef,   # 最终伤害减少百分比 
 CDBPlayerRefresh_YinjiTime,   # 每X秒减少印记时间,毫秒
 CDBPlayerRefresh_YinjiCnt,   # 当前印记数 214
 CDBPlayerRefresh_SkillAddPer1,   # 技能伤害增强1 215
@@ -1152,18 +1152,18 @@
 CDBPlayerRefresh_BTGMYuE, # BTGM余额  246
 CDBPlayerRefresh_SuccessScore, # 成就积分  247
 CDBPlayerRefresh_FamilyFlagWarPoint, # 成就积分  248
-CDBPlayerRefresh_ComboDefRate, # 抗连击概率 249
+CDBPlayerRefresh_ComboRateDef, # 抗连击概率 249
 CDBPlayerRefresh_AtkBackRate, # 反击概率 250
 CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 251
 CDBPlayerRefresh_SuckHPPer, # 吸血比率 252
-CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 253
+CDBPlayerRefresh_SuckHPPerDef, # 抗吸血比率 253
 CDBPlayerRefresh_Xiantao, # 仙桃  254
 CDBPlayerRefresh_CurePer, # 强化治疗 255
-CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
+CDBPlayerRefresh_CurePerDef, # 弱化治疗 256
 CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
 CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
-CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
-CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
+CDBPlayerRefresh_SuperDamPer, # 强化暴伤 259
+CDBPlayerRefresh_SuperDamPerDef, # 弱化暴伤 260
 CDBPlayerRefresh_Lingyu, # 灵玉 261
 CDBPlayerRefresh_BossTrial, # 凭证积分 262
 CDBPlayerRefresh_GatherSoul, # 聚魂精华 263
@@ -1176,7 +1176,19 @@
 CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
 CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
 CDBPlayerRefresh_HeroScore, # 招募积分 272
-) = range(146, 273)
+CDBPlayerRefresh_PhyDamPer, # 物理增伤 273
+CDBPlayerRefresh_PhyDamPerDef, # 物理减伤 274
+CDBPlayerRefresh_MagDamPer, # 法术增伤 275
+CDBPlayerRefresh_MagDamPerDef, # 法术减伤 276
+CDBPlayerRefresh_NormalSkillPer, # 普技增伤 277
+CDBPlayerRefresh_NormalSkillPerDef, # 普技减伤 278
+CDBPlayerRefresh_AngerSkillPer, # 怒技增伤 279
+CDBPlayerRefresh_AngerSkillPerDef, # 怒技减伤 280
+CDBPlayerRefresh_ShieldPer, # 强化护盾 281
+CDBPlayerRefresh_ShieldPerDef, # 弱化护盾 282
+CDBPlayerRefresh_DOTPer, # 持续增伤 283
+CDBPlayerRefresh_DOTPerDef, # 持续减伤 284
+) = range(146, 285)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index fb3c2e9..532527f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -15,298 +15,10 @@
 #------------------------------------------------------------------------------ 
 #"""Version = 2017-10-30 16:00"""
 #---------------------------------------------------------------------
-import GameWorld
-import PlayerControl
-import ChConfig
-import GameObj
-import IPY_PlayerDefine
-import ShareDefine
-
-
-#生物属性接口,顺序对应ChConfig.TYPE_Calc_AttrList
-#同个属性Get, Set 写在一起,方便维护 [Get, Set, 属性类型, 是否通知自身, 是否通知周围玩家]
-ObjProperty_AttrByIndex = [
-   [lambda curObj:PlayerControl.GetMetal(curObj), lambda curObj, value:PlayerControl.SetMetal(curObj, value), ShareDefine.CDBPlayerRefresh_Mater, 1, 0], # 金
-   [lambda curObj:PlayerControl.GetWood(curObj), lambda curObj, value:PlayerControl.SetWood(curObj, value), ShareDefine.CDBPlayerRefresh_Wood, 1, 0], # 木
-   [lambda curObj:PlayerControl.GetWater(curObj), lambda curObj, value:PlayerControl.SetWater(curObj, value), ShareDefine.CDBPlayerRefresh_Water, 1, 0], # 水
-   [lambda curObj:PlayerControl.GetFire(curObj), lambda curObj, value:PlayerControl.SetFire(curObj, value), ShareDefine.CDBPlayerRefresh_Fire, 1, 0], # 火
-   
-   [lambda curObj:GameObj.GetHP(curObj), lambda curObj, value:GameObj.SetHP(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_HP, 1, 1],  # 当前血量
-   [lambda curObj:curObj.GetMP(), lambda curObj, value:curObj.SetMP(value), IPY_PlayerDefine.CDBPlayerRefresh_MP, 0, 0],            # 当前魔量
-   [lambda curObj:GameObj.GetMaxHP(curObj), lambda curObj, value:GameObj.SetMaxHP(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_MaxHP, 1, 1],      # 最大血量
-   [lambda curObj:curObj.GetMaxMP(), lambda curObj, value:curObj.SetMaxMP(value), IPY_PlayerDefine.CDBPlayerRefresh_MaxMP, 0, 0],      # 最大魔量
-   [lambda curObj:curObj.GetMinAtk(), lambda curObj, value:curObj.SetMinAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_MINATK, 1, 0],    # 最小攻击力
-   [lambda curObj:curObj.GetMaxAtk(), lambda curObj, value:curObj.SetMaxAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_MAXATK, 1, 0],    # 最大攻击力
-   [lambda curObj:PlayerControl.GetEarth(curObj), lambda curObj, value:PlayerControl.SetEarth(curObj, value), ShareDefine.CDBPlayerRefresh_Earth, 1, 0], # 土
-   [lambda curObj:curObj.GetLuckValue(), lambda curObj, value:curObj.SetLuckValue(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckValue, 1, 0], # 气运
-   [lambda curObj:curObj.GetDef(), lambda curObj, value:curObj.SetDef(value), IPY_PlayerDefine.CDBPlayerRefresh_DEF, 1, 0],          # 防御力
-   [lambda curObj:curObj.GetHit(), lambda curObj, value:curObj.SetHit(value), IPY_PlayerDefine.CDBPlayerRefresh_HIT, 1, 0],          # 命中
-   [lambda curObj:curObj.GetMiss(), lambda curObj, value:curObj.SetMiss(value), IPY_PlayerDefine.CDBPlayerRefresh_Miss, 1, 0],        # 闪避
-   #[lambda curObj:curObj.GetMAtkMin(), lambda curObj, value:curObj.SetMAtkMin(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMin, 0, 0],  # 最小魔攻
-   #[lambda curObj:curObj.GetMAtkMax(), lambda curObj, value:curObj.SetMAtkMax(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMax, 0, 0],  # 最大魔攻
-   [lambda curObj:PlayerControl.GetSpeedNotBuff(curObj), lambda curObj, value:PlayerControl.SetSpeedNotBuff(curObj, value), 0, 0, 0],  # 移动速度
-   [lambda curObj:GameObj.GetAtkSpeed(curObj), lambda curObj, value:GameObj.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1],  # 攻击速度
-   
-   [lambda curObj:curObj.GetSuperHitRate(), lambda curObj, value:curObj.SetSuperHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 1, 0],     # 暴击概率
-   [lambda curObj:curObj.GetSuperHit(), lambda curObj, value:curObj.SetSuperHit(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHit, 1, 0],                 # 暴击伤害固定值
-   [lambda curObj:GameObj.GetSuperHitRateReduce(curObj), lambda curObj, value:GameObj.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
-   [lambda curObj:GameObj.GetSuperHitReduce(curObj), lambda curObj, value:GameObj.SetSuperHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitReduce, 1, 0],  # 暴击伤害抗性固定值
-   
-   [lambda curObj:curObj.GetGreatHitRate(), lambda curObj, value:curObj.SetGreatHitRate(value), 0, 0, 0],                                        # 卓越一击几率
-   [lambda curObj:curObj.GetGreatHitVal(), lambda curObj, value:curObj.SetGreatHitVal(value), 0, 0, 0],                                          # 卓越一击伤害倍率
-   [lambda curObj:PlayerControl.GetGreatHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetGreatHitRateReduce(curObj, value), 0, 0, 0],# 卓越一击概率抗性
-   [lambda curObj:PlayerControl.GetGreatHitReducePer(curObj), lambda curObj, value:PlayerControl.SetGreatHitReducePer(curObj, value), 0, 0, 0],  # 卓越一击伤害减免
-   
-   [lambda curObj:curObj.GetLuckyHitRate(), lambda curObj, value:curObj.SetLuckyHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckyHitRate, 1, 0],  # 会心一击几率
-   [lambda curObj:curObj.GetLuckyHitVal(), lambda curObj, value:curObj.SetLuckyHitVal(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckyHitVal, 1, 0],  # 会心一击伤害固定值
-   [lambda curObj:PlayerControl.GetLuckyHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetLuckyHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, 1, 0],# 会心一击概率抗性
-   [lambda curObj:PlayerControl.GetLuckyHitReduce(curObj), lambda curObj, value:PlayerControl.SetLuckyHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_LuckyHitReduce, 1, 0],  # 会心一击伤害减免固定值
-
-   [lambda curObj:curObj.GetIgnoreDefRate(), lambda curObj, value:curObj.SetIgnoreDefRate(value), IPY_PlayerDefine.CDBPlayerRefresh_IgnoreDefRate, 1, 0],   # 无视防御几率
-   [lambda curObj:PlayerControl.GetIgnoreDefRateReduce(curObj), lambda curObj, value:PlayerControl.SetIgnoreDefRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, 1, 0],  # 无视防御概率抗性
-   [lambda curObj:PlayerControl.GetIgnoreDefReducePer(curObj), lambda curObj, value:PlayerControl.SetIgnoreDefReducePer(curObj, value), 0, 0, 0],    # 无视防御伤害减免
-   
-   [lambda curObj:curObj.GetIceAtk(), lambda curObj, value:curObj.SetIceAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_ICEATK, 1, 0],            # 冰攻
-   [lambda curObj:curObj.GetFireAtk(), lambda curObj, value:curObj.SetFireAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_FIREATK, 1, 0],          # 火攻
-   [lambda curObj:curObj.GetPoisionAtk(), lambda curObj, value:curObj.SetPoisionAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_POISIONATK, 1, 0],    # 毒攻
-   [lambda curObj:curObj.GetThunderAtk(), lambda curObj, value:curObj.SetThunderAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_THUNDERATK, 1, 0],    # 雷攻
-   [lambda curObj:curObj.GetWindAtk(), lambda curObj, value:curObj.SetWindAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_WINDATK, 1, 0],          # 风攻
-   [lambda curObj:curObj.GetIceDef(), lambda curObj, value:curObj.SetIceDef(value), IPY_PlayerDefine.CDBPlayerRefresh_ICEDEF, 1, 0],            # 冰防
-   [lambda curObj:curObj.GetFireDef(), lambda curObj, value:curObj.SetFireDef(value), IPY_PlayerDefine.CDBPlayerRefresh_FIREDEF, 1, 0],          # 火防
-   [lambda curObj:curObj.GetPoisionDef(), lambda curObj, value:curObj.SetPoisionDef(value), IPY_PlayerDefine.CDBPlayerRefresh_POISIONDEF, 1, 0],    # 毒防
-   [lambda curObj:curObj.GetThunderDef(), lambda curObj, value:curObj.SetThunderDef(value), IPY_PlayerDefine.CDBPlayerRefresh_THUNDERDEF, 1, 0],    # 雷防
-   [lambda curObj:curObj.GetWindDef(), lambda curObj, value:curObj.SetWindDef(value), IPY_PlayerDefine.CDBPlayerRefresh_WINDDEF, 1, 0],          # 风防
-   
-   [lambda curObj:curObj.GetFightExpRate(), lambda curObj, value:curObj.SetFightExpRate(value), 0, 0, 0],                            # 杀怪经验倍率
-   [lambda curObj:curObj.GetGameEventExpRate(), lambda curObj, value:curObj.SetGameEventExpRate(value), 0, 0, 0],                    # 娱乐事件经验倍率
-   [lambda curObj:curObj.GetFightPetExpRate(), lambda curObj, value:curObj.SetFightPetExpRate(value), 0, 0, 0],                      # 宠物经验倍率
-   [lambda curObj:PlayerControl.GetDropEquipPer(curObj), lambda curObj, value:PlayerControl.SetDropEquipPer(curObj, value), 0, 0, 0],# 装备掉率
-   [lambda curObj:curObj.GetGoldFoundRate(), lambda curObj, value:curObj.SetGoldFoundRate(value), IPY_PlayerDefine.CDBPlayerRefresh_GoldFoundRate, 1, 0],                          # 掉落金钱值增加
-   [lambda curObj:PlayerControl.GetPetMinAtk(curObj), lambda curObj, value:PlayerControl.SetPetMinAtk(curObj, value), 0, 0, 0],      # 宠物最小攻击
-   [lambda curObj:PlayerControl.GetPetMaxAtk(curObj), lambda curObj, value:PlayerControl.SetPetMaxAtk(curObj, value), 0, 0, 0],      # 宠物最大攻击
-   [lambda curObj:GameObj.GetPetDamPer(curObj), lambda curObj, value:GameObj.SetPetDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetDamPer, 1, 0],      # 宠物伤害百分比提升
-   [lambda curObj:PlayerControl.GetPerLVAtk(curObj), lambda curObj, value:PlayerControl.SetPerLVAtk(curObj, value), 0, 0, 0],        # 每1级+%s攻击, 数值取万分率,支持小数算法
-   [lambda curObj:PlayerControl.GetPerLVMaxHP(curObj), lambda curObj, value:PlayerControl.SetPerLVMaxHP(curObj, value), 0, 0, 0],    # 每1级+%s生命, 数值为固定值
-   
-   [lambda curObj:PlayerControl.GetMaxProDef(curObj), lambda curObj, value:PlayerControl.SetMaxProDef(curObj, value), ShareDefine.CDBPlayerRefresh_MaxProDef, 1, 0],  # 最大防护值
-   [lambda curObj:PlayerControl.GetProDefHPPer(curObj), lambda curObj, value:PlayerControl.SetProDefHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefHPPer, 1, 0], # 生命上限换算为防护值的百分比
-   [lambda curObj:PlayerControl.GetProDefAbsorb(curObj), lambda curObj, value:PlayerControl.SetProDefAbsorb(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefAbsorb, 1, 0],            # 防护值吸收伤害比率
-   [lambda curObj:curObj.GetDamageBackRate(), lambda curObj, value:curObj.SetDamageBackRate(value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0],                                    # 反伤百分比
-   [lambda curObj:PlayerControl.GetDamChanceDef(curObj), lambda curObj, value:PlayerControl.SetDamChanceDef(curObj, value), ShareDefine.CDBPlayerRefresh_DamChanceDef, 1, 0],            # 20%的概率抵御伤害比率
-   [lambda curObj:PlayerControl.GetShieldMPCostRate(curObj), lambda curObj, value:PlayerControl.SetShieldMPCostRate(curObj, value), 0, 0, 0],    # 魔法盾伤害吸收蓝耗比率
-   [lambda curObj:GameObj.GetFaintRate(curObj), lambda curObj, value:GameObj.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0],                  # 触发击晕
-   [lambda curObj:GameObj.GetFaintDefRate(curObj), lambda curObj, value:GameObj.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0],            # 击晕抵抗
-   [lambda curObj:PlayerControl.GetAtkerFreezed(curObj), lambda curObj, value:PlayerControl.SetAtkerFreezed(curObj, value), 0, 0, 0],            # 触发定身
-   [lambda curObj:PlayerControl.GetAddAngry(curObj), lambda curObj, value:PlayerControl.SetAddAngry(curObj, value), 0, 0, 0],                    # 攻击增加额外仇恨
-   [lambda curObj:GameObj.GetComboRate(curObj), lambda curObj, value:GameObj.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0],                  # 连击几率
-   [lambda curObj:GameObj.GetComboDamPer(curObj), lambda curObj, value:GameObj.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0],              # 连击伤害
-
-   [lambda curObj:curObj.GetHPRestorePer(), lambda curObj, value:curObj.SetHPRestorePer(value), IPY_PlayerDefine.CDBPlayerRefresh_HPRestorePer, 1, 0],                                    # 自动回复生命
-   [lambda curObj:curObj.GetKillBackHP(), lambda curObj, value:curObj.SetKillBackHP(value), 0, 0, 0],                                        # 击杀回血
-   [lambda curObj:curObj.GetKillBackMP(), lambda curObj, value:curObj.SetKillBackMP(value), 0, 0, 0],                                        # 击杀回蓝
-   [lambda curObj:PlayerControl.GetAtkBackHPPer(curObj), lambda curObj, value:PlayerControl.SetAtkBackHPPer(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx2, 1, 0],        # 攻击回复血量固定值
-   [lambda curObj:PlayerControl.GetAtkBackMPPer(curObj), lambda curObj, value:PlayerControl.SetAtkBackMPPer(curObj, value), 0, 0, 0],        # 攻击回复蓝量比率
-   [lambda curObj:PlayerControl.GetAddBackHPPer(curObj), lambda curObj, value:PlayerControl.SetAddBackHPPer(curObj, value), 0, 0, 0],        # 暂无用
-   [lambda curObj:PlayerControl.GetReduceBackHPPer(curObj), lambda curObj, value:PlayerControl.SetReduceBackHPPer(curObj, value), 0, 0, 0],  # 暂无用
-   [lambda curObj:PlayerControl.GetXPRestorePer(curObj), lambda curObj, value:PlayerControl.SetXPRestorePer(curObj, value), 0, 0, 0],        # 自动恢复XP值比率
-   
-   [lambda curObj:PlayerControl.GetReduceSkillCDPer(curObj), lambda curObj, value:PlayerControl.SetReduceSkillCDPer(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx3, 1, 0],  # 减技能CD比例
-   [lambda curObj:curObj.GetSkillAtkRate(), lambda curObj, value:curObj.SetSkillAtkRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SkillAtkRate, 1, 0],                                        # 技能攻击比例加成
-   [lambda curObj:PlayerControl.GetSkillAtkRateReduce(curObj), lambda curObj, value:PlayerControl.SetSkillAtkRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, 1, 0],# 技能攻击比例减少
-   [lambda curObj:PlayerControl.GetDamagePVP(curObj), lambda curObj, value:PlayerControl.SetDamagePVP(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVP, 1, 0],     # PVP固定伤害
-   [lambda curObj:PlayerControl.GetDamagePVPReduce(curObj), lambda curObj, value:PlayerControl.SetDamagePVPReduce(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVPReduce, 1, 0],  # PVP固定减伤
-   [lambda curObj:PlayerControl.GetHurtPer(curObj), lambda curObj, value:PlayerControl.SetHurtPer(curObj, value), 0, 0, 0],                      # 受伤计算百分比
-   [lambda curObj:PlayerControl.GetBleedDamage(curObj), lambda curObj, value:PlayerControl.SetBleedDamage(curObj, value), ShareDefine.CDBPlayerRefresh_BleedDamage, 1, 0],              # 流血伤害
-   [lambda curObj:PlayerControl.GetFinalHurt(curObj), lambda curObj, value:PlayerControl.SetFinalHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurt, 1, 0],                  # 最终固定伤害增加
-   [lambda curObj:PlayerControl.GetFinalHurtReduce(curObj), lambda curObj, value:PlayerControl.SetFinalHurtReduce(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReduce, 1, 0],      # 最终固定伤害减少
-   [lambda curObj:PlayerControl.GetDamagePerPVP(curObj), lambda curObj, value:PlayerControl.SetDamagePerPVP(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePerPVP, 1, 0],            # 伤害输出计算百分比PVP
-   [lambda curObj:PlayerControl.GetDamagePerPVPReduce(curObj), lambda curObj, value:PlayerControl.SetDamagePerPVPReduce(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, 1, 0],# 伤害输出计算百分比PVP减少
-   [lambda curObj:PlayerControl.GetDamagePVE(curObj), lambda curObj, value:PlayerControl.SetDamagePVE(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVE, 1, 0],            # 伤害输出计算固定值PVE
-   [lambda curObj:PlayerControl.GetNPCHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetNPCHurtAddPer(curObj, value), ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, 1, 0],          # 对怪物伤害加成
-   [lambda curObj:PlayerControl.GetJobAHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobAHurtAddPer(curObj, value), 0, 0, 0],        # 目标战士伤害加成
-   [lambda curObj:PlayerControl.GetJobBHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobBHurtAddPer(curObj, value), 0, 0, 0],        # 目标法师伤害加成
-   [lambda curObj:PlayerControl.GetJobCHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobCHurtAddPer(curObj, value), 0, 0, 0],        # 目标弓手伤害加成
-   [lambda curObj:PlayerControl.GetNPCAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetNPCAtkReducePer(curObj, value), 0, 0, 0],      # NPC攻击伤害减免
-   [lambda curObj:PlayerControl.GetJobAAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobAAtkReducePer(curObj, value), 0, 0, 0],    # 战士攻击伤害减免
-   [lambda curObj:PlayerControl.GetJobBAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobBAtkReducePer(curObj, value), 0, 0, 0],    # 法师攻击伤害减免
-   [lambda curObj:PlayerControl.GetJobCAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobCAtkReducePer(curObj, value), 0, 0, 0],    # 弓手攻击伤害减免
-   
-   [lambda curObj:PlayerControl.GetCommMapExpRate(curObj), lambda curObj, value:PlayerControl.SetCommMapExpRate(curObj, value), 0, 0, 0],    # 常规地图经验倍率加成
-   [lambda curObj:GameObj.GetFinalHurtPer(curObj), lambda curObj, value:GameObj.SetFinalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtPer, 1, 0],        # 最终伤害百分比
-   [lambda curObj:PlayerControl.GetFuhaoHitRate(curObj), lambda curObj, value:PlayerControl.SetFuhaoHitRate(curObj, value), 0, 0, 0],        # 富豪一击概率
-   [lambda curObj:PlayerControl.GetBossIDHurt(curObj), lambda curObj, value:PlayerControl.SetBossIDHurt(curObj, value), 0, 0, 0],            # 对指定boss伤害加成固定值
-   [lambda curObj:PlayerControl.GetBossIDHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetBossIDHurtAddPer(curObj, value), 0, 0, 0],# 对指定boss伤害加成倍率
-   [lambda curObj:PlayerControl.GetDropEquipDoCount(curObj), lambda curObj, value:PlayerControl.SetDropEquipDoCount(curObj, value), 0, 0, 0],    # 装备掉落执行次数加成万分率
-   
-   [lambda curObj:PlayerControl.GetBaseAtkAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseAtkAddPer(curObj, value), 0, 0, 0],          # 基础攻击百分比
-   [lambda curObj:PlayerControl.GetBaseMaxHPAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseMaxHPAddPer(curObj, value), 0, 0, 0],      # 基础生命百分比
-   [lambda curObj:PlayerControl.GetBaseDefAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseDefAddPer(curObj, value), 0, 0, 0],          # 基础防御百分比
-   [lambda curObj:PlayerControl.GetBaseHitAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseHitAddPer(curObj, value), 0, 0, 0],          # 基础命中百分比
-   [lambda curObj:PlayerControl.GetBaseMissAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseMissAddPer(curObj, value), 0, 0, 0],        # 基础闪避百分比
-   [lambda curObj:PlayerControl.GetGodWeaponMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetGodWeaponMaxHPPer(curObj, value), 0, 0, 0],  # 神兵生命百分比
-   [lambda curObj:PlayerControl.GetGodWeaponAtkPer(curObj), lambda curObj, value:PlayerControl.SetGodWeaponAtkPer(curObj, value), 0, 0, 0],      # 神兵攻击百分比
-   [lambda curObj:PlayerControl.GetStoneMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetStoneMaxHPPer(curObj, value), 0, 0, 0],          # 宝石生命百分比
-   [lambda curObj:PlayerControl.GetStoneAtkPer(curObj), lambda curObj, value:PlayerControl.SetStoneAtkPer(curObj, value), 0, 0, 0],              # 宝石攻击百分比
-   [lambda curObj:PlayerControl.GetHPCureEnhance(curObj), lambda curObj, value:PlayerControl.SetHPCureEnhance(curObj, value), 0, 0, 0],          # 血瓶恢复效果增强
-   [lambda curObj:PlayerControl.GetOnlyFinalHurt(curObj), lambda curObj, value:PlayerControl.SetOnlyFinalHurt(curObj, value), 0, 0, 0],          # 额外输出伤害
-   [lambda curObj:PlayerControl.GetPVPAtkBackHP(curObj), lambda curObj, value:PlayerControl.SetPVPAtkBackHP(curObj, value), 0, 0, 0],          # PVP攻击回血
-   [lambda curObj:PlayerControl.GetHitSucessRate(curObj), lambda curObj, value:PlayerControl.SetHitSucessRate(curObj, value), 0, 0, 0],          # 命中成功率
-   [lambda curObj:PlayerControl.GetMissSucessRate(curObj), lambda curObj, value:PlayerControl.SetMissSucessRate(curObj, value), 0, 0, 0],          # 命中成功率
-   [lambda curObj:curObj.GetAtkInterval(), lambda curObj, value:curObj.SetAtkInterval(value), IPY_PlayerDefine.CDBPlayerRefresh_AtkInterval, 0, 0],          # NPC攻击频率
-   [lambda curObj:PlayerControl.GetFuncDef(curObj), lambda curObj, value:PlayerControl.SetFuncDef(curObj, value), ShareDefine.CDBPlayerRefresh_FuncDef, 1, 0], # 功能层防御
-   [lambda curObj:PlayerControl.GetCurePer(curObj), lambda curObj, value:PlayerControl.SetCurePer(curObj, value), 0, 0, 0],          # 治疗加成百分比 默认百分百
-   [lambda curObj:PlayerControl.GetBeHurtPer(curObj), lambda curObj, value:PlayerControl.SetBeHurtPer(curObj, value), 0, 0, 0],      # 加深受到伤害百分比
-   [lambda curObj:PlayerControl.GetHorseAtkPer(curObj), lambda curObj, value:PlayerControl.SetHorseAtkPer(curObj, value), 0, 0, 0],      # 坐骑攻击百分比
-   [lambda curObj:PlayerControl.GetStoneBasePer(curObj), lambda curObj, value:PlayerControl.SetStoneBasePer(curObj, value), 0, 0, 0],      # 宝石基础属性百分比
-   [lambda curObj:PlayerControl.GetRealmBasePer(curObj), lambda curObj, value:PlayerControl.SetRealmBasePer(curObj, value), 0, 0, 0],      # 境界基础属性百分比
-   [lambda curObj:PlayerControl.GetPetSkillAtkRate(curObj), lambda curObj, value:PlayerControl.SetPetSkillAtkRate(curObj, value), 0, 0, 0],      # 宠物技能伤害比例
-   [lambda curObj:PlayerControl.GetWingHPPer(curObj), lambda curObj, value:PlayerControl.SetWingHPPer(curObj, value), 0, 0, 0],      # 翅膀生命百分比
-   [lambda curObj:PlayerControl.GetSuiteBasePer(curObj), lambda curObj, value:PlayerControl.SetSuiteBasePer(curObj, value), 0, 0, 0],      # 套装基础属性百分比
-   [lambda curObj:PlayerControl.GetPlusBaseAtkPer(curObj), lambda curObj, value:PlayerControl.SetPlusBaseAtkPer(curObj, value), 0, 0, 0],      # 强化基础攻击百分比
-   [lambda curObj:PlayerControl.GetProDef(curObj), lambda curObj, value:PlayerControl.SetProDef(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_ExAttr4, 1, 0],  # 当前防护值
-   [lambda curObj:PlayerControl.GetNormalHurt(curObj), lambda curObj, value:PlayerControl.SetNormalHurt(curObj, value), ShareDefine.CDBPlayerRefresh_NormalHurt, 1, 0],  # 属性普通攻击增伤
-   [lambda curObj:PlayerControl.GetNormalHurtPer(curObj), lambda curObj, value:PlayerControl.SetNormalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_NormalHurtPer, 1, 0],  # 属性普通攻击加成
-   [lambda curObj:PlayerControl.GetFabaoHurt(curObj), lambda curObj, value:PlayerControl.SetFabaoHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurt, 1, 0],  # 属性法宝技能增伤
-   [lambda curObj:PlayerControl.GetFabaoHurtPer(curObj), lambda curObj, value:PlayerControl.SetFabaoHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurtPer, 1, 0],  # 属性法宝技能加成
-   [lambda curObj:GameObj.GetFinalHurtReducePer(curObj), lambda curObj, value:GameObj.SetFinalHurtReducePer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, 1, 0],      # 最终伤害减少百分比
-   [lambda curObj:PlayerControl.GetLostYinjiTime(curObj), lambda curObj, value:PlayerControl.SetLostYinjiTime(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 1, 0],    # 每X秒自动消失一个印记 毫秒
-   [lambda curObj:PlayerControl.GetTheFBSkillsCD(curObj), lambda curObj, value:PlayerControl.SetTheFBSkillsCD(curObj, value), 0, 0, 0],    # 减少指定技能组CD XX%
-   [lambda curObj:PlayerControl.GetBurnValue(curObj), lambda curObj, value:PlayerControl.SetBurnValue(curObj, value), 0, 0, 0],    # 灼烧固定伤害
-   [lambda curObj:PlayerControl.GetBurnTimePer(curObj), lambda curObj, value:PlayerControl.SetBurnTimePer(curObj, value), 0, 0, 0],    # 延长灼烧时间百分比
-   [lambda curObj:PlayerControl.GetSubSpeedPer(curObj), lambda curObj, value:PlayerControl.SetSubSpeedPer(curObj, value), 0, 0, 0],    # 减移动速度百分比
-   [lambda curObj:PlayerControl.GetSkillAddPer1(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer1(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer1, 1, 0],    # 技能伤害增强1
-   [lambda curObj:PlayerControl.GetSkillAddPer2(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer2(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer2, 1, 0],    # 技能伤害增强2
-   [lambda curObj:PlayerControl.GetSkillAddPer3(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer3(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer3, 1, 0],    # 技能伤害增强3
-   [lambda curObj:PlayerControl.GetSkillAddPer4(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer4(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer4, 1, 0],    # 技能伤害增强4
-   [lambda curObj:PlayerControl.GetSkillAddPer5(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer5(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer5, 1, 0],    # 技能伤害增强5
-   [lambda curObj:PlayerControl.GetSkillAddPer6(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer6(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer6, 1, 0],    # 技能伤害增强6
-   [lambda curObj:PlayerControl.GetSkillAddPer7(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer7(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer7, 1, 0],    # 技能伤害增强7
-   [lambda curObj:PlayerControl.GetSkillReducePer1(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer1(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer1, 1, 0],    # 受到技能伤害减少1
-   [lambda curObj:PlayerControl.GetSkillReducePer2(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer2(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer2, 1, 0],    # 受到技能伤害减少2
-   [lambda curObj:PlayerControl.GetSkillReducePer3(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer3(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer3, 1, 0],    # 受到技能伤害减少3
-   [lambda curObj:PlayerControl.GetSkillReducePer4(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer4(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer4, 1, 0],    # 受到技能伤害减少4
-   [lambda curObj:PlayerControl.GetSkillReducePer5(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer5(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer5, 1, 0],    # 受到技能伤害减少5
-   [lambda curObj:PlayerControl.GetSkillReducePer6(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer6(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer6, 1, 0],    # 受到技能伤害减少6
-   [lambda curObj:PlayerControl.GetSkillReducePer7(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer7(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer7, 1, 0],    # 受到技能伤害减少7
-   [lambda curObj:PlayerControl.GetZhuXianRate(curObj), lambda curObj, value:PlayerControl.SetZhuXianRate(curObj, value), 0, 0, 0],    # 诛仙一击: 概率直接减少BOSS当前10%血量
-   [lambda curObj:PlayerControl.GetZhuXianReducePer(curObj), lambda curObj, value:PlayerControl.SetZhuXianReducePer(curObj, value), 0, 0, 0],    # 诛仙护体: 受到BOSS伤害减免 万分率
-   [lambda curObj:PlayerControl.GetHorseMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetHorseMaxHPPer(curObj, value), 0, 0, 0],      # 坐骑生命加成
-   [lambda curObj:PlayerControl.GetPetAtkPer(curObj), lambda curObj, value:PlayerControl.SetPetAtkPer(curObj, value), 0, 0, 0],      # 灵宠攻击加成
-   [lambda curObj:PlayerControl.GetHorseTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetHorseTrainAttrPer(curObj, value), 0, 0, 0],      # 坐骑培养属性加成
-   [lambda curObj:PlayerControl.GetPetTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPetTrainAttrPer(curObj, value), 0, 0, 0],      # 灵宠培养属性加成
-   [lambda curObj:PlayerControl.GetGuardTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetGuardTrainAttrPer(curObj, value), 0, 0, 0],      # 守护培养属性加成
-   [lambda curObj:PlayerControl.GetWingTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetWingTrainAttrPer(curObj, value), 0, 0, 0],      # 翅膀培养属性加成
-   [lambda curObj:PlayerControl.GetPeerlessWeaponTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeaponTrainAttrPer(curObj, value), 0, 0, 0],      # 灭世培养属性加成
-   [lambda curObj:PlayerControl.GetPeerlessWeapon2TrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeapon2TrainAttrPer(curObj, value), 0, 0, 0],      # 弑神培养属性加成
-   [lambda curObj:PlayerControl.GetLianTiAttrPer(curObj), lambda curObj, value:PlayerControl.SetLianTiAttrPer(curObj, value), 0, 0, 0],      # 炼体属性属性加成
-   [lambda curObj:PlayerControl.GetAttr160(curObj), lambda curObj, value:PlayerControl.SetAttr160(curObj, value), 0, 0, 0],      # 160
-   [lambda curObj:PlayerControl.GetAffairSpeedPer(curObj), lambda curObj, value:PlayerControl.SetAffairSpeedPer(curObj, value), 0, 0, 0],      # 仙盟事务速度加成
-   [lambda curObj:PlayerControl.GetFamilyBossHurtPer(curObj), lambda curObj, value:PlayerControl.SetFamilyBossHurtPer(curObj, value), 0, 0, 0],      # 仙盟BOSS伤害加成
-   [lambda curObj:PlayerControl.GetFamilyWarHPPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarHPPer(curObj, value), 0, 0, 0],      # 仙盟联赛生命加成
-   [lambda curObj:PlayerControl.GetFamilyWarAtkPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarAtkPer(curObj, value), 0, 0, 0],      # 仙盟联赛攻击加成
-   [lambda curObj:PlayerControl.GetFamilySitExpPer(curObj), lambda curObj, value:PlayerControl.SetFamilySitExpPer(curObj, value), 0, 0, 0],      # 仙盟打坐经验加成
-   [lambda curObj:GameObj.GetComboDefRate(curObj), lambda curObj, value:GameObj.SetComboDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDefRate, 1, 0],    # 抗连击概率
-   [lambda curObj:GameObj.GetAtkBackRate(curObj), lambda curObj, value:GameObj.SetAtkBackRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackRate, 1, 0],    # 反击概率
-   [lambda curObj:GameObj.GetAtkBackDefRate(curObj), lambda curObj, value:GameObj.SetAtkBackDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackDefRate, 1, 0],    # 抗反击概率
-   [lambda curObj:GameObj.GetSuckHPPer(curObj), lambda curObj, value:GameObj.SetSuckHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPPer, 1, 0],    # 吸血比率
-   [lambda curObj:GameObj.GetSuckHPDefPer(curObj), lambda curObj, value:GameObj.SetSuckHPDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPDefPer, 1, 0],    # 抗吸血比率
-   [lambda curObj:GameObj.GetCureDefPer(curObj), lambda curObj, value:GameObj.SetCureDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_CureDefPer, 1, 0],          # 弱化对方治疗
-   [lambda curObj:GameObj.GetPetStrengthenPer(curObj), lambda curObj, value:GameObj.SetPetStrengthenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetStrengthenPer, 1, 0],          # 强化灵兽
-   [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0],          # 弱化灵兽
-   [lambda curObj:GameObj.GetSuperHitHurtPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, 1, 0],          # 强化暴伤
-   [lambda curObj:GameObj.GetSuperHitHurtDefPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, 1, 0],          # 弱化暴伤
-   [lambda curObj:PlayerControl.GetBossFinalHurtPer(curObj), lambda curObj, value:PlayerControl.SetBossFinalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, 1, 0],        # Boss最终伤害百分比
-   [lambda curObj:PlayerControl.GetFaQiMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFaQiMaxHPPer(curObj, value), 0, 0, 0],  # 法器生命百分比
-   [lambda curObj:PlayerControl.GetFaQiAtkPer(curObj), lambda curObj, value:PlayerControl.SetFaQiAtkPer(curObj, value), 0, 0, 0],  # 法器攻击百分比
-   [lambda curObj:PlayerControl.GetFaQiDefPer(curObj), lambda curObj, value:PlayerControl.SetFaQiDefPer(curObj, value), 0, 0, 0],  # 法器防御百分比
-   [lambda curObj:PlayerControl.GetHorseSkinMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinMaxHPPer(curObj, value), 0, 0, 0],  # 坐骑幻化生命加成
-   [lambda curObj:PlayerControl.GetHorseSkinAtkPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinAtkPer(curObj, value), 0, 0, 0],  # 坐骑幻化攻击加成
-   [lambda curObj:PlayerControl.GetHorseSkinDefPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinDefPer(curObj, value), 0, 0, 0],  # 坐骑幻化防御加成
-   [lambda curObj:PlayerControl.GetTitleMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetTitleMaxHPPer(curObj, value), 0, 0, 0],  # 称号生命加成
-   [lambda curObj:PlayerControl.GetTitleAtkPer(curObj), lambda curObj, value:PlayerControl.SetTitleAtkPer(curObj, value), 0, 0, 0],  # 称号攻击加成
-   [lambda curObj:PlayerControl.GetTitleDefPer(curObj), lambda curObj, value:PlayerControl.SetTitleDefPer(curObj, value), 0, 0, 0],  # 称号防御加成
-   [lambda curObj:PlayerControl.GetFaceMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFaceMaxHPPer(curObj, value), 0, 0, 0],  # 头像生命加成
-   [lambda curObj:PlayerControl.GetFaceAtkPer(curObj), lambda curObj, value:PlayerControl.SetFaceAtkPer(curObj, value), 0, 0, 0],  # 头像攻击加成
-   [lambda curObj:PlayerControl.GetFaceDefPer(curObj), lambda curObj, value:PlayerControl.SetFaceDefPer(curObj, value), 0, 0, 0],  # 头像防御加成
-   [lambda curObj:PlayerControl.GetFacePicMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFacePicMaxHPPer(curObj, value), 0, 0, 0],  # 头像框生命加成
-   [lambda curObj:PlayerControl.GetFacePicAtkPer(curObj), lambda curObj, value:PlayerControl.SetFacePicAtkPer(curObj, value), 0, 0, 0],  # 头像框攻击加成
-   [lambda curObj:PlayerControl.GetFacePicDefPer(curObj), lambda curObj, value:PlayerControl.SetFacePicDefPer(curObj, value), 0, 0, 0],  # 头像框防御加成
-]
 
 ## 通过索引获得属性值
-#  @param curObj 当前对象
-#  @param effIndex 属性索引
-#  @return 指定属性值
-def GetValueByEffIndex(curObj, effIndex):
-    if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
-        GameWorld.ErrLog("查找对象属性失败, Index = %s" % (effIndex))
-        return
-    
-    return ObjProperty_AttrByIndex[effIndex - 1][0](curObj)
-
-
-## 设置属性 
-#  @param curObj 当前对象
-#  @param effIndex 属性索引
-#  @param effectValue 值
-#  @return None
+def GetValueByEffIndex(curObj, effIndex): return 0
 def SetValueByEffIndex(curObj, effIndex, effectValue):
-    if effectValue < 0:
-        effectValue = 0
-        
-    if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
-        GameWorld.ErrLog("设置对象属性失败, Index = %s" % (effIndex))
-        return
-    
-    if effIndex not in ChConfig.TYPE_BIGVALUE_ATTR:
-        effectValue = min(effectValue, ChConfig.Def_UpperLimit_DWord)
-    return ObjProperty_AttrByIndex[effIndex - 1][1](curObj, effectValue)
-
-
-## 通过索引获得属性值和通知信息
-#  @param curObj 当前对象
-#  @param effIndex 属性索引
-#  @return 指定属性值
-def GetValueByEffIndexEx(curObj, effIndex):
-    if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
-        GameWorld.ErrLog("查找对象属性失败, Index = %s" % (effIndex))
-        return
-    
-    return ObjProperty_AttrByIndex[effIndex - 1][0](curObj), \
-            ObjProperty_AttrByIndex[effIndex - 1][2],\
-            ObjProperty_AttrByIndex[effIndex - 1][3],\
-            ObjProperty_AttrByIndex[effIndex - 1][4]
-
-# 缓存功能属性的刷新结果,用于BUFF属性单独刷新
-def CopyPlayerFuncAttr(curPlayer):
-    for i in xrange(len(ObjProperty_AttrByIndex)):
-        # Get
-        effIndex = i + 1
-        if effIndex in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
-            continue
-        value = ObjProperty_AttrByIndex[i][0](curPlayer)
-        if value == 0 and GetCopyFuncAttrValue(curPlayer, effIndex) == 0:
-            continue
-        SetCopyFuncAttrValue(curPlayer, effIndex, value)
-    return
-        
-# 恢复缓存功能属性的刷新结果,用于BUFF属性单独刷新
-def RestorePlayerFuncAttr(curPlayer):
-    for i in xrange(len(ObjProperty_AttrByIndex)):
-        effIndex = i + 1
-        if effIndex in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
-            continue
-        ObjProperty_AttrByIndex[i][1](curPlayer, GetCopyFuncAttrValue(curPlayer, effIndex))
-    return
-
-def GetCopyFuncAttrValue(curPlayer, effIndex):
-    value = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttr % effIndex)
-    valueEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttrEx % effIndex)
-    return valueEx * ShareDefine.Def_PerPointValue + value
-
-def SetCopyFuncAttrValue(curPlayer, effIndex, value):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttr % effIndex, value % ShareDefine.Def_PerPointValue)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttrEx % effIndex, value / ShareDefine.Def_PerPointValue)
     return
 
             
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 080a469..032cb06 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -521,38 +521,6 @@
         
     return summonNPCList, maxBornIndex
 
-## 获得持续性技能的总量(技能类型 -> 12,13) 
-#  @param curPlayer 当前玩家
-#  @param curSkill 当前技能
-#  @param skillPlus ,技能增益
-#  @return value
-#  @remarks 函数详细说明.
-def GetLastSkillMaxValue(curPlayer , curSkill , skillPlus=None):
-    #根据约定,总量一定是第0个效果
-    curEffect = curSkill.GetEffect(0)
-    index = curEffect.GetEffectValue(0)
-    skillPer = curEffect.GetEffectValue(1)
-    effect = curEffect.GetEffectValue(2)
-    maxValue = EffGetSet.GetValueByEffIndex(curPlayer, index)
-    #GameWorld.Log("持续伤害总值设置curSkill = %s,maxValue = %s skillPer = %s,effect = %s"%(curSkill.GetSkillName(),maxValue,skillPer,effect))
-    if maxValue == None:
-        GameWorld.Log("计算附加技能总量错误,skillID = %s,index = %s" % (curSkill.GetSkillID(), index) , curPlayer.GetPlayerID())
-        return effect
-    
-    #总值
-    value = 0
-    if skillPlus == None :
-        value = (maxValue * skillPer / ChConfig.Def_MaxRateValue) + effect
-        #GameWorld.Log("持续伤害总值设置 value = %s"%value)
-    else:
-        plus = 1 + skillPlus / float(ChConfig.Def_MaxRateValue) 
-        value = (maxValue * (skillPer * plus) / ChConfig.Def_MaxRateValue) + effect
-        #GameWorld.Log("持续伤害总值设置 value = %s 技能附加 = %s"%(value,plus))
-    
-    return int(value)
-   
-   
-
 ## 玩家召唤NPC(当前玩家,召唤技能,召唤兽ID,召唤兽属性列表, 召唤兽离自己的距离, 当前时间)
 #  @param curPlayer 当前玩家
 #  @param curSkill 召唤技能
@@ -648,21 +616,6 @@
     if curSkill:
         Calc_Summon_BaseEffectBySkillPer(curPlayer, summonNPC, curSkill)
         return
-    
-#    #同一个召唤兽有10个等级, 所以必须用GetFunctionType来决定召唤兽的类型
-#    summonID = summonNPC.GetFunctionType()
-#    
-#    summonList = None
-#    if ChConfig.Def_SummonProperty.has_key(summonID):
-#        summonList = ChConfig.Def_SummonProperty[summonID]
-#    
-#    #设置玩家被动技能对召唤兽属性的影响
-#    __PassiveSkill_AddSummonAttribute(curPlayer, summonNPC, summonID)
-#    
-#    if summonList != None:
-#        lvSummonNPC = summonNPC.GetLV()
-#        #设置召唤兽战斗信息
-#        __CalcSummonEffectValue(lvSummonNPC, summonNPC, summonList)    
     
     #计算基础总值
     Calc_Summon_BaseEffect(summonNPC)
@@ -910,67 +863,6 @@
     #返回值,技能释放成功
     return summonNPC
 
-
-## 召唤兽使用技能召唤
-#  @param curNPC 当前NPC
-#  @param curSkill 当前技能
-#  @param maxSummonCount 最大召唤数量
-#  @param maxAngryCount 最大怒值数量
-#  @param posX 重生坐标X
-#  @param posY 重生坐标Y
-#  @param tick 当前时间
-#  @return 召唤兽
-#  @remarks 函数详细说明.
-#def SummonNPC_UseSkill_SummonNPC(curNPC, curSkill , maxSummonCount , maxAngryCount , posX, posY, tick):
-#    #获得召唤兽ID
-#    summonNPCID = curSkill.GetEffect(0).GetEffectValue(0)
-#    
-#    if not summonNPCID:
-#        return
-#    
-#    #第一次召唤的时候,需要初始化最大召唤个数
-#    if not curNPC.GetSummonCount() :
-#        curNPC.SetSummonCount(maxSummonCount, summonNPCID, maxAngryCount)
-#    
-#    #召唤兽召唤补足
-#    elif curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotSummon and maxSummonCount > curNPC.GetSummonCount():
-#        curNPC.AddSummonCount(maxSummonCount - curNPC.GetSummonCount(), summonNPCID, maxAngryCount)
-#    
-#    #寻找一个可以召唤的NPC
-#    summonIsFull = True
-#    summonNPC = None
-#    
-#    for i in range(0, curNPC.GetSummonCount()):
-#        summonNPC = curNPC.GetSummonNPCAt(i)
-#        if GameObj.GetHP(summonNPC) > 0:
-#            continue
-#        
-#        summonIsFull = False
-#        break
-#    
-#    #已经没有可召唤兽的召唤兽,满了
-#    if summonIsFull:
-#        return
-#    
-#    #设置这个NPC属性,并召唤出这个NPC
-#    NPCCommon.InitNPC(summonNPC)
-#
-#    summonNPC.Reborn(posX , posY)
-#    summonNPC.SetBornTime(tick)
-#    summonNPC.SetLastTime(curSkill.GetLastTime())
-#    
-#    #返回summonNPC,技能释放成功
-#    return summonNPC
-
-## 设置玩家被动技能对召唤兽属性的影响
-#  @param curPlayer 当前玩家
-#  @param summonNPC 当前召唤兽
-#  @param summonID 召唤兽ID
-#  @return None
-#  @remarks 函数详细说明.
-def __PassiveSkill_AddSummonAttribute(curPlayer, summonNPC, summonID):
-    return
-
 ## 根据效果获得值
 #  @param valueList 
 #  @param curSkill 当前技能
@@ -985,21 +877,6 @@
         returnList.append(value)
         
     return returnList 
-    
-## 计算NPC属性效果 
-#  @param lvSummonNPC 玩家
-#  @param summonNPC 效果
-#  @param summonList NPC
-#  @return True
-#  @remarks 函数详细说明.
-def __CalcSummonEffectValue(lvSummonNPC, summonNPC, summonList):
-    for value in summonList:
-        curValue = EffGetSet.GetValueByEffIndex(summonNPC, value[0])
-        #GameWorld.Log("当期属性 = %s index = %s"%(curValue,value[0]))
-        #GameWorld.Log("设置属性 = %s"%(curValue + value[1] * lvSummonNPC))
-        EffGetSet.SetValueByEffIndex(summonNPC, value[0], curValue + value[1] * lvSummonNPC)
-        
-    return True
 
 ## 设置这个召唤兽的基础属性
 #  @param summonNPC 召唤兽
@@ -1973,13 +1850,13 @@
     #0通哟  1 PVP类型  2PVE类型  
     return curSkill.GetHurtType() % 10
 
-def isXPSkill(curSkill):
-    ## 是否xp怒气技能
+def isAngerSkill(curSkill):
+    ## 是否怒气技能
     return curSkill and curSkill.GetXP() > 0
 
-def isTurnNormalAtkSkill(curSkill):
+def isTurnNormalSkill(curSkill):
     ## 是否回合普攻技能,区别与无技能的普通A一下,该普攻同样可以有各种技能效果,只是他属于普攻
-    return curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaAttack
+    return curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill
 
 ## 检查技能是否为被动技能, 用于控制不可释放技能
 def isPassiveSkill(curSkill):
@@ -2223,7 +2100,7 @@
     cureDefPer = 0 # 敌方的弱化治疗
     angerOverflow = 0 # 怒气溢出值
     if userObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo):
-        if isXPSkill(curSkill):
+        if isAngerSkill(curSkill):
             angerOverflow = max(GameObj.GetXP(userObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
         #enemyObj = TurnAttack.GetEnemyObj(userObj)
         #curePer += GameObj.GetCurePer(userObj)
@@ -2286,101 +2163,7 @@
 #  @return 
 def UpdateSkillCombo(attacker, skill, tick):
     return
-    #===========================================================================
-    # if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
-    #    return
-    # 
-    # SkillComboDict = ReadChConfig.GetEvalChConfig("SkillCombo")
-    # jobType = ChConfig.JOB_TYPE_DICT[attacker.GetJob()]
-    # 
-    # if jobType not in SkillComboDict:
-    #    return
-    # 
-    # jobSkillComboDict = SkillComboDict[jobType]
-    # 
-    # curSkillTypeID = skill.GetSkillTypeID()
-    # 
-    # isCombo = False
-    # lastComboTick = attacker.GetDictByKey(ChConfig.Def_PlayerKey_LastSkillComboTick)
-    # comboCnt = attacker.GetDictByKey(ChConfig.Def_PlayerKey_SkillComboCnt)
-    # buffProcessState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_ComboBuffProcessState)
-    # # 持续性伤害buff已处理过不再处理
-    # if curSkillTypeID in ChConfig.Ded_ComboBuffProcessSkillIDList and buffProcessState:
-    #    #GameWorld.DebugLog("持续性伤害buff已处理过不再处理:%s" % curSkillTypeID)
-    #    return
-    # 
-    # for comboNum, comboInfo in jobSkillComboDict.items():
-    #    
-    #    skillList = comboInfo[0]
-    #    stateSkillReq = comboInfo[1]
-    #    comboInterval = comboInfo[2]
-    #    addHurtPerFormat = comboInfo[3]
-    #    modulusPlusHappenRate = comboInfo[4]    # 伤害系数加成概率万分率
-    #    modulusPlusFormat = comboInfo[5]    # 伤害系数公式
-    #    
-    #    if curSkillTypeID not in skillList:
-    #        continue
-    #    
-    #    # 如果有姿态要求
-    #    if stateSkillReq != 0:
-    #        buffState = attacker.GetBuffState()
-    #        if buffState.FindBuff(stateSkillReq) == None:
-    #            #GameWorld.DebugLog("非对应职业姿态(%s),无法连击!" % stateSkillReq)
-    #            continue
-    #    
-    #    curComboCnt = skillList.index(curSkillTypeID) + 1 # 当前技能所在连击数
-    #    
-    #    # 在规定时间内完成连击
-    #    #GameWorld.DebugLog("skillList=%s, curSkillTypeID=%s,comboCnt=%s,curComboCnt=%s,tick=%s,lastComboTick=%s,(%s),comboInterval=%s" 
-    #    #                   % (skillList, curSkillTypeID, comboCnt, curComboCnt, tick, lastComboTick, tick - lastComboTick, comboInterval))
-    #    if comboCnt > 0 and (comboCnt + 1) == curComboCnt and (tick - lastComboTick) <= comboInterval:
-    #        isCombo = True
-    #        #GameWorld.DebugLog("    连击成功!")
-    #    
-    #    # 第一击
-    #    elif curComboCnt == 1:
-    #        GameWorld.DebugLog("    技能第一击!")
-    #        comboCnt = 0
-    #        isCombo = True
-    #        
-    #    if isCombo:
-    #        STR = attacker.GetSTR()
-    #        PHY = attacker.GetPHY()
-    #        modulus = 1 # 伤害系数
-    #        if GameWorld.CanHappen(modulusPlusHappenRate):
-    #            modulus = eval(modulusPlusFormat)
-    #        addHurtPer = eval(addHurtPerFormat)
-    #        attacker.SetDict(ChConfig.Def_PlayerKey_LastSkillComboTick, tick)
-    #        attacker.SetDict(ChConfig.Def_PlayerKey_SkillComboCnt, curComboCnt)
-    #        attacker.SetDict(ChConfig.Def_PlayerKey_ComboSkillTypeID, curSkillTypeID)
-    #        attacker.SetDict(ChConfig.Def_PlayerKey_ComboAddHurtPer, addHurtPer)
-    #        if curSkillTypeID in ChConfig.Ded_ComboBuffProcessSkillIDList:
-    #            attacker.SetDict(ChConfig.Def_PlayerKey_ComboBuffProcessState, 1)
-    #            #GameWorld.DebugLog("    持续性伤害buff连击!%s" % curSkillTypeID)
-    #            
-    #        
-    #        # 通知客户端连击数
-    #        skillComboPack = ChPyNetSendPack.tagMCSkillCombo()
-    #        skillComboPack.Clear()
-    #        skillComboPack.ComboNum = comboNum
-    #        skillComboPack.ComboCnt = curComboCnt
-    #        NetPackCommon.SendFakePack(attacker, skillComboPack)
-    #        GameWorld.DebugLog("技能连击: num=%s,curCnt=%s,comboCnt=%s,力=%s,敏=%s,modulus=%s,addHurtPer=%s" 
-    #                           % (comboNum, curComboCnt, comboCnt, STR, PHY, modulus, addHurtPer))
-    #        break
-    # 
-    # # 没有连击成功, 重置连击信息
-    # if not isCombo and comboCnt != 0:
-    #    attacker.SetDict(ChConfig.Def_PlayerKey_LastSkillComboTick, 0)
-    #    attacker.SetDict(ChConfig.Def_PlayerKey_SkillComboCnt, 0)
-    #    attacker.SetDict(ChConfig.Def_PlayerKey_ComboSkillTypeID, 0)
-    #    attacker.SetDict(ChConfig.Def_PlayerKey_ComboAddHurtPer, 0)
-    #    attacker.SetDict(ChConfig.Def_PlayerKey_ComboBuffProcessState, 0)
-    #    GameWorld.DebugLog("连击失败!curSkillTypeID=%s" % curSkillTypeID)
-    #    
-    # return
-    #===========================================================================
-    
+
 def GetSkillAddPerByID(curPlayer, skillTypeID):
     ## 获取技能伤害百分比提升值
     # @param skillTypeID: 技能TypeID
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 caa2f54..ec02178 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2594,8 +2594,8 @@
 # @remarks 刷新玩家场景状态
 def ProcessPlayerAreaState(curPlayer):
     #初始化所有的场景buff状态
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    playerControl.InitMapBuffState()
+    #playerControl = PlayerControl.PlayerControl(curPlayer)
+    #playerControl.InitMapBuffState()
     
     buffManager = curPlayer.GetMapBuff()
     
@@ -2621,89 +2621,6 @@
             callFunc(curPlayer, curEffect)
 
     return
-#---------------------------------------------------------------------
-##添加装备触发的Buff
-# @param curPlayer 玩家实例
-# @param curEquip 装备实例
-# @return 返回值无意义
-# @remarks 添加装备触发的Buff
-def RefreshSkillBuffByEquip(curPlayer, curEquip) :
-    #一般装备新增Buff
-    __DoEquip_AddBuff(curPlayer, curEquip)
-    return
-
-#---------------------------------------------------------------------
-##添加装备触发的Buff, 一般装备新增Buff
-# @param curPlayer 玩家实例
-# @param curEquip 装备实例
-# @return 返回值无意义
-# @remarks 添加装备触发的Buff, 一般装备新增Buff
-def __DoEquip_AddBuff(curPlayer, curEquip):
-    gameData = GameWorld.GetGameData()
-    playerVehicle = curPlayer.GetPlayerVehicle()
-    houseState = curPlayer.GetPlayerRidehorseState()
-    
-    for index in range(0 , curEquip.GetAddSkillCount()):
-        curSkillID = curEquip.GetAddSkill(index)
-        
-        if curSkillID == 0:
-            continue
-        
-        #通过技能ID获得使用技能
-        curSkill = gameData.GetSkillBySkillID(curSkillID)
-        
-        if curSkill == None :
-            GameWorld.Log("装备触发技能,物品表错误 curSkillID = %s"%(curSkillID) , curPlayer.GetPlayerID())
-            continue
-        
-        #骑马触发技能
-        houseSkill = ChConfig.Def_Skill_TypeID_Speed
-        curSkillType = curSkill.GetSkillTypeID()
-        
-        if not SkillCommon.IsBuff(curSkill):
-            continue
-        
-        if curSkillType in houseSkill:
-            #不使用,不添加buff
-            if playerVehicle != IPY_GameWorld.pvHorse :
-                continue
-            
-            if curSkillType == houseSkill[0] and houseState != IPY_GameWorld.prsNormal :
-                continue
-            
-            if curSkillType == houseSkill[1] and houseState != IPY_GameWorld.prsRun :
-                continue
-            
-        #添加Buff
-        BuffSkill.AddBuffNoRefreshState(curPlayer, IPY_GameWorld.bfEquipBuff, curSkill, 0, [], buffOwner = curPlayer)
-        
-    return
-#---------------------------------------------------------------------
-##刷新buff的效果
-# @param buffState Buff管理器
-# @param sameEffectCanWork 是否可以叠加相同效果, <sameEffectCanWork> : 效果是否可以叠加, 默认为否
-# @return 返回值无意义
-# @remarks 刷新buff的效果 (参数 -> buff管理器,是否叠加)
-def __RefreshSkillBuffEffect(buffState, sameEffectCanWork = False):
-    return
-    #===========================================================================
-    # buffState.ClearEffects()
-    # for buffIndex in range(0, buffState.GetBuffCount()):
-    #    curBuff = buffState.GetBuff(buffIndex)
-    #    buffValue = curBuff.GetValue()
-    #    curSkill = curBuff.GetSkill()
-    #    skillID = curSkill.GetSkillID()
-    #    if skillID == 0:
-    #        continue
-    #    
-    #    for effectIndex in range(0, curSkill.GetEffectCount()):
-    #        curEffect = curSkill.GetEffect(effectIndex)
-    #        effectID = curEffect.GetEffectID()
-    #        if effectID == 0:
-    #            continue
-    #        
-    #        buffState.AddEffect(curEffect, buffValue, skillID, curBuff.GetOwnerID(), curBuff.GetOwnerType())
-    #===========================================================================
 
 #---------------------------------------------------------------------
 ##计算效果值
@@ -2807,35 +2724,6 @@
     
     return ChConfig.Def_CalcAttrIndexDict[(isBaseEff, calcType)]
 
-
-##刷新玩家所有影响属性的Buff,添加时只重计算同类型BUFF,删除时刷新所有类型BUFF
-# @param curPlayer 玩家实例
-# @param buffType buff类型 -1代表全部刷性
-# @return 返回值无意义
-def RefreshPlayerBuffOnAttrAddEffect(curPlayer, buffType=-1):
-    return
-#===============================================================================
-#    GameWorld.DebugLog("Start RefreshPlayerBuffOnAttrAddEffect!!!")
-#    
-#    #[[BuffState, CanPileup]]
-#    if buffType == -1:
-#        buffRefreshList = [
-#            [curPlayer.GetBuffState(), False], [curPlayer.GetDeBuffState(), False],
-#            [curPlayer.GetAura(), False], [curPlayer.GetIncBuff(), True],
-#            [curPlayer.GetPassiveBuf(), True], [curPlayer.GetEquipBuff(), True],
-#                       ]
-#    else:    
-#        #只重计算改变的BUFF, 这里不防范非属性类型BUFF外层过滤
-#        buffManagerInfo = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)
-#        buffRefreshList = [[buffManagerInfo[0],  buffManagerInfo[2]]]
-#        
-#    #执行刷新逻辑
-#    __DoRefreshBuff(buffRefreshList)
-# 
-#    return
-#===============================================================================
-
-
 # 通过技能ID删除buff对应的效果ID
 def ClearBuffEffectBySkillID(curObj, skillID, ownerID, ownerType):
     curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
@@ -2936,18 +2824,6 @@
     for i in effectIndexList:
         buffState.DeleteEffectByIndex(i)
         
-       
-
-##刷新管理器中的Buff
-# @param buffRefreshList Buff刷新列表[[BuffState, CanPileup]]
-# @return 返回值无意义
-# @remarks 按照叠加规则, 刷新指定管理中的Buff
-def __DoRefreshBuff(buffRefreshList):
-    for buffState, canPileUp in buffRefreshList:
-        __RefreshSkillBuffEffect(buffState, canPileUp)
-
-    return
-    
 
 ##计算行为BUFF对人物行为状态的改变
 # @param curPlayer 玩家实例

--
Gitblit v1.8.0