aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-07-24 22:10:54 +0200
committerOvahlord <dreadkiller@gmx.de>2024-07-25 23:15:33 +0200
commit09885238ac6860c51e8bb3bd971069e0358dc7cc (patch)
tree399cfd540d44737cd86479dbf69591397e5cee6c
parentddbcf5f60b7a9fc99a2b8075520a6dee16825ea9 (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.cpp26
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/TalentPackets.h18
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rw-r--r--src/server/game/Server/WorldSession.h6
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);