diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-14 02:00:34 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-14 02:00:34 +0100 |
commit | 231207970bf9c28971def453d2622aa17fe36b43 (patch) | |
tree | 5ea25a3e290bb536f23b1a48c61a130f1eb11f29 /src/server/game/Handlers/SpellHandler.cpp | |
parent | 7e6dadfea68836cc92aaa7e1bb770be620225aa2 (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.cpp | 36 |
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()); } |