public void Shoot(Mobile from)
        {
            BaseRanged bow = from.Weapon as BaseRanged;

            if (bow == null)
            {
                return;
            }

            m_LastUse = DateTime.Now;

            from.Direction = from.GetDirectionTo(GetWorldLocation());
            bow.PlaySwingAnimation(from);
            from.MovingEffect(this, bow.EffectID, 18, 1, false, false);

            if (Utility.RandomBool())
            {
                from.PlaySound(bow.MissSound);
                return;
            }

            Effects.PlaySound(Location, Map, 0x2B1);
        }
        public void Fire(Mobile from)
        {
            BaseRanged bow = from.Weapon as BaseRanged;

            if (bow == null)
            {
                SendLocalizedMessageTo(from, 500593);                   // You must practice with ranged weapons on this.
                return;
            }

            if (DateTime.Now < (m_LastUse + UseDelay))
            {
                return;
            }

            Point3D worldLoc = GetWorldLocation();

            if (FacingEast ? from.X <= worldLoc.X : from.Y <= worldLoc.Y)
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500596);                   // You would do better to stand in front of the archery butte.
                return;
            }

            if (FacingEast ? from.Y != worldLoc.Y : from.X != worldLoc.X)
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500597);                   // You aren't properly lined up with the archery butte to get an accurate shot.
                return;
            }

            if (!from.InRange(worldLoc, 6))
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500598);                   // You are too far away from the archery butte to get an accurate shot.
                return;
            }
            else if (from.InRange(worldLoc, 4))
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500599);                   // You are too close to the target.
                return;
            }

            Container pack     = from.Backpack;
            Type      ammoType = bow.AmmoType;

            bool isArrow = (ammoType == typeof(Arrow));
            bool isBolt  = (ammoType == typeof(Bolt));
            bool isKnown = (isArrow || isBolt);

            if (pack == null || !pack.ConsumeTotal(ammoType, 1))
            {
                if (isArrow)
                {
                    from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500594);                       // You do not have any arrows with which to practice.
                }
                else if (isBolt)
                {
                    from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 500595);                       // You do not have any crossbow bolts with which to practice.
                }
                else
                {
                    SendLocalizedMessageTo(from, 500593);                       // You must practice with ranged weapons on this.
                }
                return;
            }

            m_LastUse = DateTime.Now;

            from.Direction = from.GetDirectionTo(GetWorldLocation());
            bow.PlaySwingAnimation(from);
            from.MovingEffect(this, bow.EffectID, 18, 1, false, false);

            ScoreEntry se = GetEntryFor(from);

            if (!from.CheckSkill(bow.Skill, m_MinSkill, m_MaxSkill))
            {
                from.PlaySound(bow.MissSound);

                PublicOverheadMessage(MessageType.Regular, 0x3B2, 500604, from.Name);                   // You miss the target altogether.

                se.Record(0);

                if (se.Count == 1)
                {
                    PublicOverheadMessage(MessageType.Regular, 0x3B2, 1062719, se.Total.ToString());
                }
                else
                {
                    PublicOverheadMessage(MessageType.Regular, 0x3B2, 1042683, String.Format("{0}\t{1}", se.Total, se.Count));
                }

                return;
            }

            Effects.PlaySound(Location, Map, 0x2B1);

            double rand = Utility.RandomDouble();

            int area, score, splitScore;

            if (0.10 > rand)
            {
                area       = 0;           // bullseye
                score      = 50;
                splitScore = 100;
            }
            else if (0.25 > rand)
            {
                area       = 1;           // inner ring
                score      = 10;
                splitScore = 20;
            }
            else if (0.50 > rand)
            {
                area       = 2;           // middle ring
                score      = 5;
                splitScore = 15;
            }
            else
            {
                area       = 3;           // outer ring
                score      = 2;
                splitScore = 5;
            }

            bool split = (isKnown && ((m_Arrows + m_Bolts) * 0.02) > Utility.RandomDouble());

            if (split)
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, 1010027 + (isArrow ? 0 : 4) + area, from.Name);
            }
            else
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, 1010035 + area, from.Name);

                if (isArrow)
                {
                    ++m_Arrows;
                }
                else if (isBolt)
                {
                    ++m_Bolts;
                }
            }

            se.Record(split ? splitScore : score);

            if (se.Count == 1)
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, 1062719, se.Total.ToString());
            }
            else
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, 1042683, String.Format("{0}\t{1}", se.Total, se.Count));
            }
        }
Exemple #3
0
        public void Fire(Mobile from)
        {
            BaseRanged bow = from.Weapon as BaseRanged;

            if (bow == null)
            {
                SendLocalizedMessageTo(from, 500593);                   // You must practice with ranged weapons on this.
                return;
            }

            if (DateTime.Now < (m_LastUse + UseDelay))
            {
                return;
            }

            Point3D worldLoc = GetWorldLocation();

            if (FacingEast ? from.X <= worldLoc.X : from.Y <= worldLoc.Y)
            {
                SendLocalizedMessageTo(from, 500596);                   // You would do better to stand in front of the archery butte.
                return;
            }

            if (FacingEast ? from.Y != worldLoc.Y : from.X != worldLoc.X)
            {
                SendLocalizedMessageTo(from, 500597);                   // You aren't properly lined up with the archery butte to get an accurate shot.
                return;
            }

            if (!from.InRange(worldLoc, bow.MaxRange))
            {
                SendLocalizedMessageTo(from, 500598);                   // You are too far away from the archery butte to get an accurate shot.
                return;
            }
            else if (from.InRange(worldLoc, 4))
            {
                SendLocalizedMessageTo(from, 500599);                   // You are too close to the target.
                return;
            }

            Container pack     = from.Backpack;
            Type      ammoType = bow.AmmoType;

            bool isArrow = (ammoType == typeof(Arrow));
            bool isBolt  = (ammoType == typeof(Bolt));
            bool isKnown = (isArrow || isBolt);

            if (pack == null || !pack.ConsumeTotal(ammoType, 1))
            {
                if (isArrow)
                {
                    SendLocalizedMessageTo(from, 500594);                       // You do not have any arrows with which to practice.
                }
                else if (isBolt)
                {
                    SendLocalizedMessageTo(from, 500595);                       // You do not have any crossbow bolts with which to practice.
                }
                else
                {
                    SendLocalizedMessageTo(from, 500593);                       // You must practice with ranged weapons on this.
                }
                return;
            }

            m_LastUse = DateTime.Now;

            from.Direction = from.GetDirectionTo(GetWorldLocation());
            bow.PlaySwingAnimation(from);
            from.MovingEffect(this, bow.EffectID, 18, 1, false, false);

            if (!from.CheckSkill(bow.Skill, m_MinSkill, m_MaxSkill))
            {
                from.PlaySound(bow.MissSound);
                SendLocalizedMessageTo(from, 500604);                   // You miss the target altogether.
                return;
            }

            from.PlaySound(bow.HitSound);

            double rand = Utility.RandomDouble();

            int area;

            if (0.10 > rand)
            {
                area = 0;                 // bullseye
            }
            else if (0.25 > rand)
            {
                area = 1;                 // inner ring
            }
            else if (0.50 > rand)
            {
                area = 2;                 // middle ring
            }
            else
            {
                area = 3;                 // outer ring
            }
            bool split = (isKnown && ((m_Arrows + m_Bolts) * 0.05) > Utility.RandomDouble());

            if (split)
            {
                SendLocalizedMessageTo(from, 1010027 + (isArrow ? 0 : 4) + area);
            }
            else
            {
                SendLocalizedMessageTo(from, 1010035 + area);

                if (isArrow)
                {
                    ++m_Arrows;
                }
                else if (isBolt)
                {
                    ++m_Bolts;
                }
            }
        }
Exemple #4
0
        public void Fire(Mobile from)
        {
            BaseRanged bow = from.Weapon as BaseRanged;

            if (bow == null)
            {
                from.Send(new AsciiMessage(Serial, ItemID, MessageType.Regular, 0, 3, "", "You must practice with ranged weapons on this."));
                //from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You must practice with ranged weapons on this.");
                //SendLocalizedMessageTo( from, 500593 ); // You must practice with ranged weapons on this.
                return;
            }

            if (DateTime.Now < (m_LastUse + UseDelay))
            {
                return;
            }

            Point3D worldLoc = GetWorldLocation();

            if (FacingEast ? from.X <= worldLoc.X : from.Y <= worldLoc.Y)
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You would do better to stand in front of the archery butte.");                   // You would do better to stand in front of the archery butte.
                return;
            }

            if (FacingEast ? from.Y != worldLoc.Y : from.X != worldLoc.X)
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You aren't properly lined up with the archery butte to get an accurate shot.");                   // You aren't properly lined up with the archery butte to get an accurate shot.
                return;
            }

            if (!from.InRange(worldLoc, 6))
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You are too far away from the archery butte to get an accurate shot.");                   // You are too far away from the archery butte to get an accurate shot.
                return;
            }
            else if (from.InRange(worldLoc, 4))
            {
                from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You are too close to the target.");                   // You are too close to the target.
                return;
            }

            Container pack     = from.Backpack;
            Type      ammoType = bow.AmmoType;

            bool isArrow = (ammoType == typeof(Arrow));
            bool isBolt  = (ammoType == typeof(Bolt));
            bool isKnown = (isArrow || isBolt);

            if (pack == null || !pack.ConsumeTotal(ammoType, 1))
            {
                if (isArrow)
                {
                    from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You do not have any arrows with which to practice.");                       // You do not have any arrows with which to practice.
                }
                else if (isBolt)
                {
                    from.LocalOverheadMessage(MessageType.Regular, 0x3B2, true, "You do not have any crossbow bolts with which to practice.");                       // You do not have any crossbow bolts with which to practice.
                }
                else
                {
                    from.Send(new AsciiMessage(Serial, ItemID, MessageType.Regular, 0, 3, "", "You must practice with ranged weapons on this."));
                }
                //SendLocalizedMessageTo( from, 500593 ); // You must practice with ranged weapons on this.

                return;
            }

            m_LastUse = DateTime.Now;

            from.Direction = from.GetDirectionTo(GetWorldLocation());
            bow.PlaySwingAnimation(from);
            from.MovingEffect(this, bow.EffectID, 18, 1, false, false);

            ScoreEntry se = GetEntryFor(from);

            if (!from.CheckSkill(bow.Skill, m_MinSkill, m_MaxSkill))
            {
                from.PlaySound(bow.MissSound);

                PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} misses the target altogether.", from.Name));
                //PublicOverheadMessage( MessageType.Regular, 0x3B2, 500604, from.Name ); // You miss the target altogether.

                se.Record(0);

                if (se.Count == 1)
                {
                    PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("Score: {0} after the first shot.", se.Total.ToString()));
                }
                else
                {
                    PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("Score: {0} after {1} shots.", se.Total, se.Count));                     //1042683, String.Format( "{0}\t{1}", se.Total, se.Count ) );
                }
                if (0.4 >= Utility.RandomDouble())
                {
                    if (isArrow)
                    {
                        Item Ammo = new Arrow();
                        Ammo.MoveToWorld(new Point3D(this.X + Utility.RandomMinMax(-1, 1), this.Y + Utility.RandomMinMax(-1, 1), this.Z), this.Map);
                    }
                    else if (isBolt)
                    {
                        Item Ammo = new Bolt();
                        Ammo.MoveToWorld(new Point3D(this.X + Utility.RandomMinMax(-1, 1), this.Y + Utility.RandomMinMax(-1, 1), this.Z), this.Map);
                    }
                }
                return;
            }

            Effects.PlaySound(Location, Map, /*0x2B1*/ 564);

            double rand = Utility.RandomDouble();

            int area, score, splitScore;

            if (0.10 > rand)
            {
                area       = 0;           // bullseye
                score      = 50;
                splitScore = 100;
            }
            else if (0.25 > rand)
            {
                area       = 1;           // inner ring
                score      = 10;
                splitScore = 20;
            }
            else if (0.50 > rand)
            {
                area       = 2;           // middle ring
                score      = 5;
                splitScore = 15;
            }
            else
            {
                area       = 3;           // outer ring
                score      = 2;
                splitScore = 5;
            }

            bool split = (isKnown && ((m_Arrows + m_Bolts) * 0.02) > Utility.RandomDouble());

            if (split)
            {
                if (isArrow)
                {
                    switch (area)
                    {
                    case 0: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another arrow in the bullseye!", from.Name)); break;

                    case 1: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another arrow in the inner ring!", from.Name)); break;

                    case 2: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another arrow in the middle ring.", from.Name)); break;

                    case 3: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another arrow in the outer ring.", from.Name)); break;
                    }
                }
                else
                {
                    switch (area)
                    {
                    case 0: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another bolt in the bullseye!", from.Name)); break;

                    case 1: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another bolt in the inner ring!", from.Name)); break;

                    case 2: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another bolt in the middle ring.", from.Name)); break;

                    case 3: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} robinhoods another bolt in the outer ring.", from.Name)); break;
                    }
                }
                //PublicOverheadMessage( MessageType.Regular, 0x3B2, 1010027 + (isArrow ? 0 : 4) + area, from.Name );
            }
            else
            {
                switch (area)
                {
                case 0: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} hits the bullseye!", from.Name)); break;

                case 1: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} hits the inner ring!", from.Name)); break;

                case 2: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} hits the middle ring.", from.Name)); break;

                case 3: PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("{0} hits the outer ring.", from.Name)); break;
                }
                //PublicOverheadMessage( MessageType.Regular, 0x3B2, 1010035 + area, from.Name );

                if (isArrow)
                {
                    ++m_Arrows;
                }
                else if (isBolt)
                {
                    ++m_Bolts;
                }
            }

            se.Record(split ? splitScore : score);

            /*if ( se.Count == 1 )
             *      PublicOverheadMessage( MessageType.Regular, 0x3B2, 1062719, se.Total.ToString() );
             * else
             *      PublicOverheadMessage( MessageType.Regular, 0x3B2, 1042683, String.Format( "{0}\t{1}", se.Total, se.Count ) );*/
            if (se.Count == 1)
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("Score: {0} after the first shot.", se.Total.ToString()));
            }
            else
            {
                PublicOverheadMessage(MessageType.Regular, 0x3B2, true, String.Format("Score: {0} after {1} shots.", se.Total, se.Count));//1042683, String.Format( "{0}\t{1}", se.Total, se.Count ) );
            }
        }