Move Water Walking check into checkEffectTarget()

pull/52/head^2
Allofich 8 years ago
parent f25c65260c
commit 22b11c5947

@ -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)

Loading…
Cancel
Save