Beispiel #1
0
        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.
        }