diff options
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
| -rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 4 |
4 files changed, 39 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b6974082604..37ce8029566 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4359,9 +4359,7 @@ void Player::RemoveAllSpellCooldown() { if (!m_spellCooldowns.empty()) { - for (SpellCooldowns::const_iterator itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); ++itr) - SendClearCooldown(itr->first, this); - + SendClearAllCooldowns(this); m_spellCooldowns.clear(); } } @@ -25250,6 +25248,39 @@ void Player::SendClearCooldown(uint32 spell_id, Unit* target) SendDirectMessage(&data); } +void Player::SendClearAllCooldowns(Unit* target) +{ + uint32 spellCount = m_spellCooldowns.size(); + ObjectGuid guid = target ? target->GetGUID() : 0; + + WorldPacket data(SMSG_CLEAR_COOLDOWNS, 4+8); + data.WriteBit(guid[1]); + data.WriteBit(guid[3]); + data.WriteBit(guid[6]); + data.WriteBits(spellCount, 24); // Spell Count + data.WriteBit(guid[7]); + data.WriteBit(guid[5]); + data.WriteBit(guid[2]); + data.WriteBit(guid[4]); + data.WriteBit(guid[0]); + + data.FlushBits(); + + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(guid[4]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[3]); + for (SpellCooldowns::const_iterator itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); ++itr) + data << uint32(itr->first); // Spell ID + + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[6]); + + SendDirectMessage(&data); +} + void Player::ResetMap() { // this may be called during Map::Update diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0f1a60c5c79..b1bd61480de 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1967,6 +1967,7 @@ class Player : public Unit, public GridObject<Player> void RemoveSpellCooldown(uint32 spell_id, bool update = false); void RemoveSpellCategoryCooldown(uint32 cat, bool update = false); void SendClearCooldown(uint32 spell_id, Unit* target); + void SendClearAllCooldowns(Unit* target); GlobalCooldownMgr& GetGlobalCooldownMgr() { return m_GlobalCooldownMgr; } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a69b4cc91c3..116f953b2a3 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -732,7 +732,8 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_CHAT_SERVER_RECONNECTED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_CHAT_WRONG_FACTION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_CLIENTCACHE_VERSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 006ef8fa133..f1159ec6d5c 100755 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -788,7 +788,7 @@ enum Opcodes SMSG_CHAT_WRONG_FACTION = 0x6724, SMSG_CHECK_FOR_BOTS = 0x0000, SMSG_CLEAR_BOSS_EMOTES = 0x19A3, - SMSG_CLEAR_COOLDOWN = 0x0000, + SMSG_CLEAR_COOLDOWN = 0x0627, SMSG_CLEAR_COOLDOWNS = 0x59B4, SMSG_CLEAR_FAR_SIGHT_IMMEDIATE = 0x2A04, SMSG_CLEAR_TARGET = 0x4B26, @@ -813,7 +813,7 @@ enum Opcodes SMSG_COMSAT_RECONNECT_TRY = 0x4D35, SMSG_CONTACT_LIST = 0x6017, SMSG_CONVERT_RUNE = 0x4F14, - SMSG_COOLDOWN_CHEAT = 0x0627, + SMSG_COOLDOWN_CHEAT = 0x4537, SMSG_COOLDOWN_EVENT = 0x4F26, SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE = 0x0E35, SMSG_CORPSE_NOT_IN_INSTANCE = 0x2A14, |
