Esempio n. 1
0
        public override bool Validate(Mobile from)
        {
            if (!base.Validate(from))
            {
                return(false);
            }

            if (from.Mounted && !(from.Weapon is Lance))
            {
                if (from is Player)
                {
                    Dragoon drg = Perk.GetByType <Dragoon>((Player)from);

                    if (drg != null && drg.MountedRival())
                    {
                        return(true);
                    }
                }

                from.SendLocalizedMessage(1061283);                   // You cannot perform that attack while mounted!
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        public override void OnHit(Mobile attacker, Mobile defender, int damage)
        {
            if (!Validate(attacker))
            {
                return;
            }

            if (attacker is Player)
            {
                Dragoon drg = Perk.GetByType <Dragoon>((Player)attacker);

                if (drg != null)
                {
                    if (!drg.MountedRival())
                    {
                        if (attacker.Mounted) // TODO: Should there be a message here?
                        {
                            return;
                        }
                    }
                }
            }

            //else if (attacker.Mounted)
            //return;

            ClearCurrentAbility(attacker);

            IMount mount = defender.Mount;

            if (mount == null)
            {
                attacker.SendLocalizedMessage(1060848);                   // This attack only works on mounted targets
                return;
            }

            if (!CheckStam(attacker, true))
            {
                return;
            }

            if (defender is Player)
            {
                Dragoon drg = Perk.GetByType <Dragoon>((Player)defender);

                if (drg != null)
                {
                    if (drg.SaddleBound() && Utility.RandomDouble() < 0.80) // 80% chance for the dragoon to resist dismount.
                    {
                        attacker.SendMessage("The rider resist your attempt to dismount.");
                        defender.SendMessage("You resist your attackers attempt to dismount.");
                        return;
                    }
                }
            }

            attacker.SendLocalizedMessage(1060082);               // The force of your attack has dislodged them from their mount!

            if (attacker.Mounted)
            {
                defender.SendLocalizedMessage(1062315);                   // You fall off your mount!
            }
            else
            {
                defender.SendLocalizedMessage(1060083);                   // You fall off of your mount and take damage!
            }
            defender.PlaySound(0x140);
            defender.FixedParticles(0x3728, 10, 15, 9955, EffectLayer.Waist);

            mount.Rider = null;

            BaseMount.SetMountPrevention(defender, BlockMountType.Dazed, DefenderRemountDelay);
            BaseMount.SetMountPrevention(attacker, BlockMountType.DismountRecovery, AttackerRemountDelay);

            if (!attacker.Mounted)
            {
                AOS.Damage(defender, attacker, Utility.RandomMinMax(15, 25), 100, 0, 0, 0, 0);
            }
        }