private static void GenerateHonestyItems() { var lstCopy = new List <Item>(_HonestyItems); foreach (Item i in lstCopy) { if (ItemFlags.GetTaken(i) && _HonestyItems.Contains(i)) { _HonestyItems.Remove(i); } } if (_HonestyItems.Count < 1000) { int spawnamount = _HonestyItems.Count + 50 > 1000 ? _HonestyItems.Count % 50 : 50; for (int i = 0; i < spawnamount; i++) { Item toSpawn = Loot.RandomArmorOrShieldOrWeapon(); ItemFlags.SetTaken(toSpawn, false); toSpawn.HonestyItem = true; PlaceItemOnWorld(toSpawn); _HonestyItems.Add(toSpawn); } } }
public override bool TryDropItem(Mobile from, Item dropped, bool sendFullMessage) { if (from == mOwner.Owner) { if (!CheckHold(from, dropped, sendFullMessage, true, 0, 0)) { return(false); } DropItem(dropped); ItemFlags.SetTaken(dropped, true); return(true); } return(base.TryDropItem(from, dropped, sendFullMessage)); }
public override bool OnDragDropInto(Mobile from, Item item, Point3D p) { if (mOwner.Owner == from) { if (!this.CheckHold(from, item, true, true)) { return(false); } item.Location = new Point3D(p.X, p.Y, 0); this.AddItem(item); from.SendSound(this.GetDroppedSound(item), this.GetWorldLocation()); ItemFlags.SetTaken(item, true); return(true); } else { from.SendMessage("Only the Steward's owner may add items to their backpack."); } return(base.OnDragDropInto(from, item, p)); }
private static void GenerateHonestyItems() { bool initial = _Items.Count == 0; long ticks = Core.TickCount; if (initial) { Utility.PushColor(ConsoleColor.Yellow); Console.Write("Honesty Items generating:"); Utility.PopColor(); } try { var count = MaxGeneration - _Items.Count; var spawned = new Item[count]; for (var i = 0; i < spawned.Length; i++) { var item = spawned[i] = Loot.RandomArmorOrShieldOrWeapon(); if (item == null || item.Deleted) { --i; continue; } item.HonestyItem = true; lock (_ItemsLock) { if (!_Items.Contains(item)) { _Items.Add(item); } } } var locs = new Dictionary <Map, Point3D?[]>(); if (TrammelGeneration) { locs[Map.Trammel] = new Point3D?[spawned.Length]; } locs[Map.Felucca] = new Point3D?[spawned.Length]; Parallel.For( 0, spawned.Length, i => { var map = TrammelGeneration && Utility.RandomBool() ? Map.Trammel : Map.Felucca; locs[map][i] = GetValidLocation(map); }); foreach (var kv in locs) { var map = kv.Key; var points = kv.Value; for (var i = 0; i < spawned.Length; i++) { var loc = points[i]; if (loc == null || loc == Point3D.Zero) { continue; } var item = spawned[i]; if (item == null || item.Deleted) { continue; } ItemFlags.SetTaken(item, false); item.MoveToWorld(loc.Value, map); spawned[i] = null; } } foreach (var item in spawned.Where(item => item != null && !item.Deleted)) { item.Delete(); } } catch (Exception e) { Utility.PushColor(ConsoleColor.Red); Console.WriteLine(" Failed!"); Console.WriteLine(e); Utility.PopColor(); } if (initial) { Utility.PushColor(ConsoleColor.Green); Console.WriteLine(" Done, took {0} milliseconds!", Core.TickCount - ticks); Utility.PopColor(); } }
private static void GenerateHonestyItems() { CheckChests(); Utility.PushColor(ConsoleColor.Yellow); Console.WriteLine("[Honesty]: Generating..."); Utility.PopColor(); var sw = new Stopwatch(); var s = 0.0; if (UseSpawnArea) { if (_FeluccaArea == null) { Utility.PushColor(ConsoleColor.Yellow); Console.Write("[Honesty]: Felucca - Reticulating splines..."); Utility.PopColor(); sw.Restart(); _FeluccaArea = SpawnArea.Instantiate(Map.Felucca.DefaultRegion, _Filter, ValidateSpawnPoint, true); sw.Stop(); s += sw.Elapsed.TotalSeconds; Utility.PushColor(ConsoleColor.Green); Console.WriteLine("done ({0:F2} seconds)", sw.Elapsed.TotalSeconds); Utility.PopColor(); } if (_TrammelArea == null && TrammelGeneration) { Utility.PushColor(ConsoleColor.Yellow); Console.Write("[Honesty]: Trammel - Reticulating splines..."); Utility.PopColor(); sw.Restart(); _TrammelArea = SpawnArea.Instantiate(Map.Trammel.DefaultRegion, _Filter, ValidateSpawnPoint, true); sw.Stop(); s += sw.Elapsed.TotalSeconds; Utility.PushColor(ConsoleColor.Green); Console.WriteLine("done ({0:F2} seconds)", sw.Elapsed.TotalSeconds); Utility.PopColor(); } } try { Map facet; Point3D loc; Item item; var count = MaxGeneration - _Items.Count; if (count > 0) { Utility.PushColor(ConsoleColor.Yellow); Console.Write("[Honesty]: Creating {0:#,0} lost items...", count); Utility.PopColor(); sw.Restart(); var spawned = new Item[count]; for (var i = 0; i < spawned.Length; i++) { try { item = Loot.RandomArmorOrShieldOrWeapon(); if (item != null && !item.Deleted) { spawned[i] = item; } } catch { } } for (var i = 0; i < spawned.Length; i++) { item = spawned[i]; if (item == null) { continue; } try { if (UseSpawnArea) { var area = _TrammelArea != null && Utility.RandomBool() ? _TrammelArea : _FeluccaArea; facet = area.Facet; loc = area.GetRandom(); } else { facet = TrammelGeneration && Utility.RandomBool() ? Map.Trammel : Map.Felucca; loc = GetRandom(facet); } if (loc == Point3D.Zero) { continue; } RunicReforging.GenerateRandomItem(item, 0, 100, 1000); item.AttachSocket(new HonestyItemSocket()); item.HonestyItem = true; _Items.Add(item); ItemFlags.SetTaken(item, false); item.OnBeforeSpawn(loc, facet); item.MoveToWorld(loc, facet); item.OnAfterSpawn(); } catch { item.Delete(); } finally { spawned[i] = null; } } sw.Stop(); s += sw.Elapsed.TotalSeconds; Utility.PushColor(ConsoleColor.Green); Console.WriteLine("done ({0:F2} seconds)", sw.Elapsed.TotalSeconds); Utility.PopColor(); } } catch (Exception e) { Utility.PushColor(ConsoleColor.Red); Console.WriteLine(e); Utility.PopColor(); } Utility.PushColor(ConsoleColor.Yellow); Console.Write("[Honesty]:"); Utility.PopColor(); Utility.PushColor(ConsoleColor.Green); Console.WriteLine(" Generation completed in {0:F2} seconds.", s); Utility.PopColor(); }
private static Item TryStealItem(Item toSteal, double skill) { Item stolen = null; double w = toSteal.Weight + toSteal.TotalWeight; if (w <= 10) { if (toSteal.Stackable && toSteal.Amount > 1) { int maxAmount = (int)((skill / 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; double chance = (skill - (pileWeight - 22.5)) / ((pileWeight + 27.5) - (pileWeight - 22.5)); if (chance >= Utility.RandomDouble()) { stolen = toSteal; } } else { int pileWeight = (int)Math.Ceiling(toSteal.Weight * amount); pileWeight *= 10; double chance = (skill - (pileWeight - 22.5)) / ((pileWeight + 27.5) - (pileWeight - 22.5)); if (chance >= Utility.RandomDouble()) { stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount); if (stolen == null) { stolen = toSteal; } } } } else { int iw = (int)Math.Ceiling(w); iw *= 10; double chance = (skill - (iw - 22.5)) / ((iw + 27.5) - (iw - 22.5)); if (chance >= Utility.RandomDouble()) { stolen = toSteal; } } if (stolen != null) { ItemFlags.SetTaken(stolen, true); ItemFlags.SetStealable(stolen, false); stolen.Movable = true; } } 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 = toSteal is AddonComponent?StealableArtifactsSpawner.GetStealableInstance(((AddonComponent)toSteal).Addon) : 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 && !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 (DisguiseTimers.IsDisguised(m_Thief)) { m_Thief.SendLocalizedMessage(1010583); // You cannot steal the sigil while disguised } else if (!m_Thief.CanBeginAction(typeof(PolymorphSpell))) { m_Thief.SendLocalizedMessage(1010582); // You cannot steal the sigil while polymorphed } else if (TransformationSpellHelper.UnderTransformation(m_Thief)) { m_Thief.SendLocalizedMessage(1061622); // You cannot steal the sigil while in that form. } else if (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.UtcNow; // begin grace period } m_Thief.SendLocalizedMessage(1010586); // YOU STOLE THE SIGIL!!! (woah, calm down now) if (sig.LastMonolith != null && sig.LastMonolith.Sigil != null) { sig.LastMonolith.Sigil = null; sig.LastStolen = DateTime.UtcNow; } 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 #region VvV Sigils else if (toSteal is VvVSigil && ViceVsVirtueSystem.Instance != null) { VvVPlayerEntry entry = ViceVsVirtueSystem.Instance.GetPlayerEntry <VvVPlayerEntry>(m_Thief); VvVSigil sig = (VvVSigil)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 (entry != null) { if (!m_Thief.CanBeginAction(typeof(IncognitoSpell))) { m_Thief.SendLocalizedMessage(1010581); // You cannot steal the sigil when you are incognito } else if (DisguiseTimers.IsDisguised(m_Thief)) { m_Thief.SendLocalizedMessage(1010583); // You cannot steal the sigil while disguised } else if (!m_Thief.CanBeginAction(typeof(PolymorphSpell))) { m_Thief.SendLocalizedMessage(1010582); // You cannot steal the sigil while polymorphed } else if (TransformationSpellHelper.UnderTransformation(m_Thief)) { m_Thief.SendLocalizedMessage(1061622); // You cannot steal the sigil while in that form. } else if (AnimalForm.UnderTransformation(m_Thief)) { m_Thief.SendLocalizedMessage(1063222); // You cannot steal the sigil while mimicking an animal. } else if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, 100.0, 120.0)) { 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 { m_Thief.SendLocalizedMessage(1010586); // YOU STOLE THE SIGIL!!! (woah, calm down now) sig.OnStolen(entry); return(sig); } } else { m_Thief.SendLocalizedMessage(1005594); // You do not have enough skill to steal the sigil } } else { m_Thief.SendLocalizedMessage(1155415); // Only participants in Vice vs Virtue may use this item. } } #endregion else if (si == null && (toSteal.Parent == null || !toSteal.Movable) && !ItemFlags.GetStealable(toSteal)) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if ((toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root)) && !ItemFlags.GetStealable(toSteal)) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } 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).IsStaff()) { 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 / 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; } } // Non-movable stealable (not in fillable container) items cannot result in the stealer getting caught if (stolen != null && (root is FillableContainer || stolen.Movable)) { double skillValue = m_Thief.Skills[SkillName.Stealing].Value; if (root is FillableContainer) { caught = (Utility.Random((int)(skillValue / 2.5)) == 0); // 1 of 48 chance at 120 } else { caught = (skillValue < Utility.Random(150)); } } else { caught = false; } if (stolen != null) { m_Thief.SendLocalizedMessage(502724); // You succesfully steal the item. ItemFlags.SetTaken(stolen, true); ItemFlags.SetStealable(stolen, false); stolen.Movable = true; InvokeItemStoken(new ItemStolenEventArgs(stolen, m_Thief)); if (si != null) { toSteal.Movable = true; si.Item = null; } } 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).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 static void GenerateHonestyItems() { try { var count = MaxGeneration - _Items.Count; var spawned = new Item[count]; for (var i = 0; i < spawned.Length; i++) { var item = spawned[i] = Loot.RandomArmorOrShieldOrWeapon(); if (item == null || item.Deleted) { --i; continue; } item.HonestyItem = true; lock (_ItemsLock) { if (!_Items.Contains(item)) { _Items.Add(item); } } } var locs = new Dictionary <Map, Point3D?[]>(); if (TrammelGeneration) { locs[Map.Trammel] = new Point3D?[spawned.Length]; } locs[Map.Felucca] = new Point3D?[spawned.Length]; Parallel.For( 0, spawned.Length, i => { var map = TrammelGeneration && Utility.RandomBool() ? Map.Trammel : Map.Felucca; locs[map][i] = GetValidLocation(map); }); foreach (var kv in locs) { var map = kv.Key; var points = kv.Value; for (var i = 0; i < spawned.Length; i++) { var loc = points[i]; if (loc == null || loc == Point3D.Zero) { continue; } var item = spawned[i]; if (item == null || item.Deleted) { continue; } item.HonestyRegion = _Regions[Utility.Random(_Regions.Length)]; if (!String.IsNullOrWhiteSpace(item.HonestyRegion)) { var attempts = BaseVendor.AllVendors.Count / 10; BaseVendor m; do { m = BaseVendor.AllVendors[Utility.Random(BaseVendor.AllVendors.Count)]; }while ((m == null || m.Map != map || !m.Region.IsPartOf(item.HonestyRegion)) && --attempts >= 0); item.HonestyOwner = m; } ItemFlags.SetTaken(item, false); item.MoveToWorld(loc.Value, map); spawned[i] = null; } } foreach (var item in spawned.Where(item => item != null && !item.Deleted)) { item.Delete(); } } catch (Exception e) { Utility.PushColor(ConsoleColor.Red); Console.WriteLine(e); Utility.PopColor(); } }
protected override void OnTick() { Item stolen = null; object root = toSteal.RootParent; if (!TryStealItem(toSteal, root, m_Thief)) { if (m_Thief is PlayerMobile) { ((PlayerMobile)m_Thief).EndPlayerAction(); } return; } if (toSteal.Stackable && toSteal.Amount > 1) { int maxAmount; if (toSteal.Weight == 0) { maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / 0.1); } else { 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); int pileWeight = (int)Math.Ceiling(toSteal.Weight * amount); pileWeight *= 10; if (pileWeight == 0) { pileWeight = 1; } double minSkill = -(m_Thief.Skills[SkillName.Stealing].Value / 2) + 50; double maxSkill = 100 + (pileWeight * 3); if (amount >= toSteal.Amount) { if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, minSkill, maxSkill)) { stolen = toSteal; } } else { if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, minSkill, maxSkill)) { stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount); if (stolen == null) { stolen = toSteal; } } } } else { double w = toSteal.Weight + toSteal.TotalWeight; int iw = (int)Math.Ceiling(w); iw *= 10; double minSkill = -(m_Thief.Skills[SkillName.Stealing].Value / 2) + 50; double maxSkill = 100 + (iw * 3); if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, minSkill, maxSkill)) { stolen = toSteal; } } bool caught; if (root is Mobile) { Mobile mobRoot = (Mobile)root; caught = ((m_Thief.Skills[SkillName.Stealing].Value + (m_Thief.Dex - mobRoot.Dex) / 3.0) < Utility.Random(150)); } else { caught = ((m_Thief.Skills[SkillName.Stealing].Value + (m_Thief.Dex - 100) / 3.0) < Utility.Random(150)); } if (stolen != null) { // 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; m_Thief.AddToBackpack(stolen); StolenItem.Add(stolen, m_Thief, root as Mobile); m_Thief.SendLocalizedMessage(502724); // You succesfully steal the item. } else { m_Thief.SendLocalizedMessage(502723); // You fail to steal the item. } if (caught) { if (root == null) { m_Thief.CriminalAction(true); } else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief)) { m_Thief.CriminalAction(true); } else if (root is Mobile) { Mobile mobRoot = (Mobile)root; if (!IsInGuild(mobRoot) && IsInnocentTo(m_Thief, mobRoot)) { m_Thief.CriminalAction(true); } string message = String.Format("You notice {0} trying to steal from {1}.", m_Thief.Name, mobRoot.Name); foreach (NetState ns in m_Thief.GetClientsInRange(8)) { if (ns.Mobile == mobRoot) { ns.Mobile.SendAsciiMessage("You notice {0} trying to steal from you.", m_Thief.Name); } else if (ns.Mobile != m_Thief) { ns.Mobile.SendMessage(message); } } } } /* * else if (root is Corpse && ((Corpse)root).IsCriminalAction(m_Thief)) * { * m_Thief.CriminalAction(true); * }*/ if (root is Mobile && ((Mobile)root).Player && m_Thief is PlayerMobile && IsInnocentTo(m_Thief, (Mobile)root) && !IsInGuild((Mobile)root)) { PlayerMobile pm = (PlayerMobile)m_Thief; pm.PermaFlags.Add((Mobile)root); pm.Delta(MobileDelta.Noto); } if (m_Thief is PlayerMobile) { ((PlayerMobile)m_Thief).EndPlayerAction(); } }
private Item TryStealItem(Item toSteal, ref bool caught) { //Close bank box on steal attempt -Adam BankBox box = m_Thief.FindBankNoCreate(); if (box != null && box.Opened) { box.Close(); m_Thief.Send(new MobileUpdate(m_Thief)); } Item stolen = null; object root = toSteal.RootParent; var contParent = toSteal.Parent as Container; StealableArtifactsSpawner.StealableInstance si = null; if (toSteal.Parent == null || !toSteal.Movable) { si = StealableArtifactsSpawner.GetStealableInstance(toSteal); } BaseAddon addon = null; if (toSteal is AddonComponent) { addon = ((AddonComponent)toSteal).Addon; } bool stealflag = (addon != null && addon.GetSavedFlag(ItemFlags.StealableFlag)) || toSteal.GetSavedFlag(ItemFlags.StealableFlag); if (!IsEmptyHanded(m_Thief)) { m_Thief.SendLocalizedMessage(1005584); // Both hands must be free to steal. } else if (root is Mobile && ((Mobile)root).Player && IsInnocentTo(m_Thief, (Mobile)root) && !IsInGuild(m_Thief)) { m_Thief.SendLocalizedMessage(1005596); // You must be in the thieves guild to steal from other players. } else if (SuspendOnMurder && root is Mobile && ((Mobile)root).Player && IsInGuild(m_Thief) && m_Thief.Kills > 0) { m_Thief.SendLocalizedMessage(502706); // You are currently suspended from the thieves guild. } else if (root is BaseVendor && ((BaseVendor)root).IsInvulnerable) { m_Thief.SendLocalizedMessage(1005598); // You can't steal from shopkeepers. } else if (root is PlayerVendor) { m_Thief.SendLocalizedMessage(502709); // You can't steal from vendors. } else if (!m_Thief.CanSee(toSteal)) { m_Thief.SendLocalizedMessage(500237); // Target can not be seen. } else if (m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold(m_Thief, toSteal, false, true)) { m_Thief.SendLocalizedMessage(1048147); // Your backpack can't hold anything else. } #region Sigils else if (toSteal is Sigil) { PlayerState pl = PlayerState.Find(m_Thief); Faction faction = (pl == null ? null : pl.Faction); var sig = (Sigil)toSteal; if (!m_Thief.InRange(toSteal.GetWorldLocation(), 1)) { m_Thief.SendLocalizedMessage(502703); // You must be standing next to an item to steal it. } else if (root != null) // not on the ground { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (faction != null) { if (!m_Thief.CanBeginAction(typeof(IncognitoSpell))) { m_Thief.SendLocalizedMessage(1010581); // You cannot steal the sigil when you are incognito } else if (DisguiseTimers.IsDisguised(m_Thief)) { m_Thief.SendLocalizedMessage(1010583); // You cannot steal the sigil while disguised } else if (!m_Thief.CanBeginAction(typeof(PolymorphSpell))) { m_Thief.SendLocalizedMessage(1010582); // You cannot steal the sigil while polymorphed } else if (TransformationSpellHelper.UnderTransformation(m_Thief)) { m_Thief.SendLocalizedMessage(1061622); // You cannot steal the sigil while in that form. } else if (m_Thief is PlayerMobile && ((PlayerMobile)m_Thief).SavagePaintExpiration > TimeSpan.Zero) { m_Thief.SendLocalizedMessage(1114352); // You cannot steal the sigil while disguised in savage paint. } else if (pl.IsLeaving) { m_Thief.SendLocalizedMessage(1005589); // You are currently quitting a faction and cannot steal the town sigil } else if (sig.IsBeingCorrupted && sig.LastMonolith.Faction == faction) { m_Thief.SendLocalizedMessage(1005590); // You cannot steal your own sigil } else if (sig.IsPurifying) { m_Thief.SendLocalizedMessage(1005592); // You cannot steal this sigil until it has been purified } else if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, 0.0, 0.0)) { if (Sigil.ExistsOn(m_Thief)) { m_Thief.SendLocalizedMessage(1010258); // The sigil has gone back to its home location because you already have a sigil. } else if (m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold(m_Thief, sig, false, true)) { m_Thief.SendLocalizedMessage(1010259); // The sigil has gone home because your backpack is full } else { if (sig.IsBeingCorrupted) { sig.GraceStart = DateTime.UtcNow; // begin grace period } m_Thief.SendLocalizedMessage(1010586); // YOU STOLE THE SIGIL!!! (woah, calm down now) if (sig.LastMonolith != null && sig.LastMonolith.Sigil != null) { sig.LastMonolith.Sigil = null; sig.LastStolen = DateTime.UtcNow; } switch (PvPController._SigilAnnounceStolen) { case PvPController.SigilStolenAnnouncing.All: { foreach (Faction factionToBCast in Faction.Factions) { List <PlayerState> members = factionToBCast.Members; if (sig.Corrupted != null) { if (sig.Corrupted == factionToBCast) { foreach (PlayerState member in members) { member.Mobile.SendMessage( factionToBCast.Definition.HueBroadcast, "The {0} have stolen the {1} sigil from your faction stronghold!", faction.Definition.FriendlyName, sig.Town.Definition.FriendlyName); } } else { foreach (PlayerState member in members) { member.Mobile.SendMessage( factionToBCast.Definition.HueBroadcast, "The {0} have stolen the {1} sigil from the {2} stronghold!", faction.Definition.FriendlyName, sig.Town.Definition.FriendlyName, sig.Corrupted.Definition.FriendlyName); } } } else { foreach (PlayerState member in members) { member.Mobile.SendMessage( factionToBCast.Definition.HueBroadcast, "The {0} have stolen the {1} sigil!", faction.Definition.FriendlyName, sig.Town.Definition.FriendlyName); } } } } break; case PvPController.SigilStolenAnnouncing.Owner: { if (sig.Corrupted != null) { List <PlayerState> members = sig.Corrupted.Members; foreach (PlayerState member in members) { member.Mobile.SendMessage( sig.Corrupted.Definition.HueBroadcast, "The {0} have stolen the {1} sigil from your faction stronghold!", faction.Definition.FriendlyName, sig.Town.Definition.FriendlyName); } } } break; } return(sig); } } else { m_Thief.SendLocalizedMessage(1005594); // You do not have enough skill to steal the sigil } } else { m_Thief.SendLocalizedMessage(1005588); // You must join a faction to do that } } #endregion else if (!stealflag && si == null && (toSteal.Parent == null || !toSteal.Movable)) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if ((toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed(root)) && !(toSteal.RootParent is FillableContainer) && !stealflag) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (toSteal is Spellbook) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (toSteal.Nontransferable) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (m_Thief.EraAOS && si == null && toSteal is Container) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (toSteal is IEthicsItem && ((IEthicsItem)toSteal).EthicsItemState != null && !((IEthicsItem)toSteal).EthicsItemState.HasExpired) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (!m_Thief.InRange(toSteal.GetWorldLocation(), 1)) { m_Thief.SendLocalizedMessage(502703); // You must be standing next to an item to steal it. } // Alan: commented this out b/c there shouldn't be a required skill level to steal stealflag stuff //else if ( ( si != null && m_Thief.Skills[SkillName.Stealing].Value < 100.0 ) || ( stealflag ) && m_Thief.Skills[SkillName.Stealing].Value < 100.0 ) ) //&& m_Thief.Skills[SkillName.Stealing].Value < 90.0 ) ) // m_Thief.SendLocalizedMessage( 1060025, "", 0x66D ); // You're not skilled enough to attempt the theft of this item. else if (toSteal.Parent is Mobile) { m_Thief.SendLocalizedMessage(1005585); // You cannot steal items which are equipped. } else if (toSteal.GetSavedFlag(0x01)) //Not lootable item { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (root == m_Thief || (root is BaseCreature && ((BaseCreature)root).GetMaster() == m_Thief)) { m_Thief.SendLocalizedMessage(502704); // You catch yourself red-handed. } else if (root is Mobile && ((Mobile)root).AccessLevel > AccessLevel.Player) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (root is Mobile && !m_Thief.CanBeHarmful((Mobile)root)) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (root is Corpse) { m_Thief.SendLocalizedMessage(502710); // You can't steal that! } else if (m_Thief.Spell != null) { m_Thief.SendMessage("You are too busy concentrating on your spell to steal that item."); } else { double w = toSteal.Weight + toSteal.TotalWeight; if (addon != null) { w = addon.Weight = addon.TotalWeight; } if (w > 10 && !stealflag) { m_Thief.SendMessage("That is too heavy to steal."); } else { m_Thief.BeginAction(typeof(Hiding)); Timer.DelayCall(TimeSpan.FromSeconds(SpecialMovesController._StealingRehideDelay), ReleaseHideLock, m_Thief); if (toSteal.Stackable && toSteal.Amount > 1) { var maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight); var minAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 25.0) / toSteal.Weight); //added a min amount if (minAmount < 1) { minAmount = 1; } if (maxAmount < 1) { maxAmount = 1; } else if (maxAmount > toSteal.Amount) { maxAmount = toSteal.Amount; } int amount = Utility.RandomMinMax(minAmount, maxAmount); //(change from 1, maxamount) if (amount >= toSteal.Amount) { var pileWeight = (int)Math.Ceiling(toSteal.Weight * toSteal.Amount); pileWeight *= 10; if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5)) { stolen = toSteal; } } else { var pileWeight = (int)Math.Ceiling(toSteal.Weight * amount); pileWeight *= 10; if (m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5)) { stolen = Mobile.LiftItemDupe(toSteal, toSteal.Amount - amount) ?? toSteal; } } } else { var iw = (int)Math.Ceiling(w); iw *= 10; if (stealflag || m_Thief.CheckTargetSkill(SkillName.Stealing, toSteal, iw - 22.5, iw + 27.5)) { stolen = toSteal; } } if (stolen is PowerScroll) { var scroll = (PowerScroll)stolen; bool success = Utility.RandomBool(); if (success || Utility.RandomBool()) { BaseMount.Dismount(m_Thief); BaseMount.SetMountPrevention( m_Thief, BlockMountType.DismountRecovery, TimeSpan.FromSeconds(success ? 60.0 : 5.0)); } } if (stolen != null) { m_Thief.SendLocalizedMessage(502724); // You successfully steal the item. if (stolen is Head2) { ((Head2)stolen).Owner = m_Thief as PlayerMobile; } if (si != null) { toSteal.Movable = true; si.Item = null; } if (stealflag) { //toSteal.SetSavedFlag( 0x04, false ); // ARTEGORDONMOD // set the taken flag to trigger release from any controlling spawner ItemFlags.SetTaken(stolen, true); // clear the stealable flag so that the item can only be stolen once if it is later locked down. ItemFlags.SetStealable(stolen, false); if (addon != null) //deed it up! { Item deed = addon.Deed; addon.Delete(); stolen = deed; } else // release it if it was locked down { toSteal.Movable = true; } if (toSteal.Spawner != null) //its not spawned anymore, its STOLEN! { toSteal.Spawner.Remove(toSteal); toSteal.Spawner = null; } } Conquests.CheckProgress <StealingConquest>(m_Thief as PlayerMobile, toSteal); } else { m_Thief.SendLocalizedMessage(502723); // You fail to steal the item. } caught = !stealflag && (m_Thief.Skills[SkillName.Stealing].Value < Utility.Random(150)); } } return(stolen); }