void DynamicObject::Delay(int32 delaytime) { m_aliveDuration -= delaytime; for (GuidSet::iterator iter = m_affected.begin(); iter != m_affected.end();) { Unit* target = GetMap()->GetUnit((*iter)); if (target) { SpellAuraHolderPtr holder = target->GetSpellAuraHolder(m_spellId, GetCasterGuid()); if (!holder || holder->IsDeleted()) { ++iter; continue; } bool foundAura = false; for (int32 i = m_effIndex + 1; i < MAX_EFFECT_INDEX; ++i) { SpellEffectEntry const* effectEntry = holder->GetSpellProto()->GetSpellEffect(SpellEffectIndex(i)); if(!effectEntry) continue; if ((effectEntry->Effect == SPELL_EFFECT_PERSISTENT_AREA_AURA || effectEntry->Effect == SPELL_EFFECT_ADD_FARSIGHT) && holder->GetAuraByEffectIndex(SpellEffectIndex(i))) { foundAura = true; break; } } if (foundAura) { ++iter; continue; } target->DelaySpellAuraHolder(m_spellId, delaytime, GetCasterGuid()); ++iter; } else m_affected.erase(iter++); } }
void DynamicObject::Delay(int32 delaytime) { m_aliveDuration -= delaytime; for(AffectedSet::iterator iter = m_affected.begin(); iter != m_affected.end(); ) { Unit *target = GetMap()->GetUnit((*iter)); if (target) { SpellAuraHolder *holder = target->GetSpellAuraHolder(m_spellId, GetCasterGuid()); if (!holder) { ++iter; continue; } bool foundAura = false; for (int32 i = m_effIndex + 1; i < MAX_EFFECT_INDEX; ++i) { if ((holder->GetSpellProto()->Effect[i] == SPELL_EFFECT_PERSISTENT_AREA_AURA || holder->GetSpellProto()->Effect[i] == SPELL_EFFECT_ADD_FARSIGHT) && holder->m_auras[i]) { foundAura = true; break; } } if (foundAura) { ++iter; continue; } target->DelaySpellAuraHolder(m_spellId, delaytime, GetCasterGuid()); ++iter; } else m_affected.erase(iter++); } }