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