diff --git a/apps/openmw/mwgui/quickkeysmenu.cpp b/apps/openmw/mwgui/quickkeysmenu.cpp index 02512425d..6d51420f0 100644 --- a/apps/openmw/mwgui/quickkeysmenu.cpp +++ b/apps/openmw/mwgui/quickkeysmenu.cpp @@ -440,7 +440,7 @@ namespace MWGui for (MWMechanics::Spells::TIterator it = spells.begin(); it != spells.end(); ++it) { - spellList.push_back(*it); + spellList.push_back (it->first); } const MWWorld::ESMStore &esmStore = diff --git a/apps/openmw/mwgui/spellbuyingwindow.cpp b/apps/openmw/mwgui/spellbuyingwindow.cpp index a41f401a5..11f090494 100644 --- a/apps/openmw/mwgui/spellbuyingwindow.cpp +++ b/apps/openmw/mwgui/spellbuyingwindow.cpp @@ -98,19 +98,19 @@ namespace MWGui MWMechanics::Spells& playerSpells = MWWorld::Class::get (player).getCreatureStats (player).getSpells(); MWMechanics::Spells& merchantSpells = MWWorld::Class::get (actor).getCreatureStats (actor).getSpells(); - + for (MWMechanics::Spells::TIterator iter = merchantSpells.begin(); iter!=merchantSpells.end(); ++iter) { const ESM::Spell* spell = - MWBase::Environment::get().getWorld()->getStore().get().find (*iter); - + MWBase::Environment::get().getWorld()->getStore().get().find (iter->first); + if (spell->mData.mType!=ESM::Spell::ST_Spell) continue; // don't try to sell diseases, curses or powers - + if (std::find (playerSpells.begin(), playerSpells.end(), *iter)!=playerSpells.end()) continue; // we have that spell already - - addSpell (*iter); + + addSpell (iter->first); } updateLabels(); diff --git a/apps/openmw/mwgui/spellcreationdialog.cpp b/apps/openmw/mwgui/spellcreationdialog.cpp index 69d69519f..839586452 100644 --- a/apps/openmw/mwgui/spellcreationdialog.cpp +++ b/apps/openmw/mwgui/spellcreationdialog.cpp @@ -436,7 +436,7 @@ namespace MWGui for (MWMechanics::Spells::TIterator it = spells.begin(); it != spells.end(); ++it) { const ESM::Spell* spell = - MWBase::Environment::get().getWorld()->getStore().get().find(*it); + MWBase::Environment::get().getWorld()->getStore().get().find (it->first); // only normal spells count if (spell->mData.mType != ESM::Spell::ST_Spell) diff --git a/apps/openmw/mwgui/spellwindow.cpp b/apps/openmw/mwgui/spellwindow.cpp index d62b23de4..47e1d739a 100644 --- a/apps/openmw/mwgui/spellwindow.cpp +++ b/apps/openmw/mwgui/spellwindow.cpp @@ -139,7 +139,7 @@ namespace MWGui for (MWMechanics::Spells::TIterator it = spells.begin(); it != spells.end(); ++it) { - spellList.push_back(*it); + spellList.push_back (it->first); } const MWWorld::ESMStore &esmStore = diff --git a/apps/openmw/mwmechanics/spells.cpp b/apps/openmw/mwmechanics/spells.cpp index ef084f479..32acca2f0 100644 --- a/apps/openmw/mwmechanics/spells.cpp +++ b/apps/openmw/mwmechanics/spells.cpp @@ -29,13 +29,13 @@ namespace MWMechanics void Spells::add (const std::string& spellId) { - if (std::find (mSpells.begin(), mSpells.end(), spellId)==mSpells.end()) - mSpells.push_back (spellId); + if (mSpells.find (spellId)==mSpells.end()) + mSpells.insert (std::make_pair (spellId, -1)); } void Spells::remove (const std::string& spellId) { - TContainer::iterator iter = std::find (mSpells.begin(), mSpells.end(), spellId); + TContainer::iterator iter = mSpells.find (spellId); if (iter!=mSpells.end()) mSpells.erase (iter); @@ -51,7 +51,7 @@ namespace MWMechanics for (TIterator iter = mSpells.begin(); iter!=mSpells.end(); ++iter) { const ESM::Spell *spell = - MWBase::Environment::get().getWorld()->getStore().get().find (*iter); + MWBase::Environment::get().getWorld()->getStore().get().find (iter->first); if (spell->mData.mType==ESM::Spell::ST_Ability || spell->mData.mType==ESM::Spell::ST_Blight || spell->mData.mType==ESM::Spell::ST_Disease || spell->mData.mType==ESM::Spell::ST_Curse) @@ -75,18 +75,18 @@ namespace MWMechanics { return mSelectedSpell; } - + bool Spells::hasCommonDisease() const { for (TIterator iter = mSpells.begin(); iter!=mSpells.end(); ++iter) { const ESM::Spell *spell = - MWBase::Environment::get().getWorld()->getStore().get().find (*iter); - + MWBase::Environment::get().getWorld()->getStore().get().find (iter->first); + if (spell->mData.mFlags & ESM::Spell::ST_Disease) return true; } - + return false; } @@ -95,12 +95,12 @@ namespace MWMechanics for (TIterator iter = mSpells.begin(); iter!=mSpells.end(); ++iter) { const ESM::Spell *spell = - MWBase::Environment::get().getWorld()->getStore().get().find (*iter); - + MWBase::Environment::get().getWorld()->getStore().get().find (iter->first); + if (spell->mData.mFlags & ESM::Spell::ST_Blight) return true; } - - return false; + + return false; } } diff --git a/apps/openmw/mwmechanics/spells.hpp b/apps/openmw/mwmechanics/spells.hpp index 12308661b..b4d058896 100644 --- a/apps/openmw/mwmechanics/spells.hpp +++ b/apps/openmw/mwmechanics/spells.hpp @@ -1,7 +1,7 @@ #ifndef GAME_MWMECHANICS_SPELLS_H #define GAME_MWMECHANICS_SPELLS_H -#include +#include #include namespace ESM @@ -21,12 +21,12 @@ namespace MWMechanics { public: - typedef std::vector TContainer; + typedef std::map TContainer; // ID, magnitude typedef TContainer::const_iterator TIterator; private: - std::vector mSpells; + TContainer mSpells; std::string mSelectedSpell; void addSpell (const ESM::Spell *, MagicEffects& effects) const; @@ -55,10 +55,10 @@ namespace MWMechanics const std::string getSelectedSpell() const; ///< May return an empty string. - + bool hasCommonDisease() const; - bool hasBlightDisease() const; + bool hasBlightDisease() const; }; } diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 31ea7518b..530d44c9d 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -485,7 +485,7 @@ namespace MWScript for (MWMechanics::Spells::TIterator iter ( MWWorld::Class::get (ptr).getCreatureStats (ptr).getSpells().begin()); iter!=MWWorld::Class::get (ptr).getCreatureStats (ptr).getSpells().end(); ++iter) - if (*iter==id) + if (iter->first==id) { value = 1; break; @@ -1188,7 +1188,7 @@ namespace MWScript extensions.registerFunction ("getpccrimelevel", 'f', "", opcodeGetPCCrimeLevel); extensions.registerInstruction ("setpccrimelevel", "f", opcodeSetPCCrimeLevel); extensions.registerInstruction ("modpccrimelevel", "f", opcodeModPCCrimeLevel); - + extensions.registerInstruction ("addspell", "c", opcodeAddSpell, opcodeAddSpellExplicit); extensions.registerInstruction ("removespell", "c", opcodeRemoveSpell, opcodeRemoveSpellExplicit); @@ -1286,7 +1286,7 @@ namespace MWScript interpreter.installSegment5 (opcodeGetPCCrimeLevel, new OpGetPCCrimeLevel); interpreter.installSegment5 (opcodeSetPCCrimeLevel, new OpSetPCCrimeLevel); interpreter.installSegment5 (opcodeModPCCrimeLevel, new OpModPCCrimeLevel); - + interpreter.installSegment5 (opcodeAddSpell, new OpAddSpell); interpreter.installSegment5 (opcodeAddSpellExplicit, new OpAddSpell); interpreter.installSegment5 (opcodeRemoveSpell, new OpRemoveSpell);