public void GetCommand()
        {
            var input = VInput.GetArgs();

            if (input.Length == 0)
            {
                return;                    //Don't process 0 args
            }
            var commandName = input[0];
            var args        = ArraysUtility.SubArray(input, 1);
            //FIND ALIASES
            var command = CurrentCommands.FirstOrDefault(command => command.Aliases.Any(alias => alias == commandName.ToLower()));

            if (command != null)
            {
                Attempt(command, args);
                return;
            }
            //FIND NAME
            var commandList = StringsUtility.Match(commandName, CurrentCommands);

            if (commandList.Count == 0)
            {
                new GameError($"No commands starting with \"{commandName}\" found!").Write();
            }
            else if (commandList.Count > 1)
            {
                VConsole.WriteLine($"Commands starting with \"{commandName}\":");
                new TextList <Command>(commandList).Write();
            }
            else
            {
                Attempt(commandList[0], args);
            }
        }
Exemple #2
0
        public override void ProcessArgs(string[] args)
        {
            Tag tag        = null;
            var tagsUsed   = new List <Tag>();
            var startIndex = 0;

            for (int i = 0; i < args.Length; i++)
            {
                if (Tags.Where(tag => !tagsUsed.Contains(tag)).Any(tag => tag.Name == args[i]))
                {
                    if (tag == null)
                    {
                        base.ProcessArgs(ArraysUtility.SubArray(args, startIndex, i - startIndex));
                    }
                    else
                    {
                        tag.ProcessArgs(ArraysUtility.SubArray(args, startIndex, i - startIndex));
                        tagsUsed.Add(tag);
                    }

                    tag        = Tags.FirstOrDefault(tag => tag.Name == args[i]);
                    startIndex = i + 1;
                }
            }

            if (tag == null)
            {
                base.ProcessArgs(ArraysUtility.SubArray(args, startIndex, args.Length - startIndex));
            }
            else
            {
                tag.ProcessArgs(ArraysUtility.SubArray(args, startIndex, args.Length - startIndex));
                tagsUsed.Add(tag);
            }
        }
Exemple #3
0
        public virtual void ProcessArgs(string[] args)
        {
            if (args.Length < Arguments.Count)
            {
                throw new FormatException($"The {FunctionType} {Name} needs at least {Arguments.Count} arguments!");
            }

            if (Arguments.Any(arg => arg is UnlimitedStringArgument))
            {
                for (var i = args.Length - Arguments.Count; i > 0; i--)
                {
                    try
                    {
                        var arguments = new List <Argument>();
                        arguments.AddRange(Arguments);
                        arguments.AddRange(OptionalArguments.GetRange(0, i));
                        ProcessUnlimited(args, arguments);
                    }
                    catch (Exception e) { continue; }

                    return;
                }

                ProcessUnlimited(args, Arguments);
            }
            else if (OptionalArguments.Any(arg => arg is UnlimitedStringArgument))
            {
                var optArgs = new string[args.Length - Arguments.Count];
                for (var i = 0; i < args.Length; i++)
                {
                    if (i < Arguments.Count)
                    {
                        Arguments[i].ProcessArgs(new [] { args[i] });
                    }
                    else
                    {
                        optArgs[i - Arguments.Count] = args[i];
                    }
                }

                var list = ArraysUtility.SubArray(OptionalArguments.ToArray(), 0, optArgs.Length).ToList();

                //TRIES TO MAXIMIZE OPTIONAL ARGUMENTS ADDED

                for (var i = list.Count; i > 0; i--)
                {
                    try
                    {
                        ProcessUnlimited(optArgs, list);
                    }
                    catch (Exception e)
                    {
                        list.RemoveAt(list.Count - 1); //Remove Last Item
                        continue;
                    }

                    return;
                }
            }
            else
            {
                if (args.Length > Arguments.Count + OptionalArguments.Count)
                {
                    throw new FormatException($"The {FunctionType} {Name} can only take up to {Arguments.Count + OptionalArguments.Count} arguments!");
                }

                for (var i = 0; i < args.Length; i++)
                {
                    if (i < Arguments.Count)
                    {
                        Arguments[i].ProcessArgs(new [] { args[i] });
                    }
                    else
                    {
                        OptionalArguments[i - Arguments.Count].ProcessArgs(new [] { args[i] });
                    }
                }
            }
        }