aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/SkillHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/SkillHandler.cpp')
-rw-r--r--src/server/game/Handlers/SkillHandler.cpp24
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);