aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-05-02 16:14:41 +0200
committerShauren <shauren.trinity@gmail.com>2022-05-02 16:14:41 +0200
commitd818add0e20fcf2c86ef46b5cd94f942488511a0 (patch)
treefc996f31de4c2ffc98ec41d7368860a536904ec1 /src/server/game/Entities/Unit
parent4ef983f689177660f2d4c16c7063040c7fb0236d (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.cpp20
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();
}
}
}