public void OnBound(ProfessionalBountyQuest quest) { if (quest == null || quest.Pole == null) { return; } BindingPole pole = quest.Pole; int x = pole.X; int y = pole.Y; while (x == pole.X && y == pole.Y) { x = Utility.RandomMinMax(pole.X - 1, pole.X + 1); y = Utility.RandomMinMax(pole.Y - 1, pole.Y + 1); } Frozen = true; Item toDisarm = FindItemOnLayer(Layer.OneHanded); if (toDisarm == null || !toDisarm.Movable) { toDisarm = FindItemOnLayer(Layer.TwoHanded); } if (toDisarm != null) { if (Backpack != null) { Backpack.DropItem(toDisarm); } else { toDisarm.Delete(); } } m_Quest = quest; if (quest != null && quest.Galleon != null) { quest.Galleon.CapturedCaptain = this; } Timer.DelayCall(TimeSpan.FromSeconds(2.5), new TimerStateCallback(MoveCaptainToShip), new object[] { x, y, pole }); }
public void AddPole() { if (m_Galleon == null) { return; } int dist = m_Galleon.CaptiveOffset; int xOffset = 0; int yOffset = 0; m_Pole = new BindingPole(this); switch (m_Galleon.Facing) { case Direction.North: xOffset = 0; yOffset = dist * -1; break; case Direction.South: xOffset = 0; yOffset = dist * 1; break; case Direction.East: yOffset = 0; xOffset = dist * 1; break; case Direction.West: xOffset = dist * -1; yOffset = 0; break; } m_Pole.MoveToWorld(new Point3D(m_Galleon.X + xOffset, m_Galleon.Y + yOffset, m_Galleon.ZSurface), m_Galleon.Map); m_Galleon.Pole = m_Pole; }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadEncodedInt(); m_Pole = reader.ReadItem() as BindingPole; m_Rope = reader.ReadItem() as BindingRope; m_Captain = reader.ReadMobile(); m_Galleon = reader.ReadItem() as BaseGalleon; int count = reader.ReadInt(); for (int i = 0; i < count; i++) { Mobile mob = reader.ReadMobile(); if (mob != null) { m_Helpers.Add(mob); } } if (m_Rope != null) { m_Rope.Quest = this; } if (m_Pole != null) { m_Pole.Quest = this; } else { AddPole(); } AddReward(new BaseReward(1116712)); //The gold listed on the bulletin board and a special reward from the officer if captured alive. }