mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-04 06:49:43 +00:00
Show sMagicInvalidTarget for an invalid soultrap target (Fixes #1728)
This commit is contained in:
parent
f754e06be9
commit
78bd516ab4
1 changed files with 39 additions and 16 deletions
|
@ -230,6 +230,44 @@ namespace MWMechanics
|
||||||
return -(resistance-100) / 100.f;
|
return -(resistance-100) / 100.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 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)
|
||||||
|
{
|
||||||
|
switch (effectId)
|
||||||
|
{
|
||||||
|
case ESM::MagicEffect::Levitate:
|
||||||
|
if (!MWBase::Environment::get().getWorld()->isLevitationEnabled())
|
||||||
|
{
|
||||||
|
if (castByPlayer)
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox("#{sLevitateDisabled}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ESM::MagicEffect::Soultrap:
|
||||||
|
if ((target.getClass().isActor() && target.getClass().isNpc())
|
||||||
|
|| (target.getTypeName() == typeid(ESM::Creature).name() && target.get<ESM::Creature>()->mBase->mData.mSoul == 0))
|
||||||
|
{
|
||||||
|
if (castByPlayer)
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicInvalidTarget}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ESM::MagicEffect::AlmsiviIntervention:
|
||||||
|
case ESM::MagicEffect::DivineIntervention:
|
||||||
|
case ESM::MagicEffect::Mark:
|
||||||
|
case ESM::MagicEffect::Recall:
|
||||||
|
if (!MWBase::Environment::get().getWorld()->isTeleportingEnabled())
|
||||||
|
{
|
||||||
|
if (castByPlayer)
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox("#{sTeleportDisabled}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
CastSpell::CastSpell(const MWWorld::Ptr &caster, const MWWorld::Ptr &target)
|
CastSpell::CastSpell(const MWWorld::Ptr &caster, const MWWorld::Ptr &target)
|
||||||
: mCaster(caster)
|
: mCaster(caster)
|
||||||
, mTarget(target)
|
, mTarget(target)
|
||||||
|
@ -318,23 +356,8 @@ namespace MWMechanics
|
||||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::MagicEffect>().find (
|
MWBase::Environment::get().getWorld()->getStore().get<ESM::MagicEffect>().find (
|
||||||
effectIt->mEffectID);
|
effectIt->mEffectID);
|
||||||
|
|
||||||
if (!MWBase::Environment::get().getWorld()->isLevitationEnabled() && effectIt->mEffectID == ESM::MagicEffect::Levitate)
|
if (!checkEffectTarget(effectIt->mEffectID, target, castByPlayer))
|
||||||
{
|
|
||||||
if (castByPlayer)
|
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox("#{sLevitateDisabled}");
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (!MWBase::Environment::get().getWorld()->isTeleportingEnabled() &&
|
|
||||||
(effectIt->mEffectID == ESM::MagicEffect::AlmsiviIntervention ||
|
|
||||||
effectIt->mEffectID == ESM::MagicEffect::DivineIntervention ||
|
|
||||||
effectIt->mEffectID == ESM::MagicEffect::Mark ||
|
|
||||||
effectIt->mEffectID == ESM::MagicEffect::Recall))
|
|
||||||
{
|
|
||||||
if (castByPlayer)
|
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox("#{sTeleportDisabled}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If player is healing someone, show the target's HP bar
|
// If player is healing someone, show the target's HP bar
|
||||||
if (castByPlayer && target != caster
|
if (castByPlayer && target != caster
|
||||||
|
|
Loading…
Reference in a new issue