From 19791a35df11e2c5c42ee437bfc13466c708ea43 Mon Sep 17 00:00:00 2001 From: Ghaster Date: Thu, 3 Jan 2019 16:52:22 +0100 Subject: Core/Creature: Profession trainer fixes (PR #22904) Closes #22903 --- src/server/game/Entities/Creature/Trainer.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Entities/Creature/Trainer.cpp b/src/server/game/Entities/Creature/Trainer.cpp index 10a3a47571a..266e96df27f 100644 --- a/src/server/game/Entities/Creature/Trainer.cpp +++ b/src/server/game/Entities/Creature/Trainer.cpp @@ -48,10 +48,15 @@ namespace Trainer if (!player->IsSpellFitByClassAndRace(trainerSpell.SpellId)) continue; + SpellInfo const* trainerSpellInfo = sSpellMgr->AssertSpellInfo(trainerSpell.SpellId); + bool primaryProfessionFirstRank = false; - for (int32 reqAbility : trainerSpell.ReqAbility) + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - SpellInfo const* learnedSpellInfo = sSpellMgr->GetSpellInfo(reqAbility); + if (trainerSpellInfo->Effects[i].Effect != SPELL_EFFECT_LEARN_SPELL) + continue; + + SpellInfo const* learnedSpellInfo = sSpellMgr->GetSpellInfo(trainerSpellInfo->Effects[i].TriggerSpell); if (learnedSpellInfo && learnedSpellInfo->IsPrimaryProfessionFirstRank()) primaryProfessionFirstRank = true; } @@ -132,8 +137,16 @@ namespace Trainer return false; SpellInfo const* trainerSpellInfo = sSpellMgr->AssertSpellInfo(trainerSpell->SpellId); - if (trainerSpellInfo->IsPrimaryProfessionFirstRank() && !player->GetFreePrimaryProfessionPoints()) - return false; + + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + if (trainerSpellInfo->Effects[i].Effect != SPELL_EFFECT_LEARN_SPELL) + continue; + + SpellInfo const* learnedSpellInfo = sSpellMgr->GetSpellInfo(trainerSpellInfo->Effects[i].TriggerSpell); + if (learnedSpellInfo && learnedSpellInfo->IsPrimaryProfessionFirstRank() && !player->GetFreePrimaryProfessionPoints()) + return false; + } return true; } -- cgit v1.2.3