diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 2b4df9849..4c4f8c238 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -172,28 +172,37 @@ inline void MaNGOS::DynamicObjectUpdater::VisitHelper(Unit* target) return; // Apply PersistentAreaAura on target - + // in case 2 dynobject overlap areas for same spell, same holder is selected, so dynobjects share holder SpellAuraHolder *holder = target->GetSpellAuraHolder(spellInfo->Id, i_dynobject.GetCaster()->GetGUID()); - - bool addedToExisting = true; - if (!holder) - { - holder = CreateSpellAuraHolder(spellInfo, target, i_dynobject.GetCaster()); - addedToExisting = false; - - } - PersistentAreaAura* Aur = new PersistentAreaAura(spellInfo, eff_index, NULL, holder, target, i_dynobject.GetCaster()); - holder->AddAura(Aur, eff_index); - if (addedToExisting) + if (holder) { - target->AddAuraToModList(Aur); - holder->SetInUse(true); - Aur->ApplyModifier(true,true); - holder->SetInUse(false); + if (Aura* aura = holder->GetAuraByEffectIndex(eff_index)) + { + // already exists, refresh duration + if (aura->GetAuraDuration() < i_dynobject.GetDuration()) + { + aura->SetAuraDuration(i_dynobject.GetDuration()); + holder->SendAuraUpdate(false); + } + } + else + { + PersistentAreaAura* Aur = new PersistentAreaAura(spellInfo, eff_index, NULL, holder, target, i_dynobject.GetCaster()); + holder->AddAura(Aur, eff_index); + target->AddAuraToModList(Aur); + holder->SetInUse(true); + Aur->ApplyModifier(true,true); + holder->SetInUse(false); + } } else + { + holder = CreateSpellAuraHolder(spellInfo, target, i_dynobject.GetCaster()); + PersistentAreaAura* Aur = new PersistentAreaAura(spellInfo, eff_index, NULL, holder, target, i_dynobject.GetCaster()); + holder->AddAura(Aur, eff_index); target->AddSpellAuraHolder(holder); + } i_dynobject.AddAffected(target); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9f2d60cec..eb780fdcd 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10334" + #define REVISION_NR "10335" #endif // __REVISION_NR_H__