diff options
Diffstat (limited to 'src/server/game/Handlers/SkillHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/SkillHandler.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index f802c651f60..fc1741c6885 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -51,6 +51,30 @@ void WorldSession::HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& _player->SendTalentsInfoData(); } +void WorldSession::HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTalents& packet) +{ + WorldPackets::Talent::LearnPvpTalentsFailed learnPvpTalentsFailed; + bool anythingLearned = false; + for (uint32 talentId : packet.Talents) + { + if (TalentLearnResult result = _player->LearnPvpTalent(talentId, &learnPvpTalentsFailed.SpellID)) + { + if (!learnPvpTalentsFailed.Reason) + learnPvpTalentsFailed.Reason = result; + + learnPvpTalentsFailed.Talents.push_back(talentId); + } + else + anythingLearned = true; + } + + if (learnPvpTalentsFailed.Reason) + SendPacket(learnPvpTalentsFailed.Write()); + + if (anythingLearned) + _player->SendTalentsInfoData(); +} + void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe) { Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER); |