public static ObjectInstance FindObject(CharacterInstance ch, string argument, bool carryonly) { var tuple = argument.FirstArgument(); var arg1 = tuple.Item1; tuple = tuple.Item2.FirstArgument(); var arg2 = tuple.Item1; var remainder = tuple.Item2; if (arg2.EqualsIgnoreCase("from") && !string.IsNullOrEmpty(remainder)) { tuple = remainder.FirstArgument(); arg2 = tuple.Item1; remainder = tuple.Item2; } ObjectInstance obj; if (string.IsNullOrEmpty(arg2)) { obj = carryonly ? ch.GetCarriedObject(arg1) : ch.GetObjectOnMeOrInRoom(arg1); if (CheckFunctions.CheckIfTrue(ch, obj == null && carryonly, "You do not have that item.")) { return(null); } if (obj == null) { comm.act(ATTypes.AT_PLAIN, "I see no $T here.", ch, null, arg1, ToTypes.Character); return(null); } return(obj); } ObjectInstance container = null; if (CheckFunctions.CheckIfTrue(ch, carryonly && (container = ch.GetCarriedObject(arg2)) == null && (container = ch.GetWornObject(arg2)) == null, "You do not have that item.")) { return(null); } if (!carryonly && (container = ch.GetObjectOnMeOrInRoom(arg2)) == null) { comm.act(ATTypes.AT_PLAIN, "I see no $T here.", ch, null, arg2, ToTypes.Character); return(null); } if (!container.ExtraFlags.IsSet((int)ItemExtraFlags.Covering) && container.Value.ToList()[1].IsSet(ContainerFlags.Closed)) { comm.act(ATTypes.AT_PLAIN, "The $d is closed.", ch, null, container.Name, ToTypes.Character); return(null); } obj = ch.GetObjectInList(container.Contents, arg1); if (obj == null) { comm.act(ATTypes.AT_PLAIN, container.ExtraFlags.IsSet((int)ItemExtraFlags.Covering) ? "I see nothing like that beneath $p." : "I see nothing like that in $p.", ch, container, null, ToTypes.Character); } return(obj); }