Esempio n. 1
0
            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);
                        }
                    }
                }
            }