Ejemplo n.º 1
0
        private static void FinishThrow(object state)
        {
            object[] states = (object[])state;

            Mobile from = (Mobile)states[0];
            Mobile to   = (Mobile)states[1];

            if (Core.AOS)
            {
                new Bola().MoveToWorld(to.Location, to.Map);
            }

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

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

            to.Damage(1, from);

            IMount mt = to.Mount;

            if (mt != null)
            {
                mt.Rider = null;
            }

            to.SendLocalizedMessage(1040023);               // You have been knocked off of your mount!

            BaseMount.SetMountPrevention(to, BlockMountType.Dazed, TimeSpan.FromSeconds(3.0));

            Timer.DelayCall(TimeSpan.FromSeconds(2.0), new TimerStateCallback(ReleaseBolaLock), from);
        }
Ejemplo 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);
            }
        }