From 22b11c5947c3ec023556c4ca6222ec954f6d27e7 Mon Sep 17 00:00:00 2001 From: Allofich Date: Wed, 31 Aug 2016 23:56:31 +0900 Subject: [PATCH] Move Water Walking check into checkEffectTarget() --- apps/openmw/mwmechanics/spellcasting.cpp | 33 +++++++++++------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwmechanics/spellcasting.cpp b/apps/openmw/mwmechanics/spellcasting.cpp index fb473b0db..797c42fe4 100644 --- a/apps/openmw/mwmechanics/spellcasting.cpp +++ b/apps/openmw/mwmechanics/spellcasting.cpp @@ -259,7 +259,7 @@ namespace MWMechanics } /// Check if the given affect can be applied to the target. If \a castByPlayer, emits a message box on failure. - bool checkEffectTarget (int effectId, const MWWorld::Ptr& target, bool castByPlayer) + bool checkEffectTarget (int effectId, const MWWorld::Ptr& target, const MWWorld::Ptr& caster, bool castByPlayer) { switch (effectId) { @@ -291,8 +291,20 @@ namespace MWMechanics return false; } break; - } + case ESM::MagicEffect::WaterWalking: + if (target.getClass().isPureWaterCreature(target)) + return false; + MWBase::World *world = MWBase::Environment::get().getWorld(); + + if (!world->isWaterWalkingCastableOnTarget(target)) + { + if (castByPlayer && caster == target) + MWBase::Environment::get().getWindowManager()->messageBox ("#{sMagicInvalidEffect}"); + return false; + } + break; + } return true; } @@ -383,23 +395,8 @@ namespace MWMechanics } else canCastAnEffect = true; - - if (magicEffect->mIndex == ESM::MagicEffect::WaterWalking) - { - if (target.getClass().isPureWaterCreature(target)) - continue; - - MWBase::World *world = MWBase::Environment::get().getWorld(); - - if (!world->isWaterWalkingCastableOnTarget(target)) - { - if (castByPlayer && caster == target) - MWBase::Environment::get().getWindowManager()->messageBox ("#{sMagicInvalidEffect}"); - continue; - } - } - if (!checkEffectTarget(effectIt->mEffectID, target, castByPlayer)) + if (!checkEffectTarget(effectIt->mEffectID, target, caster, castByPlayer)) continue; // caster needs to be an actor for linked effects (e.g. Absorb)