示例#1
0
        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();
                }
            }
        }
示例#2
0
            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);
                    }
                }
            }