public void RemoveBoat(BaseBoat boat)
{
if (boat == null)
return;
//First, we'll try and put the boat in the cooresponding location where it warped in
if (boat.Map != null && boat.Map != Map.Internal && m_Altar != null && m_Altar.WarpRegion != null)
{
Map map = boat.Map;
Rectangle2D rec = m_Altar.WarpRegion.Bounds;
int x = boat.X - m_Bounds.X;
int y = boat.Y - m_Bounds.Y;
int z = map.GetAverageZ(x, y);
Point3D ePnt = new Point3D(rec.X + x, rec.Y + y, -5);
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 != -5)
boat.Z = -5;
if (boat.TillerMan != null)
boat.TillerManSay(501425); //Ar, turbulent water!
return;
}
}
//Plan B, lets kick to some random location who-knows-where
for (int i = 0; i < 25; i++)
{
Rectangle2D rec = CorgulAltar.BoatKickLocation;
Point3D ePnt = CorgulAltar.GetRandomPoint(rec, Map);
int offsetX = ePnt.X - boat.X;
int offsetY = ePnt.Y - boat.Y;
int offsetZ = ePnt.Z - boat.Z;
if (boat.CanFit(ePnt, this.Map, boat.ItemID))
{
boat.Teleport(offsetX, offsetY, -5);
boat.SendMessageToAllOnBoard("A rough patch of sea has disoriented the crew!");
//int z = this.Map.GetAverageZ(boat.X, boat.Y);
if (boat.Z != -5)
boat.Z = -5;
if (boat.TillerMan != null)
boat.TillerManSay(501425); //Ar, turbulent water!
break;
}
}
}