aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2023-11-20 20:06:54 +0100
committerOvahlord <dreadkiller@gmx.de>2023-11-20 20:30:12 +0100
commit1195d7c190582f0b95f0afef7660cd108fcbd8c3 (patch)
tree43245aef52986471017058b18b59fdb56b57d62d /src/server/game/Server
parente08019ee56415e19f3343cba88a319402348f08b (diff)
Core/Players: re-implement talents
*todo: class restriction and talent tier checks and remove the now useless learn all talents command
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/TalentPackets.h13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h2
4 files changed, 21 insertions, 2 deletions
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<uint16> Talents;
+ std::vector<TalentInfo> Talents;
std::vector<uint16> GlyphIDs;
};
@@ -143,6 +143,17 @@ namespace WorldPackets
int32 SpellID = 0;
std::vector<PvPTalent> 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);