public void ParseAndProcess(ISender sender, string line) { var ctx = new HookContext { Sender = sender, #if Full_API Player = sender as Player #endif }; #if Full_API ctx.Connection = ctx.Player != null ? ctx.Player.Connection.Socket : null; #endif var hargs = new HookArgs.Command(); try { CommandInfo info; var firstSpace = line.IndexOf(' '); if (firstSpace < 0) { firstSpace = line.Length; } var prefix = line.Substring(0, firstSpace); hargs.Prefix = prefix; if (FindStringCommand(prefix, out info)) { hargs.ArgumentString = (firstSpace < line.Length - 1 ? line.Substring(firstSpace + 1, line.Length - firstSpace - 1) : "").Trim(); HookPoints.Command.Invoke(ref ctx, ref hargs); if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE) { return; } if (ctx.Result != HookResult.CONTINUE && !CheckAccessLevel(info, sender)) { sender.SendMessage("Permissions error", 255, 238, 130, 238); return; } try { info.Run(sender, hargs.ArgumentString); } catch (NLua.Exceptions.LuaScriptException e) { if (e.IsNetException) { var ex = e.GetBaseException(); if (ex != null) { if (ex is CommandError) { sender.SendMessage(prefix + ": " + ex.Message); info.ShowHelp(sender); } } } } catch (ExitException e) { throw e; } catch (CommandError e) { sender.SendMessage(prefix + ": " + e.Message); info.ShowHelp(sender); } return; } var args = new ArgumentList(); var command = Tokenize(line, args); if (command != null) { if (FindTokenCommand(command, out info)) { hargs.Arguments = args; foreach (BasePlugin plg in PluginManager._plugins.Values) { if (plg.commands.ContainsKey(command)) { args.Plugin = plg; } } HookPoints.Command.Invoke(ref ctx, ref hargs); if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE) { return; } if (ctx.Result != HookResult.CONTINUE && !CheckAccessLevel(info, sender)) { sender.SendMessage("Permissions error", 255, 238, 130, 238); return; } try { info.Run(sender, hargs.Arguments); } catch (NLua.Exceptions.LuaScriptException e) { if (e.IsNetException) { var ex = e.GetBaseException(); if (ex != null) { if (ex is CommandError) { sender.SendMessage(command + ": " + ex.Message); info.ShowHelp(sender); } } } } catch (ExitException e) { throw e; } catch (CommandError e) { sender.SendMessage(command + ": " + e.Message); info.ShowHelp(sender); } return; } else { sender.SendMessage(String.Format("No such command '{0}'.", command)); } } } catch (ExitException e) { throw e; } catch (TokenizerException e) { sender.SendMessage(e.Message); } }
public void ParseAndProcess(ISender sender, string line) { var ctx = new HookContext { Sender = sender, Player = sender as Player, }; ctx.Connection = ctx.Player != null ? ctx.Player.Connection : null; var hargs = new HookArgs.Command(); try { CommandInfo info; var firstSpace = line.IndexOf(' '); if (firstSpace < 0) { firstSpace = line.Length; } var prefix = line.Substring(0, firstSpace); hargs.Prefix = prefix; if (FindStringCommand(prefix, out info)) { hargs.ArgumentString = (firstSpace < line.Length - 1 ? line.Substring(firstSpace + 1, line.Length - firstSpace - 1) : "").Trim(); HookPoints.Command.Invoke(ref ctx, ref hargs); if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE) { return; } if (ctx.Result != HookResult.CONTINUE && !CheckAccessLevel(info, sender)) { sender.sendMessage("You cannot perform that action.", 255, 238, 130, 238); return; } try { info.Run(sender, hargs.ArgumentString); } catch (ExitException e) { throw e; } catch (CommandError e) { sender.sendMessage(prefix + ": " + e.Message); info.ShowHelp(sender); } return; } var args = new ArgumentList(); var command = Tokenize(line, args); if (command != null) { if (FindTokenCommand(command, out info)) { hargs.Arguments = args; foreach (BasePlugin plg in PluginManager.plugins.Values) { if (plg.commands.ContainsKey(command)) { args.Plugin = plg; } } HookPoints.Command.Invoke(ref ctx, ref hargs); if (ctx.CheckForKick() || ctx.Result == HookResult.IGNORE) { return; } if (ctx.Result != HookResult.CONTINUE && !CheckAccessLevel(info, sender)) { sender.sendMessage("You cannot perform that action.", 255, 238, 130, 238); return; } try { info.Run(sender, hargs.Arguments); } catch (ExitException e) { throw e; } catch (CommandError e) { sender.sendMessage(command + ": " + e.Message); info.ShowHelp(sender); } return; } else { sender.sendMessage("No such command."); } } } catch (ExitException e) { throw e; } catch (TokenizerException e) { sender.sendMessage(e.Message); } }