diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-05-02 16:14:41 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-05-02 16:14:41 +0200 |
| commit | d818add0e20fcf2c86ef46b5cd94f942488511a0 (patch) | |
| tree | fc996f31de4c2ffc98ec41d7368860a536904ec1 /src/server/game/Entities/Unit | |
| parent | 4ef983f689177660f2d4c16c7063040c7fb0236d (diff) | |
Core/Auras: Added support for SPELL_ATTR5_LIMIT_N limit to other number than just 1
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2dd429741f4..6a5ab4627f7 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3183,18 +3183,18 @@ void Unit::_AddAura(UnitAura* aura, Unit* caster) // register single target aura caster->GetSingleCastAuras().push_back(aura); + + std::queue<Aura*> aurasSharingLimit; // remove other single target auras - Unit::AuraList& scAuras = caster->GetSingleCastAuras(); - for (Unit::AuraList::iterator itr = scAuras.begin(); itr != scAuras.end();) + for (Aura* scAura : caster->GetSingleCastAuras()) + if (scAura != aura && scAura->IsSingleTargetWith(aura)) + aurasSharingLimit.push(scAura); + + uint32 maxOtherAuras = aura->GetSpellInfo()->MaxAffectedTargets - 1; + while (aurasSharingLimit.size() > maxOtherAuras) { - if ((*itr) != aura && - (*itr)->IsSingleTargetWith(aura)) - { - (*itr)->Remove(); - itr = scAuras.begin(); - } - else - ++itr; + aurasSharingLimit.front()->Remove(); + aurasSharingLimit.pop(); } } } |
