From e338954bf6a98b962cd23eecc950d366a79f8aa5 Mon Sep 17 00:00:00 2001 From: Ovalord <1Don7H4v3@m41L.com> Date: Sat, 20 Jan 2018 21:05:49 +0100 Subject: [PATCH] Core/Players: improved iterator handling for drinking and food emote auras --- src/server/game/Entities/Player/Player.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 912e17ff78b..a8757c690e3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2259,25 +2259,23 @@ void Player::RegenerateAll() // 5 seconds over and over again which confirms my theory that we have a independed timer. if (m_foodEmoteTimerCount >= 5000) { - std::vector auraList; + std::vector auraList; AuraEffectList const& ModRegenAuras = GetAuraEffectsByType(SPELL_AURA_MOD_REGEN); AuraEffectList const& ModPowerRegenAuras = GetAuraEffectsByType(SPELL_AURA_MOD_POWER_REGEN); - for (auto itr = ModRegenAuras.begin(); itr != ModRegenAuras.end(); ++itr) - auraList.emplace_back((*itr)->GetBase()); - - for (auto itr = ModPowerRegenAuras.begin(); itr != ModPowerRegenAuras.end(); ++itr) - auraList.emplace_back((*itr)->GetBase()); + auraList.reserve(ModRegenAuras.size() + ModPowerRegenAuras.size()); + auraList.insert(auraList.end(), ModRegenAuras.begin(), ModRegenAuras.end()); + auraList.insert(auraList.end(), ModPowerRegenAuras.begin(), ModPowerRegenAuras.end()); for (auto itr = auraList.begin(); itr != auraList.end(); ++itr) { // Food emote comes above drinking emote if we have to decide (mage regen food for example) - if ((*itr)->HasEffectType(SPELL_AURA_MOD_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) + if ((*itr)->GetBase()->HasEffectType(SPELL_AURA_MOD_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) { SendPlaySpellVisualKit(SPELL_VISUAL_KIT_FOOD, 0, 0); break; } - else if ((*itr)->HasEffectType(SPELL_AURA_MOD_POWER_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) + else if ((*itr)->GetBase()->HasEffectType(SPELL_AURA_MOD_POWER_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) { SendPlaySpellVisualKit(SPELL_VISUAL_KIT_DRINK, 0, 0); break;