From 69603a748cf54f1a81930d1f88861d32bf006205 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 十一月 2018 18:02:54 +0800
Subject: [PATCH] 4923 【后端】【1.3】神兵技能--神兵护盾

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 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 7b5a0be..3c4b876 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
@@ -1478,7 +1478,48 @@
         return attacker if not owner else owner
     
     return attacker
+   
+# 检查对象是否属于玩家,比如用于纯PVP验证
+def CheckIsPlayerOnwer(gameObj):
+    if not gameObj:
+        return False
     
+    objType = gameObj.GetGameObjType()
+    
+    if objType == IPY_GameWorld.gotPlayer:
+        return True
+    
+    objNPCType = gameObj.GetGameNPCObjType()
+    if objNPCType == IPY_GameWorld.gnotNormal:
+        return False
+    
+    if objNPCType == IPY_GameWorld.gnotSummon:
+        owner = NPCCommon.GetSummonOwnerDetel(gameObj)
+        if not owner:
+            return False
+        if owner.GetGameObjType() != IPY_GameWorld.gotPlayer:
+            return False
+            
+    return True
+    
+# 攻击时防守方神兵护盾的处理
+def CalcAtkProDef(atkObj, defObj, 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)
+    
+    return hurtValue - absortValue
+
 ## 计算伤血值
 #  @param atkObj 攻击者
 #  @param defObj 防御者
@@ -1525,6 +1566,9 @@
     else:
         hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
     
+    # 优先处理神兵护盾
+    hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue)
+
     if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
         # 麒麟护盾吸收伤害,将抵消的伤害存储
         absortValue = int(defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue)/float(ShareDefine.Def_MaxRateValue)*hurtValue)   

--
Gitblit v1.8.0