public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 4: { if (reader.ReadInt() == 1) { m_BoatCourse = new BoatCourse(reader); m_BoatCourse.Boat = this; m_BoatCourse.Map = this.Map; } m_DockedBoat = reader.ReadItem() as BaseDockedBoat; m_VirtualMount = reader.ReadItem() as BoatMountItem; m_Decay = reader.ReadBool(); goto case 3; } case 3: { m_MapItem = (MapItem)reader.ReadItem(); m_NextNavPoint = reader.ReadInt(); goto case 2; } case 2: { m_Facing = (Direction)reader.ReadInt(); goto case 1; } case 1: { m_DecayTime = reader.ReadDeltaTime(); goto case 0; } case 0: { if (version < 3) m_NextNavPoint = -1; if (version < 2) { if (ItemID == NorthID) m_Facing = Direction.North; else if (ItemID == SouthID) m_Facing = Direction.South; else if (ItemID == EastID) m_Facing = Direction.East; else if (ItemID == WestID) m_Facing = Direction.West; } m_Owner = reader.ReadMobile(); m_PPlank = reader.ReadItem() as Plank; m_SPlank = reader.ReadItem() as Plank; if (!IsClassicBoat && !(this is RowBoat)) m_TillerMan = reader.ReadMobile() as object; else m_TillerMan = reader.ReadItem() as object; m_Hold = reader.ReadItem() as Hold; m_Anchored = reader.ReadBool(); m_ShipName = reader.ReadString(); m_Anchored = false; //No more anchors[High Seas] if (version < 1) Refresh(); break; } } m_Instances.Add(this); if (m_VirtualMount == null) m_VirtualMount = new BoatMountItem(this); if (version == 6) { if (m_MapItem != null) Timer.DelayCall(TimeSpan.FromSeconds(10), delegate { BoatCourse = new BoatCourse(this, m_MapItem); }); } }
public BaseBoat(Direction direction, bool isClassic) : base(0x0) { m_DecayTime = DateTime.UtcNow + BoatDecayDelay; m_Decay = true; Facing = direction; Layer = Layer.Mount; m_Anchored = false; m_VirtualMount = new BoatMountItem(this); if (isClassic) { m_TillerMan = new TillerMan(this); m_PPlank = new Plank(this, PlankSide.Port, 0); m_SPlank = new Plank(this, PlankSide.Starboard, 0); m_PPlank.MoveToWorld(new Point3D(X + PortOffset.X, Y + PortOffset.Y, Z), Map); m_SPlank.MoveToWorld(new Point3D(X + StarboardOffset.X, Y + StarboardOffset.Y, Z), Map); m_Hold = new Hold(this); UpdateComponents(); } m_NextNavPoint = -1; Movable = false; m_Instances.Add(this); }