private static void LogNetworkCommands(On.RoR2.Console.orig_RunCmd orig, RoR2.Console self, NetworkUser sender, string concommandName, System.Collections.Generic.List <string> userArgs) { if (sender != null && sender.isLocalPlayer == false) { StringBuilder s = new StringBuilder(); userArgs.ForEach((str) => s.AppendLine(str)); Log.Message(string.Format(Lang.NETWORKING_OTHERPLAYER_4, sender.userName, sender.id.value, concommandName, s.ToString())); } orig(self, sender, concommandName, userArgs); ScrollConsoleDown(); }
private void CheckChatForJoinRequest(On.RoR2.Console.orig_RunCmd orig, RoR2.Console self, RoR2.Console.CmdSender sender, string concommandName, List <string> userArgs) { orig(self, sender, concommandName, userArgs); if (concommandName.Equals("say", StringComparison.InvariantCultureIgnoreCase)) { var userInput = userArgs.FirstOrDefault().Split(' '); var chatCommand = userInput.FirstOrDefault(); if (chatCommand.IsNullOrWhiteSpace()) { return; } if (chatCommand.Equals("join_as", StringComparison.InvariantCultureIgnoreCase) || chatCommand.Equals("join", StringComparison.InvariantCultureIgnoreCase)) { List <string> data = userInput.ToList(); string bodyString = userInput.ElementAtOrDefault(1) ?? ""; string userString = userInput.LastOrDefault() ?? ""; string newstring = ""; bool open = false; if (bodyString.Contains('"') && userString.Contains('"')) { bodyString = ""; for (int i = 1; i < data.Count; i++) { var str = data.ElementAt(i) ?? ""; if (str == userInput.ElementAtOrDefault(1)) { } foreach (var item in str) { if (item == '"') { open = open == false ? true : false; } else { newstring += item; } } bodyString += open == true ? newstring + " " : newstring; newstring = ""; } userString = ""; } else { bodyString = userInput.ElementAtOrDefault(1) ?? ""; userString = userInput.ElementAtOrDefault(2) ?? ""; } JoinAs(sender.networkUser, bodyString, userString); } } }
protected override void Hook() { // Higher priority to make sure this hook executed before the one from DebugToolkit if it exists // It'll make sure correct permissions are applied if needed. _hookConfig = new HookConfig { ManualApply = true, Priority = 2 }; _runCmdHook = new Hook(typeof(Console).GetMethod("RunCmd", BindingFlags.Instance | BindingFlags.NonPublic), typeof(ChatCommands).GetMethod(nameof(Console_RunCmd), BindingFlags.Instance | BindingFlags.NonPublic), this, _hookConfig); _origRunCmd = _runCmdHook.GenerateTrampoline <On.RoR2.Console.orig_RunCmd>(); _runCmdHook.Apply(); }
private void Console_RunCmd(On.RoR2.Console.orig_RunCmd _, Console self, Console.CmdSender sender, string concommandName, System.Collections.Generic.List <string> userArgs) { if (concommandName == "say" && userArgs != null && userArgs.Count >= 1 && userArgs[0].StartsWith("/")) { var oldArgs = userArgs[0].Split(' '); concommandName = oldArgs[0].Substring(1); if (oldArgs.Length > 1) { userArgs[0] = string.Join(" ", oldArgs, 1, oldArgs.Length - 1); } else { userArgs[0] = ""; } } _origRunCmd(self, sender, concommandName, userArgs); }
private void CheckforJoinAsRequest(On.RoR2.Console.orig_RunCmd orig, RoR2.Console self, RoR2.Console.CmdSender sender, string concommandName, List <string> userArgs) { orig(self, sender, concommandName, userArgs); if (concommandName.Equals("say", StringComparison.OrdinalIgnoreCase)) { var userMsg = ArgsHelper.GetValue(userArgs, 0).ToLower(); var isRequest = userMsg.StartsWith("join_as"); if (isRequest) { var argsRequest = userMsg.Split(' ').ToList(); string bodyString = ArgsHelper.GetValue(argsRequest, 1); string userString = ArgsHelper.GetValue(argsRequest, 2); JoinAs(sender.networkUser, bodyString, userString); } } }
private void CheckChatForJoinRequest(On.RoR2.Console.orig_RunCmd orig, RoR2.Console self, RoR2.Console.CmdSender sender, string concommandName, List <string> userArgs) { orig(self, sender, concommandName, userArgs); if (concommandName.Equals("say", StringComparison.InvariantCultureIgnoreCase)) { string[] userInput = userArgs.FirstOrDefault().Split(new char[] { ' ' }, count: 3); string chatCommand = userInput.FirstOrDefault(); if (string.IsNullOrWhiteSpace(chatCommand)) { return; } if (chatCommand.Equals("join_as", StringComparison.InvariantCultureIgnoreCase) || chatCommand.Equals("join", StringComparison.InvariantCultureIgnoreCase)) { string bodyString = userInput.ElementAtOrDefault(1) ?? ""; string userString = userInput.ElementAtOrDefault(2) ?? ""; JoinAs(sender.networkUser, bodyString, userString); } } }
private static void Console_RunCmd(On.RoR2.Console.orig_RunCmd orig, RoR2.Console self, RoR2.Console.CmdSender sender, string concommandName, List <string> userArgs) { orig(self, sender, concommandName, userArgs); if (!NetworkServer.active || Run.instance == null) { return; } if (!concommandName.Equals("say", StringComparison.InvariantCultureIgnoreCase)) { return; } string chatMessage = userArgs.FirstOrDefault(); if (string.IsNullOrWhiteSpace(chatMessage) || !chatMessage.StartsWith("/")) { return; } string[] splitMessage = chatMessage.Split(new char[] { ' ' }); string chatCommandName = splitMessage.FirstOrDefault().Substring(1); // substring removes leading slash string[] commandArgs = splitMessage.Skip(1).ToArray(); if (!_chatCommands.TryGetValue(chatCommandName.ToUpperInvariant(), out ChatCommand chatCommand)) { SendChatMessage("Unable to find command, try /help"); } string resultMessage = chatCommand.Handler(sender.networkUser, commandArgs); if (!string.IsNullOrWhiteSpace(resultMessage)) { SendChatMessage(resultMessage); } }