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