public void CheckEnter(BaseBoat boat) { if (boat == null || this.Map == null || this.Map == Map.Internal) { return; } //Do not enter corgul region if we aren't in this region anymore Region r = Region.Find(boat.Location, boat.Map); if (r != null && !r.IsPartOf(this)) { return; } Map map = this.Map; List <ISpawnable> list = boat.GetObjectsOnBoard(); List <PlayerMobile> pms = new List <PlayerMobile>(); bool hasMap = false; foreach (ISpawnable i in list) { if (i is PlayerMobile && ((PlayerMobile)i).NetState != null) { pms.Add((PlayerMobile)i); PlayerMobile pm = (PlayerMobile)i; if (pm.Backpack == null) { continue; } Item item = pm.Backpack.FindItemByType(typeof(CorgulIslandMap)); if (item != null && item is CorgulIslandMap && this.Contains(((CorgulIslandMap)item).DestinationPoint)) { hasMap = true; break; } } } if (hasMap) { int x = boat.X - m_Bounds.X; int y = boat.Y - m_Bounds.Y; int z = map.GetAverageZ(x, y); Point3D ePnt = new Point3D(CorgulAltar.CorgulBounds.X + x, CorgulAltar.CorgulBounds.Y + y, 0); int offsetX = ePnt.X - boat.X; int offsetY = ePnt.Y - boat.Y; int offsetZ = map.GetAverageZ(ePnt.X, ePnt.Y) - boat.Z; if (boat.CanFit(ePnt, this.Map, boat.ItemID)) { boat.Teleport(offsetX, offsetY, offsetZ); //int z = this.Map.GetAverageZ(boat.X, boat.Y); if (boat.Z != 0) { boat.Z = 0; } if (boat.TillerMan != null) { boat.TillerManSay(501425); //Ar, turbulent water! } } else { boat.StopMove(true); boat.SendMessageToAllOnBoard("The boat has struck a coral reef!"); } } }