From 1195d7c190582f0b95f0afef7660cd108fcbd8c3 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Mon, 20 Nov 2023 20:06:54 +0100 Subject: Core/Players: re-implement talents *todo: class restriction and talent tier checks and remove the now useless learn all talents command --- src/server/game/Server/Packets/TalentPackets.cpp | 6 ++++++ src/server/game/Server/Packets/TalentPackets.h | 13 ++++++++++++- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/WorldSession.h | 2 ++ 4 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index d715348d90f..4237f45f7c7 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -78,6 +78,12 @@ void WorldPackets::Talent::LearnTalents::Read() _worldPacket >> Talents[i]; } +void WorldPackets::Talent::LearnTalent::Read() +{ + _worldPacket >> TalentID; + _worldPacket >> RequestedRank; +} + WorldPacket const* WorldPackets::Talent::RespecWipeConfirm::Write() { _worldPacket << int8(RespecType); diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index 494866575ae..9bcd2418ca9 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -42,7 +42,7 @@ namespace WorldPackets struct TalentGroupInfo { int32 SpecID = 0; - std::vector Talents; + std::vector Talents; std::vector GlyphIDs; }; @@ -143,6 +143,17 @@ namespace WorldPackets int32 SpellID = 0; std::vector Talents; }; + + class LearnTalent final : public ClientPacket + { + public: + LearnTalent(WorldPacket&& packet) : ClientPacket(CMSG_LEARN_TALENT, std::move(packet)) { } + + void Read() override; + + int32 TalentID = 0; + uint16 RequestedRank = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 9a1279a183d..82b7ddd7c7f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -557,7 +557,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_LEARN_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnTalentsOpcode); DEFINE_HANDLER(CMSG_LEARN_PREVIEW_TALENTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LEARN_PREVIEW_TALENTS_PET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_LEARN_TALENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LEARN_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnTalentOpcode); 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); DEFINE_HANDLER(CMSG_LFG_LIST_APPLY_TO_GROUP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 3d29bc83b7e..c974768ff78 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -733,6 +733,7 @@ namespace WorldPackets namespace Talent { + class LearnTalent; class LearnTalents; class LearnPvpTalents; class ConfirmRespecWipe; @@ -1514,6 +1515,7 @@ class TC_GAME_API WorldSession void HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTalents& packet); void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet); + void HandleLearnTalentOpcode(WorldPackets::Talent::LearnTalent& packet); void HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe); void HandleUnlearnSkillOpcode(WorldPackets::Spells::UnlearnSkill& packet); void HandleTradeSkillSetFavorite(WorldPackets::Spells::TradeSkillSetFavorite const& tradeSkillSetFavorite); -- cgit v1.2.3