diff options
author | Jeremy <Golrag@users.noreply.github.com> | 2018-03-04 22:32:08 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-03-04 22:32:08 +0100 |
commit | f411b7a90e4900c9e2df7c1e0c7a301360408cec (patch) | |
tree | 9793744cf0749d37bb13d6d69355b8672e5f6c34 /src/server/game/Handlers/SkillHandler.cpp | |
parent | e0eafc1cac9d840f897f9269e8440aaebfab6a96 (diff) |
Core/Player: Implement PvP Talents (#19962)
* SPELL_AURA_119 -> SPELL_AURA_PVP_TALENTS
* Learn Honorable Medallion when pvp rules are enabled
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); |