private static void CommandArgsAutoCompletion(On.RoR2.Console.AutoComplete.orig_ctor orig, Console.AutoComplete self, 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, 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; }