public static void Grab_OnCommand(CommandEventArgs e) { if (!e.Mobile.Alive) { return; } foreach (GrabTimer grab in Grabbers.Values) { if (grab.Grabbed == e.Mobile) { e.Mobile.SendMessage("You can't grab anyone right now."); return; } } GrabTimer timer = Grabbers[e.Mobile] as GrabTimer; // Setting them down. if (timer != null) { timer.Release(); timer.Grabbed.Blessed = true; timer.Grabbed.Freeze(TimeSpan.FromSeconds(2.0)); e.Mobile.Emote("*sets down {0}*", timer.Grabbed.Name); Timer.DelayCall(TimeSpan.FromSeconds(2.0), new TimerStateCallback(GrabRelease_OnCallback), timer.Grabbed); Grabbers.Remove(e.Mobile); } else { if (e.Mobile.FindItemOnLayer(Layer.OneHanded) != null || e.Mobile.FindItemOnLayer(Layer.TwoHanded) != null) { if (e.Mobile.Weapon is CustomShapeshifterWeapon) { e.Mobile.Target = new GrabTarget(); } else { e.Mobile.SendMessage("You must have both hands free to do this."); } } else { e.Mobile.Target = new GrabTarget(); } } }
protected override void OnTarget(Mobile from, object targeted) { if (!(targeted is TeiravonMobile)) { from.SendMessage("You must target another player."); } else if (!(( TeiravonMobile )targeted).Alive || !from.Alive) { from.SendMessage("You must target a living player."); } else if (( TeiravonMobile )targeted == ( TeiravonMobile )from) { from.SendMessage("You must target another player."); } else if (from.Mounted) { from.SendMessage("You must be on foot to initially grab a player."); } else if ((( TeiravonMobile )targeted).Mounted) { from.SendMessage("Your target must be on foot to be grabbed."); } //else if ( ( ( TeiravonMobile )targeted ).FindItemOnLayer( Layer.OneHanded ) != null || ( ( TeiravonMobile )targeted ).FindItemOnLayer( Layer.TwoHanded ) != null ) // from.SendMessage( "You must first disarm your target." ); else if (Grabbers.Contains(from)) // Sanity check { from.SendMessage("You can only grab one person at a time."); } else if (Grabbers.Contains((( TeiravonMobile )targeted))) { from.SendMessage("You can't get a hold on {0} right now.", (( TeiravonMobile )targeted).Female ? "her" : "him"); } else { TeiravonMobile grabbed = ( TeiravonMobile )targeted; foreach (GrabTimer timer in Grabbers.Values) { if (timer.Grabbed == grabbed) { from.SendMessage("{0} is already being held.", grabbed.Name); return; } } int grabvalue = 0; int defendvalue = 0; GetValues(( TeiravonMobile )from, grabbed, out grabvalue, out defendvalue); // We grabbed them. if (grabvalue > defendvalue || (grabvalue == defendvalue && Utility.RandomBool())) { GrabTimer timer = new GrabTimer(( TeiravonMobile )from, grabbed); Grabbers.Add(( TeiravonMobile )from, timer); timer.Start(); from.Emote("*successfully grabs {0}!*", grabbed.Name); BaseWeapon.BlockEquip(from, TimeSpan.FromMinutes(10.0)); BasePotion.BlockEquip(from, TimeSpan.FromMinutes(10.0)); grabbed.ClearHands(); BaseWeapon.BlockEquip(grabbed, TimeSpan.FromMinutes(10.0)); BasePotion.BlockEquip(grabbed, TimeSpan.FromMinutes(10.0)); grabbed.BeginAction(typeof(BaseMount)); grabbed.Freeze(TimeSpan.FromMinutes(10.0)); BaseMount.Dismount(grabbed); } else { from.Emote("*fails to grab {0}!*", grabbed.Name); } } }