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