From cd353c27a30d80b807dc277264ff67782582bf54 Mon Sep 17 00:00:00 2001 From: White Date: Mon, 6 Apr 2015 11:59:47 +0930 Subject: [PATCH 1/4] Time parameter for tempgroup --- TShockAPI/TSPlayer.cs | 9 +++++++++ TShockAPI/TShock.cs | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 7f9fbced..85a2a689 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -22,9 +22,11 @@ using System.Diagnostics; using System.IO; using System.Text; using System.Threading; +using System.Timers; using Terraria; using TShockAPI.DB; using TShockAPI.Net; +using Timer = System.Timers.Timer; namespace TShockAPI { @@ -111,6 +113,8 @@ namespace TShockAPI /// The player's temporary group. This overrides the user's actual group. /// public Group tempGroup = null; + + public Timer tempGroupTimer; private Group group = null; @@ -523,6 +527,11 @@ namespace TShockAPI } + public void TempGroupTimerElapsed(object sender, ElapsedEventArgs args) + { + tempGroup = null; + } + public void SendWorldInfo(int tilex, int tiley, bool fakeid) { using (var ms = new MemoryStream()) diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index d2440381..3b039acc 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1022,6 +1022,11 @@ namespace TShockAPI { RememberedPos.InsertLeavePos(tsplr.Name, tsplr.IP, (int) (tsplr.X/16), (int) (tsplr.Y/16)); } + + if (tsplr.tempGroupTimer != null) + { + tsplr.tempGroupTimer.Stop(); + } } // The last player will leave after this hook is executed. From bddcf813316afb458d65f9a8c2d99364c19998bf Mon Sep 17 00:00:00 2001 From: White Date: Mon, 6 Apr 2015 12:02:35 +0930 Subject: [PATCH 2/4] Stop timer once it's done --- TShockAPI/TSPlayer.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 85a2a689..aba9469c 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -530,6 +530,10 @@ namespace TShockAPI public void TempGroupTimerElapsed(object sender, ElapsedEventArgs args) { tempGroup = null; + if (sender != null) + { + ((Timer)sender).Stop(); + } } public void SendWorldInfo(int tilex, int tiley, bool fakeid) From d0a962bd0fca83a3c05f9b169079f9875179756b Mon Sep 17 00:00:00 2001 From: White Date: Mon, 6 Apr 2015 12:18:18 +0930 Subject: [PATCH 3/4] Notification when temp group expires --- TShockAPI/TSPlayer.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index aba9469c..2a6a9f49 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -529,6 +529,8 @@ namespace TShockAPI public void TempGroupTimerElapsed(object sender, ElapsedEventArgs args) { + SendWarningMessage("Your temporary group access has expired."); + tempGroup = null; if (sender != null) { From 2f2749c480176e3ee90b1267eb9a1dfa9cab5a81 Mon Sep 17 00:00:00 2001 From: White Date: Sun, 5 Apr 2015 22:42:57 -0400 Subject: [PATCH 4/4] Time parameter in temp group command --- TShockAPI/Commands.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 21754931..2b277185 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -870,6 +870,10 @@ namespace TShockAPI args.Player.PlayerData = new PlayerData(args.Player); args.Player.Group = TShock.Groups.GetGroupByName(TShock.Config.DefaultGuestGroupName); args.Player.tempGroup = null; + if (args.Player.tempGroupTimer != null) + { + args.Player.tempGroupTimer.Stop(); + } args.Player.UserAccountName = null; args.Player.UserID = -1; args.Player.IsLoggedIn = false; @@ -1630,6 +1634,21 @@ namespace TShockAPI return; } + if (args.Parameters.Count > 2) + { + int time; + if (!TShock.Utils.TryParseTime(args.Parameters[2], out time)) + { + args.Player.SendErrorMessage("Invalid time string! Proper format: _d_h_m_s, with at least one time specifier."); + args.Player.SendErrorMessage("For example, 1d and 10h-30m+2m are both valid time strings, but 2 is not."); + return; + } + + ply[0].tempGroupTimer = new System.Timers.Timer(time*1000); + ply[0].tempGroupTimer.Elapsed += ply[0].TempGroupTimerElapsed; + ply[0].tempGroupTimer.Start(); + } + Group g = TShock.Utils.GetGroup(args.Parameters[1]); ply[0].tempGroup = g;