diff options
Diffstat (limited to 'src/server/game/Handlers/SpellHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 24 |
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); +} |