protected override void OnTick() { IDictionary effects = m_handler.m_concEffects; GameLiving caster = (GameLiving)m_actionSource; lock (effects) { if (effects.Count <= 0) { Stop(); // all effects were canceled, stop the timer return; } ArrayList disableEffects = null; ArrayList enableEffects = null; foreach (DictionaryEntry de in effects) { GameSpellEffect effect = (GameSpellEffect)de.Key; GameLiving effectOwner = effect.Owner; if (caster == effectOwner) { continue; } // DOLConsole.WriteLine(Caster.Name+" to "+effectOwner.Name+" range="+range); if (!caster.IsWithinRadius(effectOwner, CONC_MAX_RANGE)) { if (de.Value != null) { // owner is out of range and effect is still active, disable it if (disableEffects == null) { disableEffects = new ArrayList(1); } disableEffects.Add(effect); } } else if (de.Value == null) { // owner entered the range and effect was disabled, enable it now if (enableEffects == null) { enableEffects = new ArrayList(1); } enableEffects.Add(effect); } } if (enableEffects != null) { foreach (GameSpellEffect fx in enableEffects) { m_handler.EnableEffect(fx); } } if (disableEffects != null) { foreach (GameSpellEffect fx in disableEffects) { m_handler.DisableEffect(fx); } } } }