private static void CommandArgsAutoCompletion(On.RoR2.Console.AutoComplete.orig_ctor orig, RoR2.Console.AutoComplete self, RoR2.Console console) { orig(self, console); var searchableStrings = self.GetFieldValue <List <string> >("searchableStrings"); var tmp = new List <string>(); tmp.AddRange(ArgsAutoCompletion.CommandsWithStaticArgs); tmp.AddRange(ArgsAutoCompletion.CommandsWithDynamicArgs()); tmp.Sort(); searchableStrings.AddRange(tmp); self.SetFieldValue("searchableStrings", searchableStrings); }
private static bool BetterAutoCompletion(On.RoR2.Console.AutoComplete.orig_SetSearchString orig, RoR2.Console.AutoComplete self, string newSearchString) { var searchString = self.GetFieldValue <string>("searchString"); var searchableStrings = self.GetFieldValue <List <string> >("searchableStrings"); newSearchString = newSearchString.ToLower(CultureInfo.InvariantCulture); if (newSearchString == searchString) { return(false); } self.SetFieldValue("searchString", newSearchString); self.resultsList = new List <string>(); foreach (var searchableString in searchableStrings) { if (searchableString.ToLower(CultureInfo.InvariantCulture).Contains(newSearchString)) // StartWith case { self.resultsList.Add(searchableString); } else // similar string in the middle of the user command arg { string searchableStringsInvariant = searchableString.ToLower(CultureInfo.InvariantCulture); string userArg = newSearchString.Substring(newSearchString.IndexOf(' ') + 1); if (newSearchString.IndexOf(' ') > 0 && searchableString.IndexOf(' ') > 0) { string userCmd = newSearchString.Substring(0, newSearchString.IndexOf(' ')); string searchableStringsCmd = searchableString.Substring(0, searchableString.IndexOf(' ')); string searchableStringsArg = searchableStringsInvariant.Substring(searchableStringsInvariant.IndexOf(' ') + 1); if (searchableStringsArg.Contains(userArg) && userCmd.Equals(searchableStringsCmd)) { self.resultsList.Add(searchableString); } } } } return(true); }