public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
            m_PirateShip_Boat = reader.ReadItem() as PirateShip_Boat;
            boatspawn = reader.ReadBool();
			int version = reader.ReadInt();

        #region Pirate Can Say Random Phrases From A [.txt] File

            active = reader.ReadBool();

        #endregion Pirate Can Say Random Phrases From A [.txt] File

		}
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
            m_PirateShip_Boat = reader.ReadItem() as PirateShip_Boat;
            boatspawn = reader.ReadBool();
			int version = reader.ReadInt();



		}
		public override void OnThink()
		{

        #region Pirate Can Say Random Phrases From A [.txt] File

        if (DateTime.Now >= nextAbilityTime && Combatant == null && active == true)
        {
            nextAbilityTime = DateTime.Now + TimeSpan.FromSeconds(Utility.RandomMinMax(4, 6));

            if (text == null)
            {
                try
            {
                text = new StreamReader(path, System.Text.Encoding.Default, false);
            }
                catch { }
            }
                Talk();
                Emote();
            }

        #endregion Pirate Can Say Random Phrases From A [.txt] File

  		if(boatspawn == false)
  		{
			Map map = this.Map;
  			if ( map == null )
  				return;			
			this.Z = 0;
            m_PirateShip_Boat = new PirateShip_Boat();
  			Point3D loc = this.Location;
  			Point3D loccrew = this.Location;

			loc = new Point3D( this.X, this.Y-1, this.Z-5 );
			loccrew = new Point3D( this.X, this.Y-1, this.Z+1 );

            m_PirateShip_Boat.MoveToWorld(loc, map);
            boatspawn = true;
        
			for(int i = 0; i < 5; ++i)
			{
                PirateCrew m_PirateCrew = new PirateCrew();
                m_PirateCrew.MoveToWorld(loccrew, map); 
			}
		}
		
		base.OnThink();
		if ( DateTime.Now < m_NextPickup )
			return;

        if (m_PirateShip_Boat == null)
		{
			return;
		} 

		m_NextPickup = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 1, 2 ) );

        enemydirection = Direction.North;
		foreach ( Item enemy in this.GetItemsInRange( 200 ) )
		{
            if (enemy is BaseBoat && enemy != m_PirateShip_Boat && !(enemy is PirateShip_Boat))
			{
				List<Mobile> targets = new List<Mobile>();
				IPooledEnumerable eable = enemy.GetMobilesInRange( 16 );

				foreach ( Mobile m in eable )
				{
					if ( m is PlayerMobile )
						targets.Add( m );
				}
				eable.Free();
				if ( targets.Count > 0 )
				{
                    m_enemyboat = enemy as BaseBoat;
                    enemydirection = this.GetDirectionTo(m_enemyboat);
					break;
				}
			} 
		}
        if (m_enemyboat == null)
		{
			return;
		}

        if (m_PirateShip_Boat != null && m_enemyboat != null)
		{
            if (m_PirateShip_Boat != null && (enemydirection == Direction.North) && m_PirateShip_Boat.Facing != Direction.North)
			{
                m_PirateShip_Boat.Facing = Direction.North;
			}
            else if (m_PirateShip_Boat != null && (enemydirection == Direction.South) && m_PirateShip_Boat.Facing != Direction.South)
			{
                m_PirateShip_Boat.Facing = Direction.South;
			}
            else if (m_PirateShip_Boat != null && (enemydirection == Direction.East || enemydirection == Direction.Right || enemydirection == Direction.Down) && m_PirateShip_Boat.Facing != Direction.East)
			{
                m_PirateShip_Boat.Facing = Direction.East;
			}
            else if (m_PirateShip_Boat != null && (enemydirection == Direction.West || enemydirection == Direction.Left || enemydirection == Direction.Up) && m_PirateShip_Boat.Facing != Direction.West)   
			{
                m_PirateShip_Boat.Facing = Direction.West;
			}
            m_PirateShip_Boat.StartMove(Direction.North, true);

            if (m_PirateShip_Boat != null && this.InRange(m_enemyboat, 10) && m_PirateShip_Boat.IsMoving == true)
			{
                m_PirateShip_Boat.StopMove(false);
			}
		}
		else
		{
            if (m_PirateShip_Boat != null && m_PirateShip_Boat.IsMoving == true)
			{
                m_PirateShip_Boat.StopMove(false);
			}
		}
		}
		public override void OnThink()
		{
  		    if(boatspawn == false)
  		    {
			    Map map = this.Map;
  			    if ( map == null )
  				    return;			
			    this.Z = 0;
                m_PirateShip_Boat = new PirateShip_Boat();
  			    Point3D loc = this.Location;
  			    Point3D loccrew = this.Location;

			    loc = new Point3D( this.X, this.Y-1, Map.GetAverageZ(this.X, this.Y));
         	            loccrew = new Point3D( this.X, this.Y-1, loc.Z+1 );

                m_PirateShip_Boat.MoveToWorld(loc, map);
                boatspawn = true;
        
			    for(int i = 0; i < 5; ++i)
			    {
                    PirateCrew m_PirateCrew = new PirateCrew();
                    m_PirateCrew.MoveToWorld(loccrew, map); 
			    }
		    }
		
		    base.OnThink();
		    if ( DateTime.UtcNow < m_NextPickup )
			    return;

            if (m_PirateShip_Boat == null)
		    {
			    return;
		    } 

		    m_NextPickup = DateTime.UtcNow + TimeSpan.FromSeconds( Utility.RandomMinMax( 1, 2 ) );

            enemydirection = Direction.North;
		    foreach ( Item enemy in this.GetItemsInRange( 200 ) )
		    {
                if (enemy is BaseBoat && enemy != m_PirateShip_Boat && !(enemy is PirateShip_Boat))
			    {
				    List<Mobile> targets = new List<Mobile>();
				    IPooledEnumerable eable = enemy.GetMobilesInRange( 16 );

				    foreach ( Mobile m in eable )
				    {
					    if ( m is PlayerMobile )
						    targets.Add( m );
				    }
				    eable.Free();
				    if ( targets.Count > 0 )
				    {
                        m_enemyboat = enemy as BaseBoat;
                        enemydirection = this.GetDirectionTo(m_enemyboat);
					    break;
				    }
			    } 
		    }
            if (m_enemyboat == null)
		    {
			    return;
		    }

            if (m_PirateShip_Boat != null && m_enemyboat != null)
		    {
                if (m_PirateShip_Boat != null && (enemydirection == Direction.North) && m_PirateShip_Boat.Facing != Direction.North)
			    {
                    m_PirateShip_Boat.Facing = Direction.North;
			    }
                else if (m_PirateShip_Boat != null && (enemydirection == Direction.South) && m_PirateShip_Boat.Facing != Direction.South)
			    {
                    m_PirateShip_Boat.Facing = Direction.South;
			    }
                else if (m_PirateShip_Boat != null && (enemydirection == Direction.East || enemydirection == Direction.Right || enemydirection == Direction.Down) && m_PirateShip_Boat.Facing != Direction.East)
			    {
                    m_PirateShip_Boat.Facing = Direction.East;
			    }
                else if (m_PirateShip_Boat != null && (enemydirection == Direction.West || enemydirection == Direction.Left || enemydirection == Direction.Up) && m_PirateShip_Boat.Facing != Direction.West)   
			    {
                    m_PirateShip_Boat.Facing = Direction.West;
			    }
                m_PirateShip_Boat.StartMove(Direction.North, true);

                if (m_PirateShip_Boat != null && this.InRange(m_enemyboat, 10) && m_PirateShip_Boat.IsMoving == true)
			    {
                    m_PirateShip_Boat.StopMove(false);
			    }
		    }
		    else
		    {
                if (m_PirateShip_Boat != null && m_PirateShip_Boat.IsMoving == true)
			    {
                    m_PirateShip_Boat.StopMove(false);
			    }
		    }
		}