Server.Items.SOS.FindLocation C# (CSharp) Method

FindLocation() public static method

public static FindLocation ( Map map ) : Point3D
map Map
return Point3D
		public static Point3D FindLocation( Map map )
		{
			if ( map == null || map == Map.Internal )
				return Point3D.Zero;

			Rectangle2D[] regions;

			if ( map == Map.Felucca )
				regions = m_BritRegions;
			else
				regions = new Rectangle2D[]{ new Rectangle2D( 0, 0, map.Width, map.Height ) };

			if ( regions.Length == 0 )
				return Point3D.Zero;

			for ( int i = 0; i < 50; ++i )
			{
				Rectangle2D reg = regions[Utility.Random( regions.Length )];
				int x = Utility.Random( reg.X, reg.Width );
				int y = Utility.Random( reg.Y, reg.Height );

				if ( !ValidateDeepWater( map, x, y ) )
					continue;

				bool valid = true;

				for ( int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5 )
				{
					if ( !ValidateDeepWater( map, x + offset, y + offset ) )
						valid = false;
					else if ( !ValidateDeepWater( map, x + offset, y - offset ) )
						valid = false;
					else if ( !ValidateDeepWater( map, x - offset, y + offset ) )
						valid = false;
					else if ( !ValidateDeepWater( map, x - offset, y - offset ) )
						valid = false;
				}

				if ( valid )
					return new Point3D( x, y, 0 );
			}

			return Point3D.Zero;
		}

Usage Example

Ejemplo n.º 1
0
        public static void ExpireSchool(Map map, SchoolEntry entry)
        {
            if (Schools.ContainsKey(map) && Schools[map].Contains(entry))
            {
                Schools[map].Remove(entry);

                Point3D p;
                int     failsafe = 0;

                do
                {
                    p = SOS.FindLocation(map);
                    failsafe++;
                }while (p == Point3D.Zero && failsafe < 10);

                Schools[map].Add(new SchoolEntry(map, new Point2D(p.X, p.Y)));
            }
        }
All Usage Examples Of Server.Items.SOS::FindLocation