mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 00:18:43 +01:00
Core/Packets: added opcode handlers and packet structures for CMSG_LEARN_TALENT and CMSG_SET_PRIMARY_TALENT_TREE
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user