public void DoSpecialAbility() { // build target list List<Mobile> mlist = new List<Mobile>(); foreach (Mobile mob in this.Map.GetMobilesInRange(this.Location, this.RangePerception)) { if (null != mob && !mob.Deleted && !mob.Paralyzed && AccessLevel.Player == mob.AccessLevel) mlist.Add(mob); } // pick a random target and sling the web if (0 != mlist.Count) { int i = Utility.Random(mlist.Count); Mobile m = mlist.ToArray()[i]; this.Direction = this.GetDirectionTo(m); Item web = new NavreyParalyzingWeb(); if (Utility.RandomDouble() > 0.1) m.Paralyze(TimeSpan.FromSeconds(15)); web.MoveToWorld(m.Location, this.Map); } }
public void DoSpecialAbility() { // build target list List<Mobile> mlist = new List<Mobile>(); IPooledEnumerable eable = this.GetMobilesInRange(12); foreach (Mobile mob in eable) { if (mob == null || mob == this || !mob.Alive || mob.Hidden || !CanSee(mob)|| !CanBeHarmful(mob) || mob.AccessLevel > AccessLevel.Player) continue; if (m_Table.ContainsKey(mob)) continue; if (mob.Player) mlist.Add(mob); else if (mob is BaseCreature && (((BaseCreature)mob).Summoned || ((BaseCreature)mob).Controlled)) mlist.Add(mob); } eable.Free(); // pick a random target and sling the web if (mlist.Count > 0) { Mobile m = mlist[Utility.Random(mlist.Count)]; Direction = GetDirectionTo(m); TimeSpan duration = TimeSpan.FromSeconds(Utility.RandomMinMax(5, 10)); Item web = new NavreyParalyzingWeb(duration, m); Effects.SendMovingParticles(this, m, web.ItemID, 12, 0, false, false, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100); Timer.DelayCall(TimeSpan.FromSeconds(0.5), new TimerStateCallback(ThrowWeb_Callback), new object[] { web, m, duration }); Combatant = m; m_Table[m] = web as NavreyParalyzingWeb; } }