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); }
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); } }