mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-01 18:04:31 +00:00
Don't mark skill affecting effects as invalid if the target is a creature
This commit is contained in:
parent
b905836f45
commit
f783993c56
1 changed files with 28 additions and 30 deletions
|
|
@ -714,9 +714,7 @@ namespace MWMechanics
|
||||||
damageAttribute(target, effect, effect.mMagnitude);
|
damageAttribute(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::DamageSkill:
|
case ESM::MagicEffect::DamageSkill:
|
||||||
if (!target.getClass().isNpc())
|
if (!godmode && target.getClass().isNpc())
|
||||||
invalid = true;
|
|
||||||
else if (!godmode)
|
|
||||||
{
|
{
|
||||||
// Damage Skill abilities reduce base skill :todd:
|
// Damage Skill abilities reduce base skill :todd:
|
||||||
if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
||||||
|
|
@ -734,9 +732,7 @@ namespace MWMechanics
|
||||||
restoreAttribute(target, effect, effect.mMagnitude);
|
restoreAttribute(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::RestoreSkill:
|
case ESM::MagicEffect::RestoreSkill:
|
||||||
if (!target.getClass().isNpc())
|
if (target.getClass().isNpc())
|
||||||
invalid = true;
|
|
||||||
else
|
|
||||||
restoreSkill(target, effect, effect.mMagnitude);
|
restoreSkill(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::RestoreHealth:
|
case ESM::MagicEffect::RestoreHealth:
|
||||||
|
|
@ -802,23 +798,22 @@ namespace MWMechanics
|
||||||
fortifyAttribute(target, effect, effect.mMagnitude);
|
fortifyAttribute(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::DrainSkill:
|
case ESM::MagicEffect::DrainSkill:
|
||||||
if (!target.getClass().isNpc())
|
if (!godmode && target.getClass().isNpc())
|
||||||
invalid = true;
|
|
||||||
else if (!godmode)
|
|
||||||
damageSkill(target, effect, effect.mMagnitude);
|
damageSkill(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::FortifySkill:
|
case ESM::MagicEffect::FortifySkill:
|
||||||
if (!target.getClass().isNpc())
|
if (target.getClass().isNpc())
|
||||||
invalid = true;
|
|
||||||
else if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
|
||||||
{
|
{
|
||||||
// Abilities affect base stats, but not for drain
|
if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
||||||
auto& npcStats = target.getClass().getNpcStats(target);
|
{
|
||||||
auto& skill = npcStats.getSkill(effect.getSkillOrAttribute());
|
// Abilities affect base stats, but not for drain
|
||||||
skill.setBase(skill.getBase() + effect.mMagnitude);
|
auto& npcStats = target.getClass().getNpcStats(target);
|
||||||
|
auto& skill = npcStats.getSkill(effect.getSkillOrAttribute());
|
||||||
|
skill.setBase(skill.getBase() + effect.mMagnitude);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fortifySkill(target, effect, effect.mMagnitude);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
fortifySkill(target, effect, effect.mMagnitude);
|
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::FortifyMaximumMagicka:
|
case ESM::MagicEffect::FortifyMaximumMagicka:
|
||||||
recalculateMagicka = true;
|
recalculateMagicka = true;
|
||||||
|
|
@ -845,9 +840,7 @@ namespace MWMechanics
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::AbsorbSkill:
|
case ESM::MagicEffect::AbsorbSkill:
|
||||||
if (!target.getClass().isNpc())
|
if (!godmode && target.getClass().isNpc())
|
||||||
invalid = true;
|
|
||||||
else if (!godmode)
|
|
||||||
{
|
{
|
||||||
damageSkill(target, effect, effect.mMagnitude);
|
damageSkill(target, effect, effect.mMagnitude);
|
||||||
if (!caster.isEmpty() && caster.getClass().isNpc())
|
if (!caster.isEmpty() && caster.getClass().isNpc())
|
||||||
|
|
@ -1281,18 +1274,22 @@ namespace MWMechanics
|
||||||
fortifyAttribute(target, effect, -effect.mMagnitude);
|
fortifyAttribute(target, effect, -effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::DrainSkill:
|
case ESM::MagicEffect::DrainSkill:
|
||||||
restoreSkill(target, effect, effect.mMagnitude);
|
if (target.getClass().isNpc())
|
||||||
|
restoreSkill(target, effect, effect.mMagnitude);
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::FortifySkill:
|
case ESM::MagicEffect::FortifySkill:
|
||||||
// Abilities affect base stats, but not for drain
|
if (target.getClass().isNpc())
|
||||||
if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
|
||||||
{
|
{
|
||||||
auto& npcStats = target.getClass().getNpcStats(target);
|
// Abilities affect base stats, but not for drain
|
||||||
auto& skill = npcStats.getSkill(effect.getSkillOrAttribute());
|
if (spellParams.hasFlag(ESM::ActiveSpells::Flag_AffectsBaseValues))
|
||||||
skill.setBase(skill.getBase() - effect.mMagnitude);
|
{
|
||||||
|
auto& npcStats = target.getClass().getNpcStats(target);
|
||||||
|
auto& skill = npcStats.getSkill(effect.getSkillOrAttribute());
|
||||||
|
skill.setBase(skill.getBase() - effect.mMagnitude);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fortifySkill(target, effect, -effect.mMagnitude);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
fortifySkill(target, effect, -effect.mMagnitude);
|
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::FortifyMaximumMagicka:
|
case ESM::MagicEffect::FortifyMaximumMagicka:
|
||||||
target.getClass().getCreatureStats(target).recalculateMagicka();
|
target.getClass().getCreatureStats(target).recalculateMagicka();
|
||||||
|
|
@ -1307,8 +1304,9 @@ namespace MWMechanics
|
||||||
break;
|
break;
|
||||||
case ESM::MagicEffect::AbsorbSkill:
|
case ESM::MagicEffect::AbsorbSkill:
|
||||||
{
|
{
|
||||||
|
if (target.getClass().isNpc())
|
||||||
|
restoreSkill(target, effect, effect.mMagnitude);
|
||||||
const auto caster = world->searchPtrViaActorId(spellParams.getCasterActorId());
|
const auto caster = world->searchPtrViaActorId(spellParams.getCasterActorId());
|
||||||
restoreSkill(target, effect, effect.mMagnitude);
|
|
||||||
if (!caster.isEmpty() && caster.getClass().isNpc())
|
if (!caster.isEmpty() && caster.getClass().isNpc())
|
||||||
fortifySkill(caster, effect, -effect.mMagnitude);
|
fortifySkill(caster, effect, -effect.mMagnitude);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue