aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp37
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h4
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,