diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 012e8ba1..3f988a8d 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -567,11 +567,11 @@ namespace TShockAPI string cmdName = args[0].ToLower(); args.RemoveAt(0); - if (Hooks.PlayerHooks.OnPlayerCommand(player, cmdName, cmdText, args)) - return true; - IEnumerable cmds = ChatCommands.Where(c => c.HasAlias(cmdName)); + if (Hooks.PlayerHooks.OnPlayerCommand(player, cmdName, cmdText, args, ref cmds)) + return true; + if (cmds.Count() == 0) { if (player.AwaitingResponse.ContainsKey(cmdName)) diff --git a/TShockAPI/Hooks/PlayerHooks.cs b/TShockAPI/Hooks/PlayerHooks.cs index 79db8a30..22fc4f40 100644 --- a/TShockAPI/Hooks/PlayerHooks.cs +++ b/TShockAPI/Hooks/PlayerHooks.cs @@ -43,8 +43,16 @@ namespace TShockAPI.Hooks public string CommandName { get; set; } public string CommandText { get; set; } public List Parameters { get; set; } + public IEnumerable CommandList { get; set; } } + public class PlayerChatEventArgs : HandledEventArgs + { + public TSPlayer Player { get; set; } + public string RawText { get; set; } + public string TShockFormattedText { get; set; } + } + public static class PlayerHooks { public delegate void PlayerPostLoginD(PlayerPostLoginEventArgs e); @@ -56,6 +64,9 @@ namespace TShockAPI.Hooks public delegate void PlayerCommandD(PlayerCommandEventArgs e); public static event PlayerCommandD PlayerCommand; + public delegate void PlayerChatD(PlayerChatEventArgs e); + public static event PlayerChatD PlayerChat; + public static void OnPlayerPostLogin(TSPlayer ply) { if (PlayerPostLogin == null) @@ -67,7 +78,7 @@ namespace TShockAPI.Hooks PlayerPostLogin(args); } - public static bool OnPlayerCommand(TSPlayer player, string cmdName, string cmdText, List args) + public static bool OnPlayerCommand(TSPlayer player, string cmdName, string cmdText, List args, ref IEnumerable commands) { if (PlayerCommand == null) { @@ -78,10 +89,11 @@ namespace TShockAPI.Hooks Player = player, CommandName = cmdName, CommandText = cmdText, - Parameters = args - + Parameters = args, + CommandList = commands }; PlayerCommand(playerCommandEventArgs); + commands = playerCommandEventArgs.CommandList; return playerCommandEventArgs.Handled; } @@ -94,5 +106,15 @@ namespace TShockAPI.Hooks PlayerPreLogin(args); return args.Handled; } + + public static void OnPlayerChat(TSPlayer ply, string rawtext, ref string tshockText) + { + if (PlayerChat == null) + return; + + var args = new PlayerChatEventArgs {Player = ply, RawText = rawtext, TShockFormattedText = tshockText}; + PlayerChat(args); + tshockText = args.TShockFormattedText; + } } } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 9c639ed9..4b8b9240 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1067,9 +1067,10 @@ namespace TShockAPI } else if (!TShock.Config.EnableChatAboveHeads) { - Utils.Broadcast( - String.Format(Config.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, args.Text), - tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); + var text = String.Format(Config.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, + args.Text); + Hooks.PlayerHooks.OnPlayerChat(tsplr, args.Text, ref text); + Utils.Broadcast(text, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); args.Handled = true; } else @@ -1079,12 +1080,14 @@ namespace TShockAPI ply.name = String.Format(Config.ChatAboveHeadsFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix); NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, -1, ply.name, args.Who, 0, 0, 0, 0); ply.name = name; - NetMessage.SendData((int) PacketTypes.ChatText, -1, args.Who, args.Text, args.Who, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); + var text = args.Text; + Hooks.PlayerHooks.OnPlayerChat(tsplr, args.Text, ref text); + NetMessage.SendData((int)PacketTypes.ChatText, -1, args.Who, text, args.Who, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, -1, name, args.Who, 0, 0, 0, 0); string msg = String.Format("<{0}> {1}", String.Format(Config.ChatAboveHeadsFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix), - args.Text); + text); tsplr.SendMessage(msg, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B);