diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-03-15 20:09:48 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-03-15 20:09:48 +0100 |
commit | e58e05d9d5da894447b81ded17c3b8fd9f4820a8 (patch) | |
tree | e41b9ed702da6dc1063e8bddd0f270c2d47f0d7b /src/server/game/Handlers/SkillHandler.cpp | |
parent | 51b9e6d2c947d2151af09d7a25af45ff75b0d530 (diff) | |
parent | 11846f5990f5af421ff2fc087925245f61b4ac84 (diff) |
Merge branch '4.3.4' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/game/Handlers/SkillHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/SkillHandler.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 46d3bb435d0..324f7622f21 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -29,18 +29,34 @@ void WorldSession::HandleLearnTalentOpcode(WorldPacket& recvData) { - uint32 talent_id, requested_rank; - recvData >> talent_id >> requested_rank; + uint32 talentId, requestedRank; + recvData >> talentId >> requestedRank; - _player->LearnTalent(talent_id, requested_rank); - _player->SendTalentsInfoData(false); + if (_player->LearnTalent(talentId, requestedRank)) + _player->SendTalentsInfoData(false); } void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_LEARN_PREVIEW_TALENTS"); + int32 tabPage; uint32 talentsCount; + recvPacket >> tabPage; // talent tree + + // prevent cheating (selecting new tree with points already in another) + if (tabPage >= 0) // -1 if player already has specialization + { + if (TalentTabEntry const* talentTabEntry = sTalentTabStore.LookupEntry(_player->GetPrimaryTalentTree(_player->GetActiveSpec()))) + { + if (talentTabEntry->tabpage != uint32(tabPage)) + { + recvPacket.rfinish(); + return; + } + } + } + recvPacket >> talentsCount; uint32 talentId, talentRank; @@ -49,7 +65,11 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket) { recvPacket >> talentId >> talentRank; - _player->LearnTalent(talentId, talentRank); + if (!_player->LearnTalent(talentId, talentRank)) + { + recvPacket.rfinish(); + break; + } } _player->SendTalentsInfoData(false); @@ -72,7 +92,7 @@ void WorldSession::HandleTalentWipeConfirmOpcode(WorldPacket& recvData) if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); - if (!(_player->resetTalents())) + if (!_player->ResetTalents()) { WorldPacket data(MSG_TALENT_WIPE_CONFIRM, 8+4); //you have not any talent data << uint64(0); |