diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 2f84ad32f2c..a143dd6056a 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -451,13 +451,22 @@ PlayerAI::TargetedSpell PlayerAI::VerifySpellCast(uint32 spellId, Unit* target) // Find highest spell rank that we know uint32 knownRank, nextRank; if (me->HasSpell(spellId)) + { // this will save us some lookups if the player has the highest rank (expected case) - nextRank = sSpellMgr->GetNextSpellInChain(knownRank = spellId); + knownRank = spellId; + nextRank = sSpellMgr->GetNextSpellInChain(spellId); + } else - knownRank = 0, nextRank = sSpellMgr->GetFirstSpellInChain(spellId); + { + knownRank = 0; + nextRank = sSpellMgr->GetFirstSpellInChain(spellId); + } while (nextRank && me->HasSpell(nextRank)) - nextRank = sSpellMgr->GetNextSpellInChain(knownRank = nextRank); + { + knownRank = nextRank; + nextRank = sSpellMgr->GetNextSpellInChain(knownRank); + } if (!knownRank) return {}; diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h index 2d7adc6c551..b06f81f76c9 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.h +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -40,7 +40,8 @@ class TC_GAME_API PlayerAI : public UnitAI protected: struct TargetedSpell : public std::pair { - using std::pair::pair; + TargetedSpell() : pair() { } + TargetedSpell(Spell* first, Unit* second) : pair(first, second) { } explicit operator bool() { return !!first; } }; typedef std::pair PossibleSpell;