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); } }
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); } }
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] }); } } } }