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 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. } else if (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 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; } } 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.Competences[CompType.Escamotage].roll(10); } } return(stolen); }
public static void NubiaContainer_Snoop(Container cont, Mobile f) { NubiaMobile from = f as NubiaMobile; if (from.AccessLevel > AccessLevel.Player || from.InRange(cont.GetWorldLocation(), 1)) { NubiaMobile root = cont.RootParent as NubiaMobile; if (root != null && !root.Alive) { return; } if (root != null && root.AccessLevel > AccessLevel.Player && from.AccessLevel == AccessLevel.Player) { from.SendLocalizedMessage(500209); // You can not peek into the container. return; } if (root != null && from.AccessLevel == AccessLevel.Player && !NubiaCheckSnoopAllowed(from, root)) { from.SendLocalizedMessage(1001018); // You cannot perform negative acts on your target. return; } bool canSnoop = false; Map map = from.Map; IPooledEnumerable eable = null; if (map != null) { eable = map.GetClientsInRange(from.Location, 8); } if (root != null && from.AccessLevel == AccessLevel.Player) { if (eable != null) { string message = String.Format("Vous remarquez {0} fouiller dans le sac de {1}.", from.Name, root.Name); foreach (NetState ns in eable) { if (ns.Mobile != from) { //Detection NubiaPlayer obs = ns.Mobile as NubiaPlayer; if (obs.Competences[CompType.Detection].intRoll(true) > from.Competences[CompType.Discretion].intRoll(true) + from.GetDistanceToSqrt(obs)) { obs.SendMessage(message); from.PrivateOverheadMessage(MessageType.Emote, 0, false, "*fouille dans le sac de " + root.Name + "*", ns); } } } if (from.Competences[CompType.Escamotage].roll(10 + root.getBonusReflexe())) { canSnoop = true; } } } if (eable != null) { eable.Free(); } if (from.AccessLevel > AccessLevel.Player || canSnoop) { /* if (cont is TrapableContainer && ((TrapableContainer)cont).ExecuteTrap(from) ) * return;*/ cont.DisplayTo(from); } else { from.SendLocalizedMessage(500210); // You failed to peek into the container. } } else { from.SendLocalizedMessage(500446); // That is too far away. } }