From 99de841f5d32cb662bc47e5bd36a67f0c7406ae4 Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Sat, 24 May 2014 19:52:23 -0400 Subject: [PATCH] Add list of commands that are eligible to be run to the Playercommand hook, so that a plugin may override this. Add an event for TShock Chat, pushing out the raw text and the text tshock sends, allowing for plugins to run after tshock and change what tshock is sending. --- TShockAPI/Commands.cs | 6 +++--- TShockAPI/Hooks/PlayerHooks.cs | 28 +++++++++++++++++++++++++--- TShockAPI/TShock.cs | 13 ++++++++----- 3 files changed, 36 insertions(+), 11 deletions(-) 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);