aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Creature
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities/Creature')
-rw-r--r--src/server/game/Entities/Creature/Trainer.cpp9
-rw-r--r--src/server/game/Entities/Creature/Trainer.h3
2 files changed, 9 insertions, 3 deletions
diff --git a/src/server/game/Entities/Creature/Trainer.cpp b/src/server/game/Entities/Creature/Trainer.cpp
index 013d8c73453..d1df0ca9d9b 100644
--- a/src/server/game/Entities/Creature/Trainer.cpp
+++ b/src/server/game/Entities/Creature/Trainer.cpp
@@ -82,8 +82,8 @@ namespace Trainer
player->SendPlaySpellVisualKit(362, 1, 0); // 113 EmoteSalute
// learn explicitly or cast explicitly
- if (trainerSpell->CastSpellId)
- player->CastSpell(player, trainerSpell->CastSpellId, true);
+ if (trainerSpell->IsCastable())
+ player->CastSpell(player, trainerSpell->SpellId, true);
else
player->LearnSpell(trainerSpell->SpellId, false);
}
@@ -135,6 +135,11 @@ namespace Trainer
if (player->getLevel() < trainerSpell->ReqLevel)
return SpellState::Unavailable;
+ // check ranks
+ if (uint32 previousRankSpellId = sSpellMgr->GetPrevSpellInChain(trainerSpell->LearnedSpellId))
+ if (!player->HasSpell(previousRankSpellId))
+ return SpellState::Unavailable;
+
// check additional spell requirement
for (auto const& requirePair : sSpellMgr->GetSpellsRequiredForSpellBounds(trainerSpell->SpellId))
if (!player->HasSpell(requirePair.second))
diff --git a/src/server/game/Entities/Creature/Trainer.h b/src/server/game/Entities/Creature/Trainer.h
index 75558cd3b60..7ef442584be 100644
--- a/src/server/game/Entities/Creature/Trainer.h
+++ b/src/server/game/Entities/Creature/Trainer.h
@@ -59,7 +59,8 @@ namespace Trainer
std::array<uint32, 3> ReqAbility = { };
uint8 ReqLevel = 0;
- uint32 CastSpellId = 0;
+ uint32 LearnedSpellId = 0;
+ bool IsCastable() const { return LearnedSpellId != SpellId; }
};
class Trainer