Esempio n. 1
0
        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);
        }