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.
This commit is contained in:
Zack Piispanen 2014-05-24 19:52:23 -04:00
parent 0872283039
commit 99de841f5d
3 changed files with 36 additions and 11 deletions

View file

@ -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<Command> 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))

View file

@ -43,8 +43,16 @@ namespace TShockAPI.Hooks
public string CommandName { get; set; }
public string CommandText { get; set; }
public List<string> Parameters { get; set; }
public IEnumerable<Command> 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<string> args)
public static bool OnPlayerCommand(TSPlayer player, string cmdName, string cmdText, List<string> args, ref IEnumerable<Command> 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;
}
}
}

View file

@ -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);