public override void OnEnter(Mobile m) { if (m.AccessLevel > AccessLevel.Player) { return; } if (!IsInStartRegion(m.Location) && m is BaseCreature && !(m is DespiseCreature) && !(m is CorruptedWisp) && !(m is EnsorcledWisp) && ((BaseCreature)m).Controlled) { KickFromRegion(m, false); } if (m is PlayerMobile && IsInLowerRegion(m.Location)) { WispOrb orb = DespiseController.GetWispOrb(m); if (orb == null) { Timer.DelayCall(TimeSpan.FromSeconds(1), new TimerStateCallback(Kick_Callback), m); } } }
private void KickFromRegion(Mobile m, bool telepet) { while (true) { int x = Utility.RandomMinMax(m_KickBounds.X, m_KickBounds.X + m_KickBounds.Width); int y = Utility.RandomMinMax(m_KickBounds.Y, m_KickBounds.Y + m_KickBounds.Height); int z = Map.Trammel.GetAverageZ(x, y); Point3D p = new Point3D(x, y, z); if (this.Map.CanSpawnMobile(p)) { if (m.Corpse != null) { m.Corpse.MoveToWorld(p, Map.Trammel); } m.MoveToWorld(p, Map.Trammel); if (telepet) { WispOrb.TeleportPet(m); } else { WispOrb orb = DespiseController.GetWispOrb(m); if (orb != null && orb.Pet != null) { orb.Pet.Kill(); } } break; } } }