aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/SpellHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/SpellHandler.cpp')
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 19c7f9eea81..69e643eb00b 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -731,3 +731,27 @@ void WorldSession::HandleUpdateProjectilePosition(WorldPacket& recvPacket)
data << float(z);
caster->SendMessageToSet(&data, true);
}
+
+void WorldSession::HandleRequestCategoryCooldowns(WorldPacket& /*recvPacket*/)
+{
+ std::map<uint32, int32> categoryMods;
+ Unit::AuraEffectList const& categoryCooldownAuras = _player->GetAuraEffectsByType(SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN);
+ for (Unit::AuraEffectList::const_iterator itr = categoryCooldownAuras.begin(); itr != categoryCooldownAuras.end(); ++itr)
+ {
+ std::map<uint32, int32>::iterator cItr = categoryMods.find((*itr)->GetMiscValue());
+ if (cItr == categoryMods.end())
+ categoryMods[(*itr)->GetMiscValue()] = (*itr)->GetAmount();
+ else
+ cItr->second += (*itr)->GetAmount();
+ }
+
+ WorldPacket data(SMSG_SPELL_CATEGORY_COOLDOWN, 11);
+ data.WriteBits(categoryMods.size(), 23);
+ for (std::map<uint32, int32>::const_iterator itr = categoryMods.begin(); itr != categoryMods.end(); ++itr)
+ {
+ data << uint32(itr->first);
+ data << int32(-itr->second);
+ }
+
+ SendPacket(&data);
+}