Core/Packets: Added CMSG_SET_ACTION_BUTTON packet

This commit is contained in:
Intel
2014-12-01 02:03:06 +02:00
parent 3e7e3f2b6e
commit 60ea1265c2
5 changed files with 29 additions and 10 deletions

View File

@@ -52,6 +52,7 @@
#include "Group.h"
#include "AccountMgr.h"
#include "Spell.h"
#include "SpellPackets.h"
#include "BattlegroundMgr.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
@@ -1038,17 +1039,17 @@ int32 WorldSession::HandleEnableNagleAlgorithm()
return 0;
}
void WorldSession::HandleSetActionButtonOpcode(WorldPacket& recvData)
void WorldSession::HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet)
{
uint8 button;
uint32 packetData;
recvData >> button >> packetData;
TC_LOG_DEBUG("network", "CMSG_SET_ACTION_BUTTON Button: %u Data: %u", button, packetData);
uint32 action = ACTION_BUTTON_ACTION(packet.Action);
uint32 type = ACTION_BUTTON_TYPE(packet.Action);
if (!packetData)
GetPlayer()->removeActionButton(button);
TC_LOG_DEBUG("network", "CMSG_SET_ACTION_BUTTON Button: %u Action: %u Type: %u", packet.Index, action, type);
if (!packet.Action)
GetPlayer()->removeActionButton(packet.Index);
else
GetPlayer()->addActionButton(button, ACTION_BUTTON_ACTION(packetData), ACTION_BUTTON_TYPE(packetData));
GetPlayer()->addActionButton(packet.Index, action, type);
}
void WorldSession::HandleCompleteCinematic(WorldPacket& /*recvData*/)

View File

@@ -57,6 +57,12 @@ WorldPacket const* WorldPackets::Spells::UpdateActionButtons::Write()
return &_worldPacket;
}
void WorldPackets::Spells::SetActionButton::Read()
{
_worldPacket >> Action;
_worldPacket >> Index;
}
WorldPacket const* WorldPackets::Spells::SendUnlearnSpells::Write()
{
_worldPacket << uint32(Spells.size());

View File

@@ -77,6 +77,17 @@ namespace WorldPackets
*/
};
class SetActionButton final : public ClientPacket
{
public:
SetActionButton(WorldPacket&& packet) : ClientPacket(CMSG_SET_ACTION_BUTTON, std::move(packet)) {}
void Read() override;
uint64 Action = 0; ///< two packed uint32 (action and type)
uint8 Index = 0;
};
class SendUnlearnSpells final : public ServerPacket
{
public:

View File

@@ -576,7 +576,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_SEND_SOR_REQUEST_VIA_BNET_ACCOUNT_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SETSHEATHED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleSetSheathedOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTIONBAR_TOGGLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionBarToggles );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTION_BUTTON, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionButtonOpcode );
DEFINE_HANDLER(CMSG_SET_ACTION_BUTTON, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::SetActionButton, &WorldSession::HandleSetActionButtonOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTIVE_MOVER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveMoverOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTIVE_VOICE_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveVoiceChannel ); // STATUS_AUTHED
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ALLOW_LOW_LEVEL_RAID1, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );

View File

@@ -141,6 +141,7 @@ namespace WorldPackets
namespace Spells
{
class SpellCastRequest;
class SetActionButton;
}
namespace Talent
@@ -680,7 +681,7 @@ class WorldSession
void HandleUpdateAccountData(WorldPackets::ClientConfig::UserClientUpdateAccountData& packet);
void HandleRequestAccountData(WorldPackets::ClientConfig::RequestAccountData& request);
void HandleSetActionButtonOpcode(WorldPacket& recvPacket);
void HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet);
void HandleGameObjectUseOpcode(WorldPacket& recPacket);
void HandleMeetingStoneInfo(WorldPacket& recPacket);