From f0cde48e1dcb81f106f64bbc3bdddc9976d6aece Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 十一月 2018 20:03:39 +0800
Subject: [PATCH] 4997 【后端】【1.3】冰晶矿脉AI-- 毒1089效果修改为被攻击方的血量百分比掉血
---
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