From 835c5fad7ad4e723c34be7f5fc073eeb7104e3f4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 27 四月 2019 11:14:44 +0800
Subject: [PATCH] 6628 【2.0】【后端】查看玩家装备和查看玩家战力功能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py |  172 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 118 insertions(+), 54 deletions(-)

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 505daaf..b6c4339 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
@@ -1264,7 +1264,7 @@
 # Def_HurtType_SuperHit, 
 # Def_HurtType_Miss, 
 # ) = range(0, 3)
-# #类型: 0-普通 1-致命一击 2-躲闪
+# #类型: 0-普通 1-暴击 2-躲闪
 #===============================================================================
 
 ## 伤害结构体类
@@ -1293,7 +1293,10 @@
 def IsHappenStateByType(happenState, cmpType):
     return happenState & cmpType
 
-def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState):
+
+# 表现形式 致命一击>(重击>暴击)>会心>格挡>境界压制
+# 重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill):
     ''' 获取伤害类型结果 
     支持多种伤害类型同时触发, 飘字表现以最终表现伤害类型为主
     @return: 最终表现伤害类型, {伤害类型:[是否触发, 伤害计算值, 触发时防守方的伤害减免值], ...}
@@ -1306,12 +1309,14 @@
                           ChConfig.Def_HurtType_Parry:[False, 0, 0],
                           ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
                           ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0],
+                          ChConfig.Def_HurtType_ThumpHit:[False, 0, 0],
                           }
     
     calcTypeList =  []
     if atkObjType == IPY_GameWorld.gotPlayer:
         calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, 
-                         ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit]
+                         ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
+                         ChConfig.Def_HurtType_ThumpHit]
     if defObjType == IPY_GameWorld.gotPlayer:
         calcTypeList += [ChConfig.Def_HurtType_Parry]
     # 暂时只计算玩家
@@ -1321,11 +1326,12 @@
     # 优先级列表, 互斥列表
     priorityList, mutexList = ReadChConfig.GetEvalChConfig("CalcHurtTypeInfo")
     happenFunc = {
-                  ChConfig.Def_HurtType_LuckyHit:lambda aObj, dObj, hState:__HurtTypeHappen_LuckyHit(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_SuperHit:lambda aObj, dObj, hState:__HurtTypeHappen_SuperHit(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_Parry:lambda aObj, dObj, hState:__HurtTypeHappen_Parry(aObj, dObj, hState),
-                  #ChConfig.Def_HurtType_Zhuxian:lambda aObj, dObj, hState:__HurtTypeHappen_Zhuxian(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_DeadlyHit:lambda aObj, dObj, hState:__HurtTypeHappen_Deadly(aObj, dObj, hState),
+                  ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit,
+                  ChConfig.Def_HurtType_SuperHit:__HurtTypeHappen_SuperHit,
+                  ChConfig.Def_HurtType_Parry:__HurtTypeHappen_Parry,
+                  #ChConfig.Def_HurtType_Zhuxian:__HurtTypeHappen_Zhuxian,
+                  ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly,
+                  ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit,
                   }
     
     hadCheckList = [] # 已经处理过的伤害类型列表
@@ -1342,7 +1348,7 @@
             if curMHHappen:
                 # 只要其中一个已触发的则后面的均为默认不触发
                 continue
-            result = happenFunc[hType](atkObj, defObj, happenState)
+            result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
             if result: # 如果触发,更新相关数值
                 hurtTypeResultDict[hType] = result
                 curMHHappen = True
@@ -1353,7 +1359,7 @@
             continue
         if hType not in hadCheckList:
             hadCheckList.append(hType)
-            result = happenFunc[hType](atkObj, defObj, happenState)
+            result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
             if result: # 如果触发,更新相关数值
                 hurtTypeResultDict[hType] = result
                 
@@ -1364,12 +1370,12 @@
     return hurtType, hurtTypeResultDict
 
 
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState):
-    ''' 判断伤害类型是否发生 - 幸运一击
-    @return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
+def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
+    ''' 判断伤害类型是否发生 - 会心一击
+    @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
     '''
     if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_LuckyHit):
-        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReducePer(defObj)
+        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
     
     aLuckyHitRate = atkObj.GetLuckyHitRate()
     dLuckyHitRateReduce = PlayerControl.GetLuckyHitRateReduce(defObj)
@@ -1379,16 +1385,16 @@
     if atkLuckyHitRate <= 0:
         return
     if GameWorld.CanHappen(atkLuckyHitRate):
-        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReducePer(defObj)
+        return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
     return
 
-def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState):
+def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 暴击
-    @return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
+    @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
     '''
     
     if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_SuperHit):
-        return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReducePer(defObj)
+        return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
     
     aSuperHitRate = atkObj.GetSuperHitRate()
     dSuperHitRateReduce = PlayerControl.GetSuperHitRateReduce(defObj)
@@ -1398,10 +1404,10 @@
     if superHitRate <= 0:
         return
     if GameWorld.CanHappen(superHitRate):
-        return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReducePer(defObj)
+        return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
     return
 
-def __HurtTypeHappen_Parry(atkObj, defObj, happenState):
+def __HurtTypeHappen_Parry(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 防守方抵御
     @return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
     '''
@@ -1412,7 +1418,7 @@
         return True, 0, chanceDefPer
     return
 
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState):
+#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
 #    """诛仙一击"""
 #    rate = PlayerControl.GetZhuXianRate(atkObj)
 #    if not rate:
@@ -1423,11 +1429,27 @@
 #    return
 
 # 致命一击
-def __HurtTypeHappen_Deadly(atkObj, defObj, happenState):
+def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
     if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_IsDealy):
         return True, 0, 0
     return
 
+#重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def __HurtTypeHappen_ThumpHit(atkObj, defObj, happenState, curSkill):
+    
+    if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_ThumpHit):
+        return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+    
+    thumpHitRate = 0  
+    thumpHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, 
+                                                                       ChConfig.TriggerType_AddThumpHitRate)
+    thumpHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, 
+                                                                       ChConfig.TriggerType_AddThumpHitRate)
+    if thumpHitRate <= 0:
+        return
+    if GameWorld.CanHappen(thumpHitRate):
+        return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+    return
 
 
 def ChangeSkillHurtPer(atkObj, defObj, curSkill, skillPer):
@@ -1602,6 +1624,36 @@
     PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
     return hurtValue - absortValue
 
+
+# 设置玩家一次主动型攻击中的第一个防御者
+def SetFirstDefender(attacker, defObj, curSkill):
+    if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    
+    if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+                                          ChConfig.Def_SkillFuncType_NormalAttack]:
+        return
+    
+    if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
+        return 
+    
+    attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, defObj.GetID())
+    
+    return
+
+# 清除第一目标
+def ClearFirstDefender(attacker):
+    if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, 0)
+    
+    return
+
+def GetFirstDefenderID(attacker):
+    return attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender)
+
+
+
 ## 计算伤血值
 #  @param atkObj 攻击者
 #  @param defObj 防御者
@@ -1615,6 +1667,9 @@
 #  @remarks 函数详细说明.
 def GetHurtHP(attacker, defObj, curSkill, atkSkillValue, atkSkillPer, tick):
     atkObj = ElfChangeAttacker(attacker)  # Elf灵为替身攻击,要取玩家的属性
+    
+    #设置第一个防御者
+    SetFirstDefender(atkObj, defObj, curSkill)
     
     resultHurtType = HurtType()
     atkObjType = attacker.GetGameObjType()
@@ -1749,20 +1804,14 @@
     
     WriteHurtLog(attacker, defObj, curSkill, resultHurtType.LostHP, resultHurtType.HurtType, "最终扣血")
     
-    #攻击触发事件, 该代码应该放在DoAttack函数中处理逻辑比较清晰,也不会破坏GetHurtHP函数
-    #因为DoAttack修改点比较多,暂不迁移,相关攻击事件逻辑,就往此函数中添加
     AttackEventTrigger(atkObj, defObj, curSkill, resultHurtType, tick)
-    #===========================================================================
-    # if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-    #    GameWorld.DebugAnswer(atkObj, "--%s剩余血量 %s"%(defObj.GetID(), defObj.GetHP()))
-    #===========================================================================
     
     return resultHurtType
 
 def UpdateTimeMonsterHP(curNPC, tick):
     '''
     NPC总血量 = 单人每秒掉血量*理论击杀所需时间
-         掉血值 = 单人每秒掉血量*min(攻击人数, 最大人数)*衰减万分率/10000
+         掉血值 = 单人每秒掉血量+min(当前人数, 最大人数)*附加掉血量
     '''
     
     npcID = curNPC.GetNPCID()
@@ -1779,6 +1828,10 @@
     
     if passTick <= 0:
         return
+        
+    lostHPPerSecond = ipyData.GetLostHPPerSecond()
+    maxPlayerCount = ipyData.GetMaxPlayerCount()
+    lostHPPerSecondEx = ipyData.GetLostHPPerSecondEx()
     
     effPlayerCount = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount)
     refreshPlayerCountTick = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCountTick)
@@ -1794,14 +1847,14 @@
             seeObjType = seeObj.GetGameObjType()
             if seeObjType == IPY_GameWorld.gotPlayer:
                 effPlayerCount += 1
+                if maxPlayerCount and effPlayerCount >= maxPlayerCount:
+                    effPlayerCount = maxPlayerCount
+                    break
         curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount, effPlayerCount)
         #GameWorld.DebugLog("刷新影响人数: effPlayerCount=%s" % effPlayerCount)
         
-    lostHPPerSecond = ipyData.GetLostHPPerSecond()
-    maxPlayerCount = ipyData.GetMaxPlayerCount()
-    reduceRate = ipyData.GetReduceRate()
     if effPlayerCount > 1:
-        hurtValuePerSecond = lostHPPerSecond * min(maxPlayerCount, effPlayerCount) * reduceRate / 10000.0
+        hurtValuePerSecond = lostHPPerSecond + (effPlayerCount - 1) * lostHPPerSecondEx
     else:
         hurtValuePerSecond = lostHPPerSecond
     lostHPTotal = int(hurtValuePerSecond * passTick / 1000.0)
@@ -2004,14 +2057,25 @@
             return 0, ChConfig.Def_HurtType_Miss
     
 
-    hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState)
+    hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill)
     #GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict))
     isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
-    isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] # 暴击
+    
+    # 重击和暴击互斥,并且使用同一个参数
+    isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit] 
+    if not isSuperHit:
+        isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] 
+    else:
+        # 重击加成
+        thumpPer = 0
+        thumpPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+        thumpPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+        aSuperHit = aSuperHit*(thumpPer + 10000)/10000
+        
     dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
     isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
     isDeadlyHit = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit][0] # 致命一击
-    
+
     if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage):
         return 1, hurtType
     
@@ -2039,12 +2103,6 @@
     
     atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
     
-    
-    aIceAtkSuperHit = 1 # 元素真伤倍值,暂时默认为1,之后扩展
-    aIceAtkSuperHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddIceAtkPer)
-    aIceAtkSuperHit += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddIceAtkPer)
-    
-    
     if isSuperHit:
         addASuperHit = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
         aSuperHit = aSuperHit*(ChConfig.Def_MaxRateValue + addASuperHit)*1.0/ChConfig.Def_MaxRateValue
@@ -2058,7 +2116,7 @@
 
 
     if isLuckyHit:
-        # 会心一击时增加会心伤害百分比 
+        # 会心一击时增加会心伤害固定值 
         aLuckyHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_LuckyHit)
         aLuckyHit -= PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_BeLuckyHitSubPer)
         aLuckyHit = max(aLuckyHit, 0)
@@ -2079,16 +2137,17 @@
     dHP = GameObj.GetHP(defObj)                # 防守方当前血量
     dMaxHP = GameObj.GetMaxHP(defObj)          # 防守方最大血量
     dIceDef = defObj.GetIceDef()        # 冰防, 元素真防, 玩家及NPC通用
-    dFinalHurtReducePer = 0             # 最终伤害减少百分比 默认0
     
     # 攻击方
     if atkObjType == IPY_GameWorld.gotPlayer:
         aIgnoreDefRate = atkObj.GetIgnoreDefRate()  # 无视防御比率
         aSkillAtkRate = atkObj.GetSkillAtkRate()    # 技能攻击力加成
-        aDamagePer = PlayerControl.GetDamagePer(atkObj)     # 外层伤害加成
+        aDamagePVP = PlayerControl.GetDamagePVP(atkObj)     # PVP固定伤害
+        aDamagePVE = PlayerControl.GetDamagePVE(atkObj)     # PVE固定伤害
+        
         # 被动技能增加伤害
-        aDamagePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddDamagePer)
-        aDamagePer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddDamagePer)
+        #aDamagePVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddDamagePer)
+        #aDamagePVP += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddDamagePer)
         
         aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj)     # PVE伤害加成
         aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj)     # 外层PVP伤害加成
@@ -2103,6 +2162,8 @@
         aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
         aFightPower = atkObj.GetFightPower()
         
+        
+        
     else:
         aIgnoreDefRate = 0  # 无视防御比率
         aFinalHurtPer = GameObj.GetPetDamPer(atkObj) # 最外层伤害加成, 可能为负值
@@ -2111,8 +2172,9 @@
             aSkillAtkRate += atkObj.GetSkillAtkRate()
             
         aNPCHurtAddPer = 0  # PVE伤害加成
-        aDamagePer = 0      # 外层伤害加成
         aDamagePerPVP = 0   # 外层PVP伤害加成
+        aDamagePVP = 0      # PVP固定伤害
+        aDamagePVE = 0      # PVE固定伤害
         aFinalHurt = NPCCommon.GetFinalHurt(atkObj) # 最终固定伤害
         aFightPower = NPCCommon.GetSuppressFightPower(atkObj)
         
@@ -2120,28 +2182,29 @@
     if defObjType == IPY_GameWorld.gotPlayer:
         dIgnoreDefRateReduce = PlayerControl.GetIgnoreDefRateReduce(defObj)  # 无视防御比率抗性
         dSkillAtkRateReduce = PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
-        dDamReduce = defObj.GetDamageReduceRate() # 外层减伤
-        dDamReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReduce)
+        dDamagePVPReduce = PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
+        #dDamReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReduce)
         dDamagePerPVPReduce = PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
         dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
         dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
         dBeHurtPer = PlayerControl.GetBeHurtPer(defObj)      # 加深受到伤害百分比
         dFightPower = defObj.GetFightPower()
+        dFinalHurtReducePer = PlayerControl.GetFinalHurtReducePer(defObj)
         dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
         
     else:
         dIgnoreDefRateReduce = 0    # 无视防御比率抗性
         dSkillAtkRateReduce = 0     # 技能攻击力减少
-        dDamReduce = 0              # 外层减伤 
+        dDamagePVPReduce = 0        # PVP固定减伤
         dDamagePerPVPReduce = 0     # 外层PVP减伤
         dFinalHurtReduce = 0        # 最终固定伤害减少
         dBeHurtPer = 0
         dFightPower = NPCCommon.GetSuppressFightPower(defObj)
-        
+        dFinalHurtReducePer = 0             # 最终伤害减少百分比 默认0
         
     #攻击字典 { 攻击类型 : '公式' }
     hurtDist = ReadChConfig.GetEvalChConfig('CalcAttackValue')
-    
+
     if suppressLV:
         suppressFormulaKeyLV = "SuppressValueLV_%s" % (atkIsBoss)
         if suppressFormulaKeyLV in hurtDist:
@@ -2421,7 +2484,7 @@
         #PVP 攻击回血
         atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
         # 百分比吸血
-        atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None, ChConfig.TriggerType_Buff_SuckBloodPer)
+        atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
         atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
         
         atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
@@ -2572,6 +2635,7 @@
         1    全体模式    IPY_GameWorld.amAll              对所有玩家都是敌对,家族区域同盟玩家除外  
         2    防卫模式    IPY_GameWorld.amCountry          本服玩家友好,他服玩家都是敌对
         5    强制模式    IPY_GameWorld.amFamily           队友、仙盟成员、同阵营友好,其他玩家敌对
+        7    锁定单一目标模式 IPY_GameWorld.amContest       只对选中目标有伤害, 目前只用于部分BOSS争夺地图
         
     场景区域
         普通区域    IPY_GameWorld.gatNormal    可根据不同PK模式PK,击杀玩家有惩罚

--
Gitblit v1.8.0