예제 #1
0
        public override void Execute(Server.Commands.CommandEventArgs args, object o)
        {
            if (o is AddonComponent)
            {
                BaseAddon addon = ((AddonComponent)o).Addon;

                if (addon.Components.Count > 0)
                {
                    for (int i = 0; i < addon.Components.Count; i++)
                    {
                        AddonComponent component = (AddonComponent)((addon.Components)[i]);
                        Static         newStatic = new Static(component.ItemID);

                        newStatic.Hue = component.Hue;
                        newStatic.MoveToWorld(new Point3D(component.Location), component.Map);
                    }
                }

                addon.Delete();

                AddResponse("The add-on has been converted to static objects.");
            }
            else if (o is Item && !(o is Static))
            {
                Item   i       = (Item)o;
                Static newItem = new Static(i.ItemID);

                newItem.Hue   = i.Hue;
                newItem.Layer = i.Layer;
                newItem.Light = i.Light;
                newItem.MoveToWorld(new Point3D(i.Location), i.Map);

                if (i.Parent == args.Mobile)
                {
                    newItem.Bounce(args.Mobile);
                }

                if (i is Container)
                {
                    ((Container)i).Destroy();
                }
                else
                {
                    i.Delete();
                }

                AddResponse("The item has been converted to a static.");
            }
            else
            {
                LogFailure("This command only works with non-static items or add-ons.");
            }
        }
예제 #2
0
 public void Convert2Static(BaseAddon design)
 {
     if (design.Components.Count > 0)
     {
         for (int i = 0; i < design.Components.Count; ++i)
         {
             AddonComponent component  = (AddonComponent)((design.Components)[i]);
             Static         equivalent = new Static(component.HuedItemID); //( component.ItemID );
             equivalent.Location = component.Location;                     //component.Location;
             equivalent.Map      = component.Map;                          //component.Map;
             equivalent.Hue      = component.Hue;                          //component.Map;
         }
     }
     design.Delete();
 }
예제 #3
0
        public override void Execute(Server.Commands.CommandEventArgs args, object o)
        {
            if (o is AddonComponent)
            {
                BaseAddon addon = ((AddonComponent)o).Addon;

                if (addon.Components.Count > 0)
                {
                    for (int i = 0; i < addon.Components.Count; i++)
                    {
                        AddonComponent component = (addon.Components)[i];
                        Item           newItem   = new Item(component.ItemID)
                        {
                            Hue = component.Hue, Name = component.Name
                        };

                        newItem.MoveToWorld(new Point3D(component.Location), component.Map);
                    }
                }

                addon.Delete();

                AddResponse("The add-on has been converted to an item.");
            }
            else if (o is Static)
            {
                Static s       = (Static)o;
                Item   newItem = new Item(s.ItemID)
                {
                    Hue = s.Hue, Layer = s.Layer, Light = s.Light, Name = s.Name
                };

                newItem.MoveToWorld(new Point3D(s.Location), s.Map);

                if (s.Parent == args.Mobile)
                {
                    newItem.Bounce(args.Mobile);
                }

                s.Delete();

                AddResponse("The static has been converted to an item.");
            }
            else
            {
                LogFailure("This command only works with static items or add-ons.");
            }
        }
예제 #4
0
 protected override void OnTarget(Mobile from, object targeted)
 {
     if (targeted is AddonComponent)
     {
         BaseAddon design = ((AddonComponent)targeted).Addon;
         if (design.Components.Count > 0)
         {
             for (int i = 0; i < design.Components.Count; ++i)
             {
                 AddonComponent component  = (AddonComponent)((design.Components)[i]);
                 Static         equivalent = new Static(component.HuedItemID); //( component.ItemID );
                 equivalent.Location = component.Location;                     //component.Location;
                 equivalent.Map      = component.Map;                          //component.Map;
                 equivalent.Hue      = component.Hue;                          //component.Map;
             }
         }
         design.Delete();
         from.SendMessage("Addon structure statified. You can now freeze it.");
     }
 }
예제 #5
0
        private void CancelPlacement(Mobile from)
        {
            BaseHouse house = BaseHouse.FindHouseAt(m_Addon);

            if (house != null && house.IsOwner(from) && house.Addons.Contains(m_Addon))
            {
                int hue = 0;

                if (m_Addon.RetainDeedHue)
                {
                    for (int i = 0; hue == 0 && i < m_Addon.Components.Count; ++i)
                    {
                        AddonComponent c = (AddonComponent)m_Addon.Components[i];

                        if (c.Hue != 0)
                        {
                            hue = c.Hue;
                        }
                    }
                }

                m_Addon.Delete();

                house.Addons.Remove(m_Addon);

                BaseAddonDeed deed = m_Addon.Deed;

                if (deed != null)
                {
                    if (m_Addon.RetainDeedHue)
                    {
                        deed.Hue = hue;
                    }

                    from.AddToBackpack(deed);
                }
            }
        }
예제 #6
0
파일: Stealing.cs 프로젝트: favesc/ServUO
            protected override void OnTarget(Mobile from, object target)
            {
                from.RevealingAction();

                Item   stolen = null;
                object root   = null;
                bool   caught = false;

                if (target is Item)
                {
                    root   = ((Item)target).RootParent;
                    stolen = TryStealItem((Item)target, ref caught);
                }
                else if (target is Mobile)
                {
                    Container pack = ((Mobile)target).Backpack;

                    if (pack != null && pack.Items.Count > 0)
                    {
                        int randomIndex = Utility.Random(pack.Items.Count);

                        root   = target;
                        stolen = TryStealItem(pack.Items[randomIndex], ref caught);
                    }

                    #region Monster Stealables
                    if (target is BaseCreature && from is PlayerMobile)
                    {
                        Server.Engines.CreatureStealing.StealingHandler.HandleSteal(target as BaseCreature, from as PlayerMobile);
                    }
                    #endregion
                }
                else
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }

                if (stolen != null)
                {
                    if (stolen is AddonComponent)
                    {
                        BaseAddon addon = ((AddonComponent)stolen).Addon as BaseAddon;
                        from.AddToBackpack(addon.Deed);
                        addon.Delete();
                    }
                    else
                    {
                        from.AddToBackpack(stolen);
                    }

                    if (!(stolen is Container || stolen.Stackable))
                    {
                        // do not return stolen containers or stackable items
                        StolenItem.Add(stolen, m_Thief, root as Mobile);
                    }
                }

                if (caught)
                {
                    if (root == null)
                    {
                        m_Thief.CriminalAction(false);
                    }
                    else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief))
                    {
                        m_Thief.CriminalAction(false);
                    }
                    else if (root is Mobile)
                    {
                        Mobile mobRoot = (Mobile)root;

                        if (!IsInGuild(mobRoot) && IsInnocentTo(m_Thief, mobRoot))
                        {
                            m_Thief.CriminalAction(false);
                        }

                        string message = String.Format("You notice {0} trying to steal from {1}.", m_Thief.Name, mobRoot.Name);

                        foreach (NetState ns in m_Thief.GetClientsInRange(8))
                        {
                            if (ns.Mobile != m_Thief)
                            {
                                ns.Mobile.SendMessage(message);
                            }
                        }
                    }
                }
                else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief))
                {
                    m_Thief.CriminalAction(false);
                }

                if (root is Mobile && ((Mobile)root).Player && m_Thief is PlayerMobile && IsInnocentTo(m_Thief, (Mobile)root) &&
                    !IsInGuild((Mobile)root))
                {
                    PlayerMobile pm = (PlayerMobile)m_Thief;

                    pm.PermaFlags.Add((Mobile)root);
                    pm.Delta(MobileDelta.Noto);
                }
            }
예제 #7
0
파일: Stealing.cs 프로젝트: ygtkms/ServUO
            protected override void OnTarget(Mobile from, object target)
            {
                from.RevealingAction();

                Item   stolen = null;
                object root   = null;
                bool   caught = false;

                if (target is Item)
                {
                    root   = ((Item)target).RootParent;
                    stolen = TryStealItem((Item)target, ref caught);
                }
                else if (target is Mobile)
                {
                    var bc = target as BaseCreature;
                    root = target;

                    if (bc != null && from is PlayerMobile)
                    {
                        if (bc.Controlled || bc.Summoned)
                        {
                            from.SendLocalizedMessage(502708); //You can't steal from this.
                        }
                        if (bc.HasBeenStolen)
                        {
                            from.SendLocalizedMessage(1094948); //That creature has already been stolen from.  There is nothing left to steal.
                        }
                        else
                        {
                            from.SendLocalizedMessage(1010579); // You reach into the backpack... and try to take something.

                            Engines.CreatureStealing.StealingHandler.HandleSteal(bc, (PlayerMobile)from, ref stolen);

                            if (stolen == null)
                            {
                                if (!bc.StealPackGenerated)
                                {
                                    bc.GenerateLoot(LootStage.Stolen);
                                }

                                StealRandom((Mobile)target, ref caught, ref stolen);
                            }
                        }
                    }
                    else
                    {
                        from.SendLocalizedMessage(1010579); // You reach into the backpack... and try to take something.
                        StealRandom((Mobile)target, ref caught, ref stolen);
                    }
                }
                else
                {
                    m_Thief.SendLocalizedMessage(502710); // You can't steal that!
                }

                if (stolen != null)
                {
                    if (stolen is AddonComponent)
                    {
                        BaseAddon addon = ((AddonComponent)stolen).Addon;
                        from.AddToBackpack(addon.Deed);
                        addon.Delete();
                    }
                    else
                    {
                        from.AddToBackpack(stolen);
                    }

                    if (!(stolen is Container || stolen.Stackable))
                    {
                        // do not return stolen containers or stackable items
                        StolenItem.Add(stolen, m_Thief, root as Mobile);
                    }

                    if (target is BaseCreature)
                    {
                        ((BaseCreature)target).HasBeenStolen = true;
                    }
                }

                if (caught)
                {
                    if (root == null)
                    {
                        m_Thief.CriminalAction(false);
                    }
                    else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief))
                    {
                        m_Thief.CriminalAction(false);
                    }
                    else if (root is Mobile)
                    {
                        Mobile mobRoot = (Mobile)root;

                        if (!IsInGuild(mobRoot) && IsInnocentTo(m_Thief, mobRoot))
                        {
                            m_Thief.CriminalAction(false);
                        }

                        string message = String.Format("You notice {0} trying to steal from {1}.", m_Thief.Name, mobRoot.Name);

                        foreach (NetState ns in m_Thief.GetClientsInRange(8))
                        {
                            if (ns.Mobile != m_Thief)
                            {
                                ns.Mobile.SendMessage(message);
                            }
                        }
                    }
                }
                else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief))
                {
                    m_Thief.CriminalAction(false);
                }

                if (root is Mobile && ((Mobile)root).Player && m_Thief is PlayerMobile && IsInnocentTo(m_Thief, (Mobile)root) &&
                    !IsInGuild((Mobile)root))
                {
                    PlayerMobile pm = (PlayerMobile)m_Thief;

                    pm.PermaFlags.Add((Mobile)root);
                    pm.Delta(MobileDelta.Noto);
                }
            }
예제 #8
0
            private Item TryStealItem(Item toSteal, ref bool caught)
            {
                //Close bank box on steal attempt -Adam
                BankBox box = m_Thief.FindBankNoCreate();

                if (box != null && box.Opened)
                {
                    box.Close();
                    m_Thief.Send(new MobileUpdate(m_Thief));
                }

                Item stolen = null;

                object root = toSteal.RootParent;

                var contParent = toSteal.Parent as Container;

                StealableArtifactsSpawner.StealableInstance si = null;
                if (toSteal.Parent == null || !toSteal.Movable)
                {
                    si = StealableArtifactsSpawner.GetStealableInstance(toSteal);
                }

                BaseAddon addon = null;

                if (toSteal is AddonComponent)
                {
                    addon = ((AddonComponent)toSteal).Addon;
                }

                bool stealflag = (addon != null && addon.GetSavedFlag(ItemFlags.StealableFlag)) ||
                                 toSteal.GetSavedFlag(ItemFlags.StealableFlag);

                if (!IsEmptyHanded(m_Thief))
                {
                    m_Thief.SendLocalizedMessage(1005584);                     // Both hands must be free to steal.
                }
                else if (root is Mobile && ((Mobile)root).Player && IsInnocentTo(m_Thief, (Mobile)root) && !IsInGuild(m_Thief))
                {
                    m_Thief.SendLocalizedMessage(1005596);                     // You must be in the thieves guild to steal from other players.
                }
                else if (SuspendOnMurder && root is Mobile && ((Mobile)root).Player && IsInGuild(m_Thief) && m_Thief.Kills > 0)
                {
                    m_Thief.SendLocalizedMessage(502706);                     // You are currently suspended from the thieves guild.
                }
                else if (root is BaseVendor && ((BaseVendor)root).IsInvulnerable)
                {
                    m_Thief.SendLocalizedMessage(1005598);                     // You can't steal from shopkeepers.
                }
                else if (root is PlayerVendor)
                {
                    m_Thief.SendLocalizedMessage(502709);                     // You can't steal from vendors.
                }
                else if (!m_Thief.CanSee(toSteal))
                {
                    m_Thief.SendLocalizedMessage(500237);                     // Target can not be seen.
                }
                else if (m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold(m_Thief, toSteal, false, true))
                {
                    m_Thief.SendLocalizedMessage(1048147);                     // Your backpack can't hold anything else.
                }
                #region Sigils
                else if (toSteal is Sigil)
                {
                    PlayerState pl      = PlayerState.Find(m_Thief);
                    Faction     faction = (pl == null ? null : pl.Faction);

                    var sig = (Sigil)toSteal;

                    if (!m_Thief.InRange(toSteal.GetWorldLocation(), 1))
                    {
                        m_Thief.SendLocalizedMessage(502703);  // You must be standing next to an item to steal it.
                    }
                    else if (root != null)                     // not on the ground
                    {
                        m_Thief.SendLocalizedMessage(502710);  // You can't steal that!
                    }
                    else if (faction != null)
                    {
                        if (!m_Thief.CanBeginAction(typeof(IncognitoSpell)))
                        {
                            m_Thief.SendLocalizedMessage(1010581);                             //	You cannot steal the sigil when you are incognito
                        }
                        else if (DisguiseTimers.IsDisguised(m_Thief))
                        {
                            m_Thief.SendLocalizedMessage(1010583);                             //	You cannot steal the sigil while disguised
                        }
                        else if (!m_Thief.CanBeginAction(typeof(PolymorphSpell)))
                        {
                            m_Thief.SendLocalizedMessage(1010582);                             //	You cannot steal the sigil while polymorphed
                        }
                        else if (TransformationSpellHelper.UnderTransformation(m_Thief))
                        {
                            m_Thief.SendLocalizedMessage(1061622);                             // You cannot steal the sigil while in that form.
                        }
                        else if (m_Thief is PlayerMobile && ((PlayerMobile)m_Thief).SavagePaintExpiration > TimeSpan.Zero)
                        {
                            m_Thief.SendLocalizedMessage(1114352);                             // You cannot steal the sigil while disguised in savage paint.
                        }
                        else if (pl.IsLeaving)
                        {
                            m_Thief.SendLocalizedMessage(1005589);                             // You are currently quitting a faction and cannot steal the town sigil
                        }
                        else if (sig.IsBeingCorrupted && sig.LastMonolith.Faction == faction)
                        {
                            m_Thief.SendLocalizedMessage(1005590);                             //	You cannot steal your own sigil
                        }
                        else if (sig.IsPurifying)
                        {
                            m_Thief.SendLocalizedMessage(1005592);                             // You cannot steal this sigil until it has been purified
                        }
                        else if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, 0.0, 0.0))
                        {
                            if (Sigil.ExistsOn(m_Thief))
                            {
                                m_Thief.SendLocalizedMessage(1010258);
                                //	The sigil has gone back to its home location because you already have a sigil.
                            }
                            else if (m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold(m_Thief, sig, false, true))
                            {
                                m_Thief.SendLocalizedMessage(1010259);                                 //	The sigil has gone home because your backpack is full
                            }
                            else
                            {
                                if (sig.IsBeingCorrupted)
                                {
                                    sig.GraceStart = DateTime.UtcNow;                                     // begin grace period
                                }

                                m_Thief.SendLocalizedMessage(1010586);                                 // YOU STOLE THE SIGIL!!!   (woah, calm down now)

                                if (sig.LastMonolith != null && sig.LastMonolith.Sigil != null)
                                {
                                    sig.LastMonolith.Sigil = null;
                                    sig.LastStolen         = DateTime.UtcNow;
                                }

                                switch (PvPController._SigilAnnounceStolen)
                                {
                                case PvPController.SigilStolenAnnouncing.All:
                                {
                                    foreach (Faction factionToBCast in Faction.Factions)
                                    {
                                        List <PlayerState> members = factionToBCast.Members;

                                        if (sig.Corrupted != null)
                                        {
                                            if (sig.Corrupted == factionToBCast)
                                            {
                                                foreach (PlayerState member in members)
                                                {
                                                    member.Mobile.SendMessage(
                                                        factionToBCast.Definition.HueBroadcast,
                                                        "The {0} have stolen the {1} sigil from your faction stronghold!",
                                                        faction.Definition.FriendlyName,
                                                        sig.Town.Definition.FriendlyName);
                                                }
                                            }
                                            else
                                            {
                                                foreach (PlayerState member in members)
                                                {
                                                    member.Mobile.SendMessage(
                                                        factionToBCast.Definition.HueBroadcast,
                                                        "The {0} have stolen the {1} sigil from the {2} stronghold!",
                                                        faction.Definition.FriendlyName,
                                                        sig.Town.Definition.FriendlyName,
                                                        sig.Corrupted.Definition.FriendlyName);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            foreach (PlayerState member in members)
                                            {
                                                member.Mobile.SendMessage(
                                                    factionToBCast.Definition.HueBroadcast,
                                                    "The {0} have stolen the {1} sigil!",
                                                    faction.Definition.FriendlyName,
                                                    sig.Town.Definition.FriendlyName);
                                            }
                                        }
                                    }
                                }
                                break;

                                case PvPController.SigilStolenAnnouncing.Owner:
                                {
                                    if (sig.Corrupted != null)
                                    {
                                        List <PlayerState> members = sig.Corrupted.Members;

                                        foreach (PlayerState member in members)
                                        {
                                            member.Mobile.SendMessage(
                                                sig.Corrupted.Definition.HueBroadcast,
                                                "The {0} have stolen the {1} sigil from your faction stronghold!",
                                                faction.Definition.FriendlyName,
                                                sig.Town.Definition.FriendlyName);
                                        }
                                    }
                                }
                                break;
                                }

                                return(sig);
                            }
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage(1005594);                             //	You do not have enough skill to steal the sigil
                        }
                    }
                    else
                    {
                        m_Thief.SendLocalizedMessage(1005588);                         //	You must join a faction to do that
                    }
                }
                #endregion

                else if (!stealflag && si == null && (toSteal.Parent == null || !toSteal.Movable))
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if ((toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root)) &&
                         !(toSteal.RootParent is FillableContainer) && !stealflag)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (toSteal is Spellbook)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (toSteal.Nontransferable)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (m_Thief.EraAOS && si == null && toSteal is Container)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (toSteal is IEthicsItem && ((IEthicsItem)toSteal).EthicsItemState != null &&
                         !((IEthicsItem)toSteal).EthicsItemState.HasExpired)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (!m_Thief.InRange(toSteal.GetWorldLocation(), 1))
                {
                    m_Thief.SendLocalizedMessage(502703);                     // You must be standing next to an item to steal it.
                }
                // Alan: commented this out b/c there shouldn't be a required skill level to steal stealflag stuff
                //else if ( ( si != null && m_Thief.Skills[SkillName.Stealing].Value < 100.0 ) || ( stealflag ) && m_Thief.Skills[SkillName.Stealing].Value < 100.0 ) ) //&& m_Thief.Skills[SkillName.Stealing].Value < 90.0 ) )
                //	m_Thief.SendLocalizedMessage( 1060025, "", 0x66D ); // You're not skilled enough to attempt the theft of this item.
                else if (toSteal.Parent is Mobile)
                {
                    m_Thief.SendLocalizedMessage(1005585);           // You cannot steal items which are equipped.
                }
                else if (toSteal.GetSavedFlag(0x01))                 //Not lootable item
                {
                    m_Thief.SendLocalizedMessage(502710);            // You can't steal that!
                }
                else if (root == m_Thief || (root is BaseCreature && ((BaseCreature)root).GetMaster() == m_Thief))
                {
                    m_Thief.SendLocalizedMessage(502704);                     // You catch yourself red-handed.
                }
                else if (root is Mobile && ((Mobile)root).AccessLevel > AccessLevel.Player)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (root is Mobile && !m_Thief.CanBeHarmful((Mobile)root))
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (root is Corpse)
                {
                    m_Thief.SendLocalizedMessage(502710);                     // You can't steal that!
                }
                else if (m_Thief.Spell != null)
                {
                    m_Thief.SendMessage("You are too busy concentrating on your spell to steal that item.");
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if (addon != null)
                    {
                        w = addon.Weight = addon.TotalWeight;
                    }

                    if (w > 10 && !stealflag)
                    {
                        m_Thief.SendMessage("That is too heavy to steal.");
                    }
                    else
                    {
                        m_Thief.BeginAction(typeof(Hiding));

                        Timer.DelayCall(TimeSpan.FromSeconds(SpecialMovesController._StealingRehideDelay), ReleaseHideLock, m_Thief);

                        if (toSteal.Stackable && toSteal.Amount > 1)
                        {
                            var maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight);
                            var minAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 25.0) / toSteal.Weight);                             //added a min amount

                            if (minAmount < 1)
                            {
                                minAmount = 1;
                            }

                            if (maxAmount < 1)
                            {
                                maxAmount = 1;
                            }
                            else if (maxAmount > toSteal.Amount)
                            {
                                maxAmount = toSteal.Amount;
                            }

                            int amount = Utility.RandomMinMax(minAmount, maxAmount);                             //(change from 1, maxamount)

                            if (amount >= toSteal.Amount)
                            {
                                var pileWeight = (int)Math.Ceiling(toSteal.Weight * toSteal.Amount);
                                pileWeight *= 10;

                                if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5))
                                {
                                    stolen = toSteal;
                                }
                            }
                            else
                            {
                                var pileWeight = (int)Math.Ceiling(toSteal.Weight * amount);
                                pileWeight *= 10;

                                if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5))
                                {
                                    stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount) ?? toSteal;
                                }
                            }
                        }
                        else
                        {
                            var iw = (int)Math.Ceiling(w);
                            iw *= 10;

                            if (stealflag || m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, iw - 22.5, iw + 27.5))
                            {
                                stolen = toSteal;
                            }
                        }

                        if (stolen is PowerScroll)
                        {
                            var  scroll  = (PowerScroll)stolen;
                            bool success = Utility.RandomBool();

                            if (success || Utility.RandomBool())
                            {
                                BaseMount.Dismount(m_Thief);
                                BaseMount.SetMountPrevention(
                                    m_Thief, BlockMountType.DismountRecovery, TimeSpan.FromSeconds(success ? 60.0 : 5.0));
                            }
                        }

                        if (stolen != null)
                        {
                            m_Thief.SendLocalizedMessage(502724); // You successfully steal the item.

                            if (stolen is Head2)
                            {
                                ((Head2)stolen).Owner = m_Thief as PlayerMobile;
                            }

                            if (si != null)
                            {
                                toSteal.Movable = true;
                                si.Item         = null;
                            }

                            if (stealflag)
                            {
                                //toSteal.SetSavedFlag( 0x04, false );
                                // ARTEGORDONMOD
                                // set the taken flag to trigger release from any controlling spawner
                                ItemFlags.SetTaken(stolen, true);
                                // clear the stealable flag so that the item can only be stolen once if it is later locked down.
                                ItemFlags.SetStealable(stolen, false);

                                if (addon != null)                                 //deed it up!
                                {
                                    Item deed = addon.Deed;

                                    addon.Delete();
                                    stolen = deed;
                                }
                                else                                 // release it if it was locked down
                                {
                                    toSteal.Movable = true;
                                }

                                if (toSteal.Spawner != null)                                 //its not spawned anymore, its STOLEN!
                                {
                                    toSteal.Spawner.Remove(toSteal);
                                    toSteal.Spawner = null;
                                }
                            }

                            Conquests.CheckProgress <StealingConquest>(m_Thief as PlayerMobile, toSteal);
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage(502723);                             // You fail to steal the item.
                        }

                        caught = !stealflag && (m_Thief.Skills[SkillName.Stealing].Value < Utility.Random(150));
                    }
                }

                return(stolen);
            }