aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/SpellHandler.cpp
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2014-11-14 02:00:34 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2014-11-14 02:00:34 +0100
commit231207970bf9c28971def453d2622aa17fe36b43 (patch)
tree5ea25a3e290bb536f23b1a48c61a130f1eb11f29 /src/server/game/Handlers/SpellHandler.cpp
parent7e6dadfea68836cc92aaa7e1bb770be620225aa2 (diff)
Core/Packets: updated SMSG_FEATURE_SYSTEM_STATUS, SMSG_INITIAL_SPELLS and SMSG_SPELL_CATEGORY_COOLDOWN
Diffstat (limited to 'src/server/game/Handlers/SpellHandler.cpp')
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 7f76f13495f..424276966d4 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -35,6 +35,7 @@
#include "SpellAuraEffects.h"
#include "Player.h"
#include "Config.h"
+#include "SpellPackets.h"
void WorldSession::HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlags, SpellCastTargets& targets)
{
@@ -754,25 +755,28 @@ void WorldSession::HandleUpdateProjectilePosition(WorldPacket& recvPacket)
void WorldSession::HandleRequestCategoryCooldowns(WorldPacket& /*recvPacket*/)
{
- std::map<uint32, int32> categoryMods;
+ SendSpellCategoryCooldowns();
+}
+
+void WorldSession::SendSpellCategoryCooldowns()
+{
+ WorldPackets::Spell::CategoryCooldown cooldowns;
+
Unit::AuraEffectList const& categoryCooldownAuras = _player->GetAuraEffectsByType(SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN);
- for (Unit::AuraEffectList::const_iterator itr = categoryCooldownAuras.begin(); itr != categoryCooldownAuras.end(); ++itr)
+ for (AuraEffect* aurEff : categoryCooldownAuras)
{
- std::map<uint32, int32>::iterator cItr = categoryMods.find((*itr)->GetMiscValue());
- if (cItr == categoryMods.end())
- categoryMods[(*itr)->GetMiscValue()] = (*itr)->GetAmount();
- else
- cItr->second += (*itr)->GetAmount();
- }
+ uint32 categoryId = aurEff->GetMiscValue();
+ auto cItr = std::find_if(cooldowns.CategoryCooldowns.begin(), cooldowns.CategoryCooldowns.end(),
+ [categoryId](WorldPackets::Spell::CategoryCooldown::CategoryCooldownInfo const& cooldown)
+ {
+ return cooldown.Category == categoryId;
+ });
- WorldPacket data(SMSG_SPELL_CATEGORY_COOLDOWN, 11);
- data.WriteBits(categoryMods.size(), 23);
- data.FlushBits();
- for (std::map<uint32, int32>::const_iterator itr = categoryMods.begin(); itr != categoryMods.end(); ++itr)
- {
- data << uint32(itr->first);
- data << int32(-itr->second);
+ if (cItr == cooldowns.CategoryCooldowns.end())
+ cooldowns.CategoryCooldowns.emplace_back(aurEff->GetMiscValue(), -aurEff->GetAmount());
+ else
+ cItr->ModCooldown -= aurEff->GetAmount();
}
- SendPacket(&data);
+ SendPacket(cooldowns.Write());
}