diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-07-24 22:10:54 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-07-25 23:15:33 +0200 |
commit | 09885238ac6860c51e8bb3bd971069e0358dc7cc (patch) | |
tree | 399cfd540d44737cd86479dbf69591397e5cee6c | |
parent | ddbcf5f60b7a9fc99a2b8075520a6dee16825ea9 (diff) |
Core/Packets: added opcode handlers and packet structures for CMSG_LEARN_TALENT and CMSG_SET_PRIMARY_TALENT_TREE
-rw-r--r-- | src/server/game/Handlers/SkillHandler.cpp | 26 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TalentPackets.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TalentPackets.h | 18 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 6 |
5 files changed, 34 insertions, 31 deletions
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 58c6c39f1ab..9892f0e3c3d 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -26,34 +26,18 @@ #include "SpellPackets.h" #include "TalentPackets.h" -void WorldSession::HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet) +void WorldSession::HandleLearnTalentOpcode(WorldPackets::Talent::LearnTalent& /*packet*/) { - WorldPackets::Talent::LearnTalentFailed learnTalentFailed; - bool anythingLearned = false; - for (uint32 talentId : packet.Talents) - { - if (TalentLearnResult result = _player->LearnTalent(talentId, &learnTalentFailed.SpellID)) - { - if (!learnTalentFailed.Reason) - learnTalentFailed.Reason = result; - - learnTalentFailed.Talents.push_back(talentId); - } - else - anythingLearned = true; - } - - if (learnTalentFailed.Reason) - SendPacket(learnTalentFailed.Write()); - - if (anythingLearned) - _player->SendTalentsInfoData(); } void WorldSession::HandleLearnPreviewTalentsOpcode(WorldPackets::Talent::LearnPreviewTalents& /*packet*/) { } +void WorldSession::HandleSetPrimaryTalentTreeOpcode(WorldPackets::Talent::SetPrimaryTalentTree& /*packet*/) +{ +} + void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe) { Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE); diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index 790f1703742..1991f944b5e 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -60,11 +60,10 @@ WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() return &_worldPacket; } -void WorldPackets::Talent::LearnTalents::Read() +void WorldPackets::Talent::LearnTalent::Read() { - Talents.resize(_worldPacket.ReadBits(6)); - for (uint32 i = 0; i < Talents.size(); ++i) - _worldPacket >> Talents[i]; + _worldPacket >> TalentID; + _worldPacket >> TalentTab; } WorldPacket const* WorldPackets::Talent::RespecWipeConfirm::Write() @@ -119,3 +118,8 @@ void WorldPackets::Talent::LearnPreviewTalents::Read() for (TalentInfo& talent : Talents) _worldPacket >> talent; } + +void WorldPackets::Talent::SetPrimaryTalentTree::Read() +{ + _worldPacket >> TalentTab; +} diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index aab470db9e0..d506be27a20 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -60,13 +60,15 @@ namespace WorldPackets TalentInfoUpdate Info; }; - class LearnTalents final : public ClientPacket + class LearnTalent final : public ClientPacket { public: - LearnTalents(WorldPacket&& packet) : ClientPacket(CMSG_LEARN_TALENTS, std::move(packet)) { } + LearnTalent(WorldPacket&& packet) : ClientPacket(CMSG_LEARN_TALENT, std::move(packet)) { } void Read() override; - Array<uint16, MAX_TALENT_TIERS> Talents; + + uint32 TalentID = 0; + uint16 TalentTab = 0; }; class LearnPreviewTalents final : public ClientPacket @@ -80,6 +82,16 @@ namespace WorldPackets Array<TalentInfo, 100> Talents; }; + class SetPrimaryTalentTree final : public ClientPacket + { + public: + SetPrimaryTalentTree(WorldPacket&& packet) : ClientPacket(CMSG_SET_PRIMARY_TALENT_TREE, std::move(packet)) { } + + void Read() override; + + uint32 TalentTab = 0; + }; + class RespecWipeConfirm final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 11825cec0f4..e183516e4cf 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -516,7 +516,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_KEYBOUND_OVERRIDE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleKeyboundOverride); DEFINE_HANDLER(CMSG_LATENCY_REPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LEARN_PVP_TALENTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_LEARN_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnTalentsOpcode); + DEFINE_HANDLER(CMSG_LEARN_TALENT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnTalentOpcode); DEFINE_HANDLER(CMSG_LEARN_PREVIEW_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnPreviewTalentsOpcode); DEFINE_HANDLER(CMSG_LEAVE_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveGroupOpcode); DEFINE_HANDLER(CMSG_LEAVE_PET_BATTLE_QUEUE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -854,6 +854,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_SET_PET_SLOT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetPetSlot); DEFINE_HANDLER(CMSG_SET_PLAYER_DECLINED_NAMES, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPlayerDeclinedNames); DEFINE_HANDLER(CMSG_SET_PREFERRED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SET_PRIMARY_TALENT_TREE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetPrimaryTalentTreeOpcode); DEFINE_HANDLER(CMSG_SET_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPvP); DEFINE_HANDLER(CMSG_SET_RAID_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRaidDifficultyOpcode); DEFINE_HANDLER(CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRestrictPingsToAssistants); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 6a42e4c474f..b91ae39b691 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -710,9 +710,10 @@ namespace WorldPackets namespace Talent { - class LearnTalents; + class LearnTalent; class LearnPreviewTalents; class ConfirmRespecWipe; + class SetPrimaryTalentTree; } namespace Taxi @@ -1492,8 +1493,9 @@ class TC_GAME_API WorldSession void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet); void HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet); - void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet); + void HandleLearnTalentOpcode(WorldPackets::Talent::LearnTalent& packet); void HandleLearnPreviewTalentsOpcode(WorldPackets::Talent::LearnPreviewTalents& packet); + void HandleSetPrimaryTalentTreeOpcode(WorldPackets::Talent::SetPrimaryTalentTree& packet); void HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe); void HandleUnlearnSkillOpcode(WorldPackets::Spells::UnlearnSkill& packet); void HandleTradeSkillSetFavorite(WorldPackets::Spells::TradeSkillSetFavorite const& tradeSkillSetFavorite); |