From 51e19916431b443446d8e21ca71b90194fad0eea Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Thu, 31 May 2012 22:43:07 -0400 Subject: [PATCH] Added Command Callback support --- TShockAPI/Commands.cs | 15 +++++++++++++++ TShockAPI/TSPlayer.cs | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index f4edcdca..f51fcfbd 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -195,6 +195,7 @@ namespace TShockAPI add(Permissions.cfg, WorldInfo, "world"); add(Permissions.savessi, SaveSSI, "savessi"); add(Permissions.savessi, OverrideSSI, "overridessi", "ossi"); + add(null, TestCallbackCommand, "test"); } public static bool HandleCommand(TSPlayer player, string text) @@ -212,6 +213,13 @@ namespace TShockAPI if (cmd == null) { + if( player.AwaitingResponse.ContainsKey(cmdName)) + { + Action call = player.AwaitingResponse[cmdName]; + player.AwaitingResponse.Remove(cmdName); + call( new CommandArgs(cmdText, player, args)); + return true; + } player.SendErrorMessage("Invalid command entered. Type /help for a list of valid commands."); return true; } @@ -312,6 +320,13 @@ namespace TShockAPI return c == ' ' || c == '\t' || c == '\n'; } + private static void TestCallbackCommand(CommandArgs args) + { + Action a = (s) => args.Player.Spawn(); + args.Player.AddResponse( "yes", a); + args.Player.SendInfoMessage( "Type yes to spawn." ); + } + #region Account commands public static void AttemptLogin(CommandArgs args) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 21decd13..4e8a3c3e 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -43,6 +43,7 @@ namespace TShockAPI public DateTime LastPvpChange; public Point[] TempPoints = new Point[2]; public int AwaitingTempPoint { get; set; } + public Dictionary> AwaitingResponse; public bool AwaitingName { get; set; } public DateTime LastThreat { get; set; } public DateTime LastTileChangeNotify { get; set; } @@ -212,6 +213,7 @@ namespace TShockAPI Index = index; Group = new Group(TShock.Config.DefaultGuestGroupName); IceTiles = new List(); + AwaitingResponse = new Dictionary>(); } protected TSPlayer(String playerName) @@ -522,6 +524,16 @@ namespace TShockAPI return TShock.SendBytes(Netplay.serverSock[Index], data); } + + public void AddResponse( string name, Action callback) + { + if( AwaitingResponse.ContainsKey(name)) + { + AwaitingResponse.Remove(name); + } + + AwaitingResponse.Add(name, callback); + } } public class TSRestPlayer : TSServerPlayer