Пример #1
0
            private Item TryStealItem( Item toSteal, ref bool caught )
            {
                Item stolen = null;

                object root = toSteal.RootParent;

                if ( !IsEmptyHanded( m_Thief ) )
                {
                    m_Thief.SendAsciiMessage( "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.SendAsciiMessage( "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.SendAsciiMessage( "You are currently suspended from the thieves guild." );
                }
                else if ( root is BaseVendor && ((BaseVendor)root).IsInvulnerable )
                {
                    m_Thief.SendAsciiMessage( "You can't steal from shopkeepers." );
                }
                else if ( root is PlayerVendor )
                {
                    m_Thief.SendAsciiMessage( "You can't steal from vendors." );
                }
                else if ( !m_Thief.CanSee( toSteal ) )
                {
                    m_Thief.SendAsciiMessage( "Target can not be seen." );
                }
                else if ( m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold( m_Thief, toSteal, false, true ) )
                {
                    m_Thief.SendAsciiMessage( "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 );

                    Sigil sig = (Sigil) toSteal;

                    if ( !m_Thief.InRange( toSteal.GetWorldLocation(), 1 ) )
                    {
                        m_Thief.SendMessage( "You must be standing next to an item to steal it." );
                    }
                    else if ( root != null ) // not on the ground
                    {
                        m_Thief.SendMessage( "You can't steal that!" );
                    }
                    else if ( faction != null )
                    {
                        if ( !m_Thief.CanBeginAction( typeof( IncognitoSpell ) ) )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal the sigil when you are incognitoed." );
                        }
                        else if ( DisguiseGump.IsDisguised( m_Thief ) )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal the sigil while disguised." );
                        }
                        else if ( !m_Thief.CanBeginAction( typeof( PolymorphSpell ) ) )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal the sigil while polymorphed." );
                        }
                        else if ( TransformationSpell.UnderTransformation( m_Thief ) )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal the sigil while in that form." );
                        }
                        else if ( pl.IsLeaving )
                        {
                            m_Thief.SendAsciiMessage( "You are currently quitting a faction and cannot steal the town sigil." );
                        }
                        else if ( sig.IsBeingCorrupted && sig.LastMonolith.Faction == faction )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal your own sigil." );
                        }
                        else if ( sig.IsPurifying )
                        {
                            m_Thief.SendAsciiMessage( "You cannot steal this sigil until it has been purified." );
                        }
                        else if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, 80.0, 80.0 ) )
                        {
                            if ( Sigil.ExistsOn( m_Thief ) )
                            {
                                m_Thief.SendMessage( "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.SendAsciiMessage( "The sigil has gone home because your backpack is full." );
                            }
                            else
                            {
                                if ( sig.IsBeingCorrupted )
                                    sig.GraceStart = DateTime.Now; // begin grace period

                                m_Thief.SendAsciiMessage( "YOU STOLE THE SIGIL!!!" );

                                if ( sig.LastMonolith != null )
                                    sig.LastMonolith.Sigil = null;

                                sig.LastStolen = DateTime.Now;

                                return sig;
                            }
                        }
                        else
                        {
                            m_Thief.SendAsciiMessage( "You do not have enough skill to steal the sigil." );
                        }
                    }
                    else
                    {
                        m_Thief.SendAsciiMessage( "You must join a faction to do that." );
                    }
                }
                #endregion
                else if ( toSteal.Parent == null || !toSteal.Movable || toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed( root ) )
                {
                    m_Thief.SendAsciiMessage( "You can't steal that!" );
                }
                else if ( Core.AOS && toSteal is Container )
                {
                    m_Thief.SendAsciiMessage( "You can't steal that!" );
                }
                else if ( !m_Thief.InRange( toSteal.GetWorldLocation(), 1 ) )
                {
                    m_Thief.SendAsciiMessage( "You must be standing next to an item to steal it." );
                }
                else if ( toSteal.Parent is Mobile )
                {
                    m_Thief.SendAsciiMessage( "You cannot steal items which are equipped." );
                }
                else if ( root == m_Thief )
                {
                    m_Thief.SendAsciiMessage( "You catch yourself red-handed." );
                }
                else if ( root is Mobile && ((Mobile)root).AccessLevel > AccessLevel.Player )
                {
                    m_Thief.SendAsciiMessage( "You can't steal that!" );
                }
                else if ( root is Mobile && !m_Thief.CanBeHarmful( (Mobile)root ) )
                {
                }
                else if ( root is Corpse )
                {
                    m_Thief.SendAsciiMessage( "You can't steal that!" );
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if ( w > 10 )
                    {
                        m_Thief.SendMessage( "That is too heavy to steal." );
                    }
                    else
                    {
                        if ( toSteal.Stackable && toSteal.Amount > 1 )
                        {
                            int maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight);

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

                            int amount = Utility.RandomMinMax( 1, maxAmount );

                            if ( amount >= toSteal.Amount )
                            {
                                int 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
                            {
                                int pileWeight = (int)Math.Ceiling( toSteal.Weight * amount );
                                pileWeight *= 10;

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

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

                        if ( stolen != null )
                            m_Thief.SendAsciiMessage( "You succesfully steal the item." );
                        else
                            m_Thief.SendAsciiMessage( "You fail to steal the item." );

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

                return stolen;
            }
Пример #2
0
            private Item TryStealItem( Item toSteal, ref bool caught )
            {
                Item stolen = null;

                object root = toSteal.RootParent;

                if ( !IsEmptyHanded( m_Thief ) )
                {
                    m_Thief.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal.
                }
                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 );

                    Sigil 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 ( DisguiseGump.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 ( TransformationSpell.UnderTransformation( m_Thief ) )
                        {
                            m_Thief.SendLocalizedMessage( 1061622 ); // You cannot steal the sigil while in that form.
                        }
                        else if ( Spells.ExoticWeaponry.AnimalForm.UnderTransformation( m_Thief ) )
                        {
                            m_Thief.SendLocalizedMessage( 1063222 ); // You cannot steal the sigil while mimicking an animal.
                        }
                        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, 80.0, 80.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.Now; // begin grace period

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

                                if ( sig.LastMonolith != null )
                                    sig.LastMonolith.Sigil = null;

                                sig.LastStolen = DateTime.Now;

                                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 ( ( toSteal.Parent == null || !toSteal.Movable ) )
                {
                    m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
                }
                else if ( toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed( root ) )
                {
                    m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
                }
                else if ( Core.AOS && toSteal is Container )
                {
                    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.
                }
                else if ( m_Thief.Skills[SkillName.Stealing].Value < 5.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 equiped.
                }
                else if ( root == 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 ) )
                {
                }
                else if ( root is Corpse )
                {
                    m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if ( w > 10 )
                    {
                        m_Thief.SendMessage( "That is too heavy to steal." );
                    }
                    else
                    {
                        if ( toSteal.Stackable && toSteal.Amount > 1 )
                        {
                            int maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value * 0.1) / toSteal.Weight);

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

                            int amount = Utility.RandomMinMax( 1, maxAmount );

                            if ( amount >= toSteal.Amount )
                            {
                                int 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
                            {
                                int 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 );

                                    if ( stolen == null )
                                        stolen = toSteal;
                                }
                            }
                        }
                        else
                        {
                            int iw = (int)Math.Ceiling( w );
                            iw *= 10;

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

                        if ( stolen != null )
                        {
                            m_Thief.SendLocalizedMessage( 502724 ); // You succesfully steal the item.
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage( 502723 ); // You fail to steal the item.
                        }

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

                return stolen;
            }
Пример #3
0
            private Item TryStealItem(Item toSteal, ref bool caught)
            {
                Item stolen = null;

                object root = toSteal.RootParent;

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

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

                    Sigil 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 (DisguiseGump.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 (AnimalForm.UnderTransformation(m_Thief))
                        {
                            m_Thief.SendLocalizedMessage(1063222); // You cannot steal the sigil while mimicking an animal.
                        }
                        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, 80.0, 80.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.Now; // begin grace period

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

                                if (sig.LastMonolith != null)
                                    sig.LastMonolith.Sigil = null;

                                sig.LastStolen = DateTime.Now;

                                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
                //ARTEGORDONMOD
                // allow stealing of STEALABLE items on the ground or in containers
                else if (si == null && (toSteal.Parent == null || !toSteal.Movable) && !ItemFlags.GetStealable(toSteal))
                {
                    m_Thief.SendLocalizedMessage(502710); // You can't steal that!
                }
                //ARTEGORDONMOD
                // allow stealing of of STEALABLE newbied/blessed items
                else if ((toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root)) && !ItemFlags.GetStealable(toSteal))
                {
                    m_Thief.SendLocalizedMessage(502710); // You can't steal that!
                }
                //ARTEGORDONMOD
                // allow stealing of STEALABLE containers
                else if (Core.AOS && si == null && toSteal is Container && !ItemFlags.GetStealable(toSteal))
                {
                    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.
                }
                else if (si != null && m_Thief.Skills[SkillName.Stealing].Value < 100.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 equiped.
                }
                else if (root == 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))
                {
                }
                else if (root is Corpse)
                {
                    m_Thief.SendLocalizedMessage(502710); // You can't steal that!
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if (w > 10)
                    {
                        m_Thief.SendMessage("That is too heavy to steal.");
                    }
                    else
                    {
                        if (toSteal.Stackable && toSteal.Amount > 1)
                        {
                            //ARTEGORDON
                            // fix for zero-weight stackables
                            int maxAmount = toSteal.Amount;
                            if (toSteal.Weight > 0)
                                maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight);

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

                            int amount = Utility.RandomMinMax(1, maxAmount);

                            if (amount >= toSteal.Amount)
                            {
                                int 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
                            {
                                int 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);

                                    if (stolen == null)
                                        stolen = toSteal;
                                }
                            }
                        }
                        else
                        {
                            int iw = (int)Math.Ceiling(w);
                            iw *= 10;

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

                        if (stolen != null)
                        {
                            m_Thief.SendLocalizedMessage(502724); // You succesfully steal the item.
                            // 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);
                            // release it if it was locked down
                            stolen.Movable = true;

                            // End mod for stealable rares and other locked down items

                            if (si != null)
                            {
                                toSteal.Movable = true;
                                si.Item = null;
                            }
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage(502723); // You fail to steal the item.
                        }

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

                return stolen;
            }
            private Item TryStealItem(Item toSteal, ref bool caught)
            {
                Item stolen = null;

                object root = toSteal.RootParent;

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

                if (!Stealing.IsEmptyHanded(m_Squire))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.HandsAreFull, null, null);
                    }
                }
                else if (m_Squire.Region.IsPartOf(typeof(Engines.ConPVP.SafeZone)))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.StealingNotAllowedHere, null, null);
                    }
                }
                else if (root is Mobile && ((Mobile)root).Player && !Stealing.IsInGuild(m_From))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NotAPartOfThievesGuild, null, null);
                    }
                }
                else if (Stealing.SuspendOnMurder && root is Mobile && ((Mobile)root).Player && Stealing.IsInGuild(m_From) && m_From.Kills > 0)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.SuspendedFromThievesGuild, null, null);
                    }
                }
                else if (root is BaseVendor && ((BaseVendor)root).IsInvulnerable)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealFromVendors, null, null);
                    }
                }
                else if (root is PlayerVendor)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealFromVendors, null, null);
                    }
                }
                else if (!m_Squire.CanSee(toSteal))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotSeeStealingTarget, null, null);
                    }
                }
                else if (m_Squire.Backpack == null || !m_Squire.Backpack.CheckHold(m_Squire, toSteal, false, true))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.FullBackpackStealing, null, null);
                    }
                }
                #region Sigils
                else if (toSteal is Sigil)
                {
                    PlayerState pl = PlayerState.Find(m_From);
                    Faction faction = (pl == null ? null : pl.Faction);

                    Sigil sig = (Sigil)toSteal;

                    if (!m_Squire.InRange(toSteal.GetWorldLocation(), 1))
                    {
                        if (m_Squire.m_SquireBeQuiet == false)
                        {
                            SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NeedToBeCloserToSteal, null, null);
                        }
                    }
                    else if (root != null)
                    {
                        if (m_Squire.m_SquireBeQuiet == false)
                        {
                            SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                        }
                    }
                    else if (faction != null)
                    {
                        if (!m_Squire.CanBeginAction(typeof(IncognitoSpell)))
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileMorphed, null, null);
                            }
                        }
                        else if (DisguiseTimers.IsDisguised(m_Squire))
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileMorphed, null, null);
                            }
                        }
                        else if (!m_Squire.CanBeginAction(typeof(PolymorphSpell)))
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileMorphed, null, null);
                            }
                        }
                        else if (TransformationSpellHelper.UnderTransformation(m_Squire))
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileMorphed, null, null);
                            }
                        }
                        else if (AnimalForm.UnderTransformation(m_Squire))
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileMorphed, null, null);
                            }
                        }
                        else if (pl.IsLeaving)
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealWhileLeavingFaction, null, null);
                            }
                        }
                        else if (sig.IsBeingCorrupted && sig.LastMonolith.Faction == faction)
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealOwnSigil, null, null);
                            }
                        }
                        else if (sig.IsPurifying)
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealSigilWhilePurifying, null, null);
                            }
                        }
                        else if (m_Squire.CheckTargetSkill(SkillName.Stealing, toSteal, 80.0, 80.0))
                        {
                            if (Sigil.ExistsOn(m_Squire))
                            {
                                if (m_Squire.m_SquireBeQuiet == false)
                                {
                                    SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.SigilHasReturnedBecauseAlreadyHaveOne, null, null);
                                }
                            }
                            else if (m_Squire.Backpack == null || !m_Squire.Backpack.CheckHold(m_Squire, sig, false, true))
                            {
                                if (m_Squire.m_SquireBeQuiet == false)
                                {
                                    SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.SigilHasReturnedBecauseBackpackIsFull, null, null);
                                }
                            }
                            else
                            {
                                if (sig.IsBeingCorrupted)
                                    sig.GraceStart = DateTime.UtcNow; // begin grace period

                                if (m_Squire.m_SquireBeQuiet == false)
                                {
                                    SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.SuccessfulSigilSteal, null, null);
                                }

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

                                return sig;
                            }
                        }
                        else
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NotSkilledEnoughToStealSigil, null, null);
                            }
                        }
                    }
                    else
                    {
                        if (m_Squire.m_SquireBeQuiet == false)
                        {
                            SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NotInAFactionSteal, null, null);
                        }
                    }
                }
                #endregion
                else if (si == null && (toSteal.Parent == null || !toSteal.Movable))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                    }
                }
                else if (toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                    }
                }
                else if (Core.AOS && si == null && toSteal is Container)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                    }
                }
                else if (!m_Squire.InRange(toSteal.GetWorldLocation(), 1))
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NeedToBeCloserToSteal, null, null);
                    }
                }
                else if (si != null && m_Squire.Skills[SkillName.Stealing].Value < 100.0)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.NotSkilledEnoughToStealItem, null, null);
                    }
                }
                else if (toSteal.Parent is Mobile)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealFromTheirHands, null, null);
                    }
                }
                else if (root == m_Squire)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.StealFromSelf, null, null);
                    }
                }
                else if (root is Mobile && ((Mobile)root).AccessLevel > AccessLevel.Player)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                    }
                }
                else if (root is Mobile && !m_Squire.CanBeHarmful((Mobile)root))
                {
                }
                else if (root is Corpse)
                {
                    if (m_Squire.m_SquireBeQuiet == false)
                    {
                        SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.CannotStealThat, null, null);
                    }
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if (w > 10)
                    {
                        if (m_Squire.m_SquireBeQuiet == false)
                        {
                            SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.TooHeavyToSteal, null, null);
                        }
                    }
                    else
                    {
                        if (toSteal.Stackable && toSteal.Amount > 1)
                        {
                            int maxAmount = (int)((m_Squire.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight);

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

                            int amount = Utility.RandomMinMax(1, maxAmount);

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

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

                                if (m_Squire.CheckTargetSkill(SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5))
                                {
                                    stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount);

                                    if (stolen == null)
                                        stolen = toSteal;
                                }
                            }
                        }
                        else
                        {
                            int iw = (int)Math.Ceiling(w);
                            iw *= 10;

                            if (m_Squire.CheckTargetSkill(SkillName.Stealing, toSteal, iw - 22.5, iw + 27.5))
                                stolen = toSteal;
                        }

                        if (stolen != null)
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.SuccessfulSteal, null, null);
                            }

                            if (si != null)
                            {
                                toSteal.Movable = true;
                                si.Item = null;
                            }
                        }
                        else
                        {
                            if (m_Squire.m_SquireBeQuiet == false)
                            {
                                SquireDialog.DoSquireDialog(m_From, m_Squire, SquireDialogTree.UnsuccessfulSteal, null, null);
                            }
                        }

                        caught = (m_Squire.Skills[SkillName.Stealing].Value < Utility.Random(150));
                    }
                }

                m_Squire.m_StealingDelay = DateTime.Now + TimeSpan.FromSeconds(10);
                return stolen;
            }
Пример #5
0
            private Item TryStealItem(Item toSteal, object root, int difficulty, ref bool ok, ref bool caught)
            {
                Item stolen = null;

                if (toSteal is KeyRing)
                    toSteal.Weight = 1;

                /*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 (root is BaseVendor || root is PlayerVendor)
                {
                    m_Thief.SendLocalizedMessage(1005598); // You can't steal from shopkeepers.
                }
                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 (!m_Thief.CanSee(toSteal) || (root != null && !m_Thief.CanSee(root)))
                {
                    m_Thief.SendLocalizedMessage(500237); // Target can not be seen.
                }
                else if (!toSteal.Movable || toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root))
                {
                    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.
                }
                else if (toSteal.Parent is Mobile)
                {
                    m_Thief.SendLocalizedMessage(1005585); // You cannot steal items which are equiped.
                }
                else if (root == m_Thief)
                {
                    m_Thief.SendLocalizedMessage(502704); // You catch yourself red-handed.
                }
                else if (root is Mobile && (((Mobile)root).AccessLevel > AccessLevel.Player || !m_Thief.CanBeHarmful((Mobile)root)))
                {
                    m_Thief.SendLocalizedMessage(502710); // You can't steal that!
                }
                else
                {
                    for (Item p = toSteal.Parent as Item; p != null; p = p.Parent as Item)
                    {
                        if (p is LockableContainer && ((LockableContainer)p).Locked)
                        {
                            m_Thief.SendAsciiMessage("That is not accessable.");
                            return null;
                        }
                    }

                    if (toSteal.Weight + toSteal.TotalWeight > 10)
                    {
                        m_Thief.SendAsciiMessage("That is too heavy to steal from someone's backpack.");
                    }
                    else
                    {
                        ok = true;

                        double w = toSteal.PileWeight + toSteal.TotalWeight;
                        double check;
                        if (w >= 10)
                        {
                            //check = 10 * 3.0 * difficulty + 10.0;
                            check = 10 * 3.0 * (difficulty + 1) + 10.0;
                            caught = CheckDetect((10 * 5.0 * difficulty) / (m_Thief.Skills.Stealing.Value + 100.0), root as Mobile);
                        }
                        else
                        {
                            //check = w * 3.0 * difficulty + 10.0;
                            check = w * 3.0 * (difficulty + 1) + 10.0;
                            if (toSteal is Key || toSteal is Multis.Deeds.HouseDeed || toSteal is KeyRing)
                                w += 5;
                            caught = CheckDetect((w * 5.0 * difficulty) / (m_Thief.Skills.Stealing.Value + 100.0), root as Mobile);
                        }

                        if (m_Thief.CheckSkill(SkillName.Stealing, check - 25, check + 25))
                        {
                            m_Thief.SendLocalizedMessage(502724); // You succesfully steal the item.
                            if (toSteal.Stackable && toSteal.Amount > 1)
                            {
                                int amount;
                                /*int maxAmount = (int)( (m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight );

                                if ( maxAmount < 1 )
                                    maxAmount = 1;
                                else if ( maxAmount > toSteal.Amount )
                                    maxAmount = toSteal.Amount;
                                amount = Utility.Random( maxAmount ) + 1;*/

                                amount = Utility.Random(10) + 1;

                                if (amount > w)
                                    amount = toSteal.Amount;
                                else
                                    amount = (toSteal.Amount * amount) / (toSteal.PileWeight + toSteal.TotalWeight);

                                if (amount < 1)
                                    amount = 1;

                                if (amount >= toSteal.Amount)
                                    stolen = toSteal;
                                else
                                    stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount);
                            }
                            else
                            {
                                stolen = toSteal;
                            }
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage(502723); // You fail to steal the item.
                        }
                    }
                }

                return stolen;
            }
Пример #6
0
            private Item TryStealItem( Item toSteal, ref bool caught )
            {
                Item stolen = null;

                object root = toSteal.RootParent;

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

                if ( !IsEmptyHanded( m_Thief ) )
                {
                    m_Thief.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal.
                }
                else if ( root is Mobile && ( (Mobile) root ).IsPlayer && 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 ).IsPlayer && 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 || ( !toSteal.Stackable && !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 );

                    Sigil 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 ( DisguiseGump.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 ( TransformationSpell.UnderTransformation( m_Thief ) )
                        {
                            m_Thief.SendLocalizedMessage( 1061622 ); // You cannot steal the sigil while in that form.
                        }
                        else if ( Spells.Ninjitsu.AnimalForm.UnderTransformation( m_Thief ) )
                        {
                            m_Thief.SendLocalizedMessage( 1063222 ); // You cannot steal the sigil while mimicking an animal.
                        }
                        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, 80.0, 80.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.Now; // begin grace period

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

                                if ( sig.LastMonolith != null )
                                    sig.LastMonolith.Sigil = null;

                                sig.LastStolen = DateTime.Now;

                                sig.OnStolen( m_Thief );

                                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 ( 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 ) && !( root is FillableContainer ) ) )
                {
                    m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
                }
                else if ( si == null && toSteal is Container )
                {
                    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.
                }
                else if ( si != null && m_Thief.Skills[SkillName.Stealing].Value < 100.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 equiped.
                }
                else if ( root == 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 ) )
                {
                }
                else if ( root is Corpse )
                {
                    m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
                }
                else if ( root is BaseCreature && ( (BaseCreature) root ).ControlMaster == null && ( (BaseCreature) root ).StolenFrom )
                {
                    m_Thief.SendLocalizedMessage( 1094948 ); // That creature has already been stolen from. There is nothing left to steal.
                }
                else if ( root is BaseCreature && SpecialDropChance( m_Thief, (BaseCreature) root ) > Utility.RandomDouble() )
                {
                    try
                    {
                        stolen = (Item) Activator.CreateInstance( m_SpecialDrops[Utility.Random( m_SpecialDrops.Length )] );
                    }
                    catch
                    {
                    }

                    if ( stolen != null )
                    {
                        m_Thief.SendLocalizedMessage( 1094947 ); // You successfully steal a special item from the creature!
                        ( (BaseCreature) root ).StolenFrom = true;
                    }
                }
                else
                {
                    double w = toSteal.Weight + toSteal.TotalWeight;

                    if ( w > 10 )
                    {
                        m_Thief.SendMessage( "That is too heavy to steal." );
                    }
                    else
                    {
                        if ( toSteal.Stackable && toSteal.Amount > 1 )
                        {
                            int maxAmount = (int) ( ( m_Thief.Skills[SkillName.Stealing].Value / 10.0 ) / toSteal.Weight );

                            Utility.FixMinMax( ref maxAmount, 1, toSteal.Amount );

                            int amount = Utility.RandomMinMax( 1, maxAmount );

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

                                if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5 ) )
                                {
                                    if ( !m_Thief.Backpack.CheckHold( m_Thief, toSteal, false, true ) )
                                        m_Thief.SendLocalizedMessage( 1048147 ); // Your backpack can't hold anything else.
                                    else
                                        stolen = toSteal;
                                }
                            }
                            else
                            {
                                int 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 );

                                    if ( stolen == null )
                                        stolen = toSteal;

                                    if ( !m_Thief.Backpack.CheckHold( m_Thief, stolen, false, true ) )
                                    {
                                        stolen.Delete();
                                        stolen = null;
                                        m_Thief.SendLocalizedMessage( 1048147 ); // Your backpack can't hold anything else.
                                    }
                                }
                            }
                        }
                        else
                        {
                            int iw = (int) Math.Ceiling( w );
                            iw *= 10;

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

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

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

                            if ( root is BaseCreature )
                                ( (BaseCreature) root ).StolenFrom = true;
                        }
                        else
                        {
                            m_Thief.SendLocalizedMessage( 502723 ); // You fail to steal the item.
                        }

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

                return stolen;
            }
Пример #7
0
			private Item TryStealItem( Item toSteal, ref bool caught )
			{
				//Zen make bankbox close when stealing!
				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;

				if ( !IsEmptyHanded( m_Thief ) )
				{
					m_Thief.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal.
				}
				// stealing off a corpse is looting
				else if (root is Corpse && CheckStealing(root as Corpse) == false)
				{
					m_Thief.SendMessage("You can't steal that!"); // You can't steal that!
				}
				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 ( toSteal.Parent == null || !toSteal.Movable || toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed( root ) )
				{
					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.
				}
				else if ( toSteal.Parent is Mobile )
				{
					m_Thief.SendLocalizedMessage( 1005585 ); // You cannot steal items which are equiped.
				}
				else if ( root == 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.SendMessage("You can't steal from them.");
				}
				else
				{
					double w = toSteal.Weight + toSteal.TotalWeight;

					if ( w > 10 )
					{
						m_Thief.SendMessage( "That is too heavy to steal." );
					}
					else
					{
						if ( toSteal.Stackable && toSteal.Amount > 1 )
						{
							int minAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 25.0) / toSteal.Weight);
							int maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight);

							if ( minAmount < 1 )
								minAmount = 1;

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

							int amount = Utility.RandomMinMax( minAmount, maxAmount );

							if ( amount >= toSteal.Amount )
							{
								int 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
							{
								int pileWeight = (int)Math.Ceiling( toSteal.Weight * amount );
								pileWeight *= 10;

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

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

						if ( stolen != null )
							m_Thief.SendLocalizedMessage( 502724 ); // You succesfully steal the item.
							if (m_Thief.Player == true)
							{
								((PlayerMobile)m_Thief).LastStoleAt = DateTime.Now;
							}
						if ( stolen == null ) //change from else to if - Pigpen						
							m_Thief.SendLocalizedMessage( 502723 ); // You fail to steal the item.
						
						caught = ( m_Thief.Skills[SkillName.Stealing].Value < Utility.Random( 150 ) );
					}
				}

				// wea: reset next skill time
				m_Thief.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds(10.0);
                
				// adam: reset the LootType.Special to LootType.Regular 
				if (stolen != null && stolen.LootType == LootType.Special)
					stolen.LootType = LootType.Regular;

				return stolen;
			}