| | |
| | | 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 防御者
|
| | |
| | | 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)
|