BritainKnights/Scripts/Multis/Boats/BoatNavigation.cs

869 lines
No EOL
43 KiB
C#

using Server;
using Server.Commands;
using Server.Gumps;
using Server.Multis;
using Server.Network;
using System;
using System.Text;
namespace Server.Misc
{
public class BoatNavigationControl : Gump
{
public BoatNavigationControl(Mobile from) : base(50, 50)
{
this.Closable = true;
this.Disposable = true;
this.Dragable = true;
this.Resizable = false;
AddPage(0);
AddImage(333, 141, 9274);
AddImage(343, 152, 9274);
AddImage(222, 214, 1417);
AddImage(504, 214, 1417);
AddItem(525, 219, 5367);
AddItem(504, 262, 5368);
AddItem(242, 221, 16083);
AddImage(302, 110, 9007);
AddItem(385, 163, 15946, 795);
AddBackground(368, 199, 74, 46, 9400);
AddButton(554, 233, 5600, 5604, (int)Buttons.RaiseAnchor, GumpButtonType.Reply, 0);
AddButton(554, 261, 5606, 5606, (int)Buttons.LowerAnchor, GumpButtonType.Reply, 0);
AddButton(395, 143, 2117, 11400, (int)Buttons.NorthWest, GumpButtonType.Reply, 0);
AddButton(396, 263, 2117, 11400, (int)Buttons.SouthEast, GumpButtonType.Reply, 0);
AddButton(336, 203, 2117, 11400, (int)Buttons.SouthWest, GumpButtonType.Reply, 0);
AddButton(456, 202, 2117, 11400, (int)Buttons.NorthEast, GumpButtonType.Reply, 0);
AddButton(436, 162, 2117, 11400, (int)Buttons.North, GumpButtonType.Reply, 0);
AddButton(355, 244, 2117, 11400, (int)Buttons.South, GumpButtonType.Reply, 0);
AddButton(353, 163, 2117, 11400, (int)Buttons.West, GumpButtonType.Reply, 0);
AddButton(438, 244, 2117, 11400, (int)Buttons.East, GumpButtonType.Reply, 0);
AddButton(239, 229, 5603, 5607, (int)Buttons.PPlankControl, GumpButtonType.Reply, 0);
AddButton(275, 249, 5601, 5605, (int)Buttons.SPlankControl, GumpButtonType.Reply, 0);
AddButton(275, 249, 5601, 5605, (int)Buttons.SPlankControl, GumpButtonType.Reply, 0);
AddButton(553, 280, 4, 4, (int)Buttons.RenameShip, GumpButtonType.Reply, 0);
AddLabel(388, 212, 295, @"STOP");
AddButton(478, 244, 3, 3, (int)Buttons.Close, GumpButtonType.Reply, 0);
AddButton(571, 217, 22404, 22404, (int)Buttons.TurnRight, GumpButtonType.Reply, 0);
AddButton(476, 198, 9904, 9903, (int)Buttons.NorthEastOne, GumpButtonType.Reply, 0);
AddButton(309, 199, 9910, 9909, (int)Buttons.SouthWestOne, GumpButtonType.Reply, 0);
AddButton(392, 116, 9901, 9900, (int)Buttons.NorthWestOne, GumpButtonType.Reply, 0);
AddButton(393, 284, 9907, 9906, (int)Buttons.SouthEastOne, GumpButtonType.Reply, 0);
AddButton(217, 217, 22403, 22403, (int)Buttons.TurnLeft, GumpButtonType.Reply, 0);
AddButton(286, 278, 22400, 22400, (int)Buttons.TurnAround, GumpButtonType.Reply, 0);
AddButton(435, 215, 9762, 9763, (int)Buttons.ForwardOnCurrentHeading, GumpButtonType.Reply, 0);
AddButton(358, 215, 9766, 9767, (int)Buttons.BackwardOnCurrentHeading, GumpButtonType.Reply, 0);
}
public enum Buttons
{
DoNothing,
RaiseAnchor,
LowerAnchor,
NorthWest,
SouthEast,
SouthWest,
NorthEast,
North,
South,
West,
East,
PPlankControl,
SPlankControl,
Stop,
Close,
TurnRight,
NorthEastOne,
SouthWestOne,
NorthWestOne,
SouthEastOne,
TurnLeft,
TurnAround,
ForwardOnCurrentHeading,
BackwardOnCurrentHeading,
RenameShip
}
public override void OnResponse(NetState sender, RelayInfo info)
{
Mobile from = sender.Mobile;
BaseBoat boat = BaseBoat.FindBoatAt(from, from.Map);
if (!from.Alive && boat == null)
{
return;
}
else if (boat == null)
{
return;
}
else
{
switch (info.ButtonID)
{
case 0:
{
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.RenameShip:
{
boat.BeginRename( from );
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.RaiseAnchor:
{
from.Say("Raise The Anchor!");
boat.RaiseAnchor(true);
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.LowerAnchor:
{
from.Say("Lower The Anchor!");
boat.LowerAnchor(true);
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.NorthWest:
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: North Northwest!!");
boat.StartMove(Direction.Up, true);
}
else if (boat.Facing != Direction.North)
{
if (boat.Facing == Direction.East)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northwest!!");
boat.Turn(270, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: West Northwest!!");
boat.Turn(180, true);
boat.StartMove(Direction.Right, true);
break;
}
}
}
else if (boat.Facing == Direction.South)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northwest!!");
boat.Turn(180, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: West Northwest!!");
boat.Turn(90, true);
boat.StartMove(Direction.Right, true);
break;
}
}
}
else if (boat.Facing == Direction.West)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northwest!!");
boat.Turn(90, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: West Northwest!!");
boat.StartMove(Direction.Right, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.SouthEast:
{
if (boat.Facing == Direction.South)
{
from.Say("Set Heading: South Southeast!!");
boat.StartMove(Direction.Up, true);
}
else if (boat.Facing != Direction.South)
{
if (boat.Facing == Direction.West)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southeast!!");
boat.Turn(270, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: East Southeast!!");
boat.Turn(180, true);
boat.StartMove(Direction.Right, true);
break;
}
}
}
else if (boat.Facing == Direction.North)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southeast!!");
boat.Turn(180, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: East Southeast!!");
boat.Turn(90, true);
boat.StartMove(Direction.Right, true);
break;
}
}
}
else if (boat.Facing == Direction.East)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southeast!!");
boat.Turn(90, true);
boat.StartMove(Direction.Up, true);
break;
}
case 0:
{
from.Say("Set Heading: East Southeast!!");
boat.StartMove(Direction.Right, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.SouthWest:
{
if (boat.Facing == Direction.South)
{
from.Say("Set Heading: South Southwest!");
boat.StartMove(Direction.Right, true);
}
else if (boat.Facing != Direction.South)
{
if (boat.Facing == Direction.West)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southwest!!");
boat.Turn(270, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: West Southwest!!");
boat.StartMove(Direction.Up, true);
break;
}
}
}
else if (boat.Facing == Direction.North)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southwest!!");
boat.Turn(180, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: West Southwest!!");
boat.Turn(270, true);
boat.StartMove(Direction.Up, true);
break;
}
}
}
else if (boat.Facing == Direction.East)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: South Southwest!!");
boat.Turn(90, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: West Southwest!!");
boat.Turn(180, true);
boat.StartMove(Direction.Up, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.NorthEast:
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: North Northeast!");
boat.StartMove(Direction.Right, true);
}
else if (boat.Facing != Direction.North)
{
if (boat.Facing == Direction.East)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northeast!!");
boat.Turn(270, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: East Northeast!!");
boat.StartMove(Direction.Up, true);
break;
}
}
}
else if (boat.Facing == Direction.South)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northeast!!");
boat.Turn(180, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: East Northeast!!");
boat.Turn(270, true);
boat.StartMove(Direction.Up, true);
break;
}
}
}
else if (boat.Facing == Direction.West)
{
switch (Utility.Random(2))
{
case 1:
{
from.Say("Set Heading: North Northeast!!");
boat.Turn(90, true);
boat.StartMove(Direction.Right, true);
break;
}
case 0:
{
from.Say("Set Heading: East Northeast!!");
boat.Turn(180, true);
boat.StartMove(Direction.Up, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.North:
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: Due North!!");
boat.StartMove(Direction.North, true);
}
else if (boat.Facing != Direction.North)
{
if (boat.Facing == Direction.East)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due North!!");
boat.Turn(270, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.South)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due North!!");
boat.Turn(180, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.West)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due North!!");
boat.Turn(90, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.South:
{
if (boat.Facing == Direction.South)
{
from.Say("Set Heading: Due South!!");
boat.StartMove(Direction.North, true);
}
else if (boat.Facing != Direction.South)
{
if (boat.Facing == Direction.West)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due South!!");
boat.Turn(270, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.North)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due South!!");
boat.Turn(180, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.East)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due South!!");
boat.Turn(90, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.West:
{
if (boat.Facing == Direction.West)
{
from.Say("Set Heading: Due West!!");
boat.StartMove(Direction.North, true);
}
else if (boat.Facing != Direction.West)
{
if (boat.Facing == Direction.North)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due West!!");
boat.Turn(270, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.East)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due West!!");
boat.Turn(180, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.South)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due West!!");
boat.Turn(90, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.East:
{
if (boat.Facing == Direction.East)
{
from.Say("Set Heading: Due East!!");
boat.StartMove(Direction.North, true);
}
else if (boat.Facing != Direction.East)
{
if (boat.Facing == Direction.South)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due East!!");
boat.Turn(270, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.West)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due East!!");
boat.Turn(180, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
else if (boat.Facing == Direction.North)
{
switch (Utility.Random(1))
{
case 0:
{
from.Say("Set Heading: Due East!!");
boat.Turn(90, true);
boat.StartMove(Direction.North, true);
break;
}
}
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.PPlankControl:
{
from.Say("Extend The Port Plank!!");
boat.PPlank.Open();
boat.PPlank.Locked = false;
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.SPlankControl:
{
from.Say("Extend The Starboard Plank!!");
boat.SPlank.Open();
boat.SPlank.Locked = false;
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.Stop:
{
from.Say("Stop The Ship!!");
boat.StopMove(true);
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.Close:
{
from.CloseGump(typeof(BoatNavigationControl));
break;
}
case (int)Buttons.TurnRight:
{
if (boat.Facing == Direction.North)
{
from.Say("Change Course! New Heading: Due East!");
boat.Turn(90, true);
}
else if (boat.Facing != Direction.North)
{
if (boat.Facing == Direction.East)
{
from.Say("Change Course! New Heading: Due South!");
boat.Turn(90, true);
}
else if (boat.Facing == Direction.South)
{
from.Say("Change Course! New Heading: Due West!");
boat.Turn(90, true);
}
else if (boat.Facing == Direction.West)
{
from.Say("Change Course! New Heading Due North!");
boat.Turn(90, true);
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.NorthEastOne:
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: One Right!");
boat.OneMove(Direction.East);
}
else if (boat.Facing == Direction.East)
{
from.Say("Set Heading: One Right!");
boat.OneMove(Direction.East);
}
else if (boat.Facing == Direction.South)
{
from.Say("Set Heading: One Right!");
boat.OneMove(Direction.East);
}
else if (boat.Facing == Direction.West)
{
from.Say("Set Heading: One Right!");
boat.OneMove(Direction.East);
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.SouthWestOne: // Left One
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: One Left!");
boat.OneMove(Direction.West);
}
else if (boat.Facing == Direction.East)
{
from.Say("Set Heading: One Left!");
boat.OneMove(Direction.West);
}
else if (boat.Facing == Direction.South)
{
from.Say("Set Heading: One Left!");
boat.OneMove(Direction.West);
}
else if (boat.Facing == Direction.West)
{
from.Say("Set Heading: One Left!");
boat.OneMove(Direction.West);
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.NorthWestOne: // Forward One
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: One Forward!");
boat.OneMove(Direction.North);
}
else if (boat.Facing == Direction.East)
{
from.Say("Set Heading: One Forward!");
boat.OneMove(Direction.North);
}
else if (boat.Facing == Direction.South)
{
from.Say("Set Heading: One Forward!");
boat.OneMove(Direction.North);
}
else if (boat.Facing == Direction.West)
{
from.Say("Set Heading: One Forward!");
boat.OneMove(Direction.North);
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.SouthEastOne:
{
if (boat.Facing == Direction.North)
{
from.Say("Set Heading: One Backward!");
boat.OneMove(Direction.South);
}
else if (boat.Facing == Direction.East)
{
from.Say("Set Heading: One Backward!");
boat.OneMove(Direction.South);
}
else if (boat.Facing == Direction.South)
{
from.Say("Set Heading: One Backward!");
boat.OneMove(Direction.South);
}
else if (boat.Facing == Direction.West)
{
from.Say("Set Heading: One Backward!");
boat.OneMove(Direction.South);
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.TurnLeft:
{
if (boat.Facing == Direction.North)
{
from.Say("Change Course! New Heading: Due West!");
boat.Turn(-90, true);
}
else if (boat.Facing != Direction.North)
{
if (boat.Facing == Direction.West)
{
from.Say("Change Course! New Heading: Due South!");
boat.Turn(-90, true);
}
else if (boat.Facing == Direction.South)
{
from.Say("Change Course! New Heading: Due East!");
boat.Turn(-90, true);
}
else if (boat.Facing == Direction.East)
{
from.Say("Change Course! New Heading: Due North!");
boat.Turn(-90, true);
}
}
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.TurnAround:
{
from.Say("Come About!!");
boat.Turn(180, true);
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.ForwardOnCurrentHeading:
{
// Code: boat.Speed = 1
// Originally Worked But Caused Boats To Beach Themselves On Land
boat.StartMove(Direction.North, false);
from.SendGump(new BoatNavigationControl(from));
break;
}
case (int)Buttons.BackwardOnCurrentHeading:
{
// Code: boat.Speed = -1
// Originally Worked But Caused Boats To Beach Themselves On Land
boat.StartMove(Direction.South, false);
from.SendGump(new BoatNavigationControl(from));
break;
}
}
}
}
}
}