Move code to apps/openmw/mwmechanics/spellcasting.cpp, move reduce mana code to CastSpell::cast(const ESM::Spell*)

This commit is contained in:
Grigorii Latyshev 2017-11-25 17:27:04 +01:00
parent 32096ae0cc
commit ce32462358
3 changed files with 13 additions and 19 deletions

View file

@ -8,7 +8,6 @@
#include "../mwmechanics/creaturestats.hpp" #include "../mwmechanics/creaturestats.hpp"
#include "../mwmechanics/spellcasting.hpp" #include "../mwmechanics/spellcasting.hpp"
#include "../mwmechanics/actorutil.hpp"
#include "../mwworld/esmstore.hpp" #include "../mwworld/esmstore.hpp"
#include "../mwworld/inventorystore.hpp" #include "../mwworld/inventorystore.hpp"
@ -61,11 +60,7 @@ namespace MWGui
{ {
newSpell.mType = Spell::Type_Spell; newSpell.mType = Spell::Type_Spell;
std::string cost = std::to_string(spell->mData.mCost); std::string cost = std::to_string(spell->mData.mCost);
std::string chance = std::to_string( std::string chance = std::to_string(int(MWMechanics::getSpellSuccessChance(spell, mActor)));
(stats.getMagicka().getCurrent() >= spell->mData.mCost ||
(mActor == MWMechanics::getPlayer() && MWBase::Environment::get().getWorld()->getGodModeState())
) ? int(MWMechanics::getSpellSuccessChance(spell, mActor)) : 0
);
newSpell.mCostColumn = cost + "/" + chance; newSpell.mCostColumn = cost + "/" + chance;
} }
else else

View file

@ -126,7 +126,10 @@ namespace MWMechanics
float castChance = calcSpellBaseSuccessChance(spell, actor, effectiveSchool) + castBonus; float castChance = calcSpellBaseSuccessChance(spell, actor, effectiveSchool) + castBonus;
castChance *= stats.getFatigueTerm(); castChance *= stats.getFatigueTerm();
if (stats.getMagicEffects().get(ESM::MagicEffect::Silence).getMagnitude()&& !godmode) if (godmode)
return 100;
if (stats.getMagicEffects().get(ESM::MagicEffect::Silence).getMagnitude())
return 0; return 0;
if (spell->mData.mType == ESM::Spell::ST_Power) if (spell->mData.mType == ESM::Spell::ST_Power)
@ -135,14 +138,12 @@ namespace MWMechanics
if (spell->mData.mType != ESM::Spell::ST_Spell) if (spell->mData.mType != ESM::Spell::ST_Spell)
return 100; return 100;
if (stats.getMagicka().getCurrent() < spell->mData.mCost)
return 0;
if (spell->mData.mFlags & ESM::Spell::F_Always) if (spell->mData.mFlags & ESM::Spell::F_Always)
return 100; return 100;
if (godmode)
{
return 100;
}
if (!cap) if (!cap)
return std::max(0.f, castChance); return std::max(0.f, castChance);
else else
@ -888,6 +889,11 @@ namespace MWMechanics
MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicSkillFail}"); MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicSkillFail}");
fail = true; fail = true;
} }
// Reduce mana
MWMechanics::DynamicStat<float> magicka = stats.getMagicka();
magicka.setCurrent(magicka.getCurrent() - spell->mData.mCost);
stats.setMagicka(magicka);
} }
if (fail) if (fail)

View file

@ -2718,13 +2718,6 @@ namespace MWWorld
message = "#{sPowerAlreadyUsed}"; message = "#{sPowerAlreadyUsed}";
fail = true; fail = true;
} }
// Reduce mana
if (!fail && !godmode)
{
magicka.setCurrent(magicka.getCurrent() - spell->mData.mCost);
stats.setMagicka(magicka);
}
} }
if (isPlayer && fail) if (isPlayer && fail)