Merge pull request #1353 from ProfessorXZ/general-devel

Added TSPlayer.Logout(); Fix #1347; Update changelog.
This commit is contained in:
Lucas Nicodemus 2016-12-18 10:30:37 -07:00 committed by GitHub
commit bf0d7416f3
3 changed files with 42 additions and 29 deletions

View file

@ -3,6 +3,11 @@
This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large. This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large.
## Upcoming Changes ## Upcoming Changes
* API: Version tick 2.0
* API: Added TSPlayer.KillPlayer() (@WhiteXZ)
* API: Added TSPlayer.Logout() (@ProfessorXZ)
* Fixed connections after max slot is reached (@DeathCradle)
* Fixed server crashes caused by client disconnections when attempting to read closed sockets (@Enerdy)
## TShock 4.3.21 ## TShock 4.3.21
* Compatibility with Terraria 1.3.4.3 (@Patrikkk, @Zaicon). * Compatibility with Terraria 1.3.4.3 (@Patrikkk, @Zaicon).
@ -26,7 +31,6 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
* Added `/uploadssc [player]` which allows someone to upload SSC data for [player] and store it on the server. Adds `tshock.ssc.upload` and `tshock.ssc.upload.others` permission nodes to match (@DogooFalchion). * Added `/uploadssc [player]` which allows someone to upload SSC data for [player] and store it on the server. Adds `tshock.ssc.upload` and `tshock.ssc.upload.others` permission nodes to match (@DogooFalchion).
* Added hardened stone to the whitelist of tiles editable by players (@DogooFalchion). * Added hardened stone to the whitelist of tiles editable by players (@DogooFalchion).
* Added conversion system to send convert old MOTD format into smart text, while preserving initial line starting values to keep byte optimization for background colors Thanks to (@WhiteXZ, @Simon311, and especially @DogooFalchion) for the hard work on this issue. * Added conversion system to send convert old MOTD format into smart text, while preserving initial line starting values to keep byte optimization for background colors Thanks to (@WhiteXZ, @Simon311, and especially @DogooFalchion) for the hard work on this issue.
* Fixed server-sided inventory issues caused by bank3 (@ProfessorXZ)
## TShock 4.3.20 ## TShock 4.3.20
* Security improvement: The auth system is now automatically disabled if a superadmin exists in the database (@Enerdy). * Security improvement: The auth system is now automatically disabled if a superadmin exists in the database (@Enerdy).

View file

@ -892,29 +892,7 @@ namespace TShockAPI
return; return;
} }
PlayerHooks.OnPlayerLogout(args.Player); args.Player.Logout();
if (Main.ServerSideCharacter)
{
args.Player.IgnoreActionsForInventory = String.Format("Server side characters is enabled! Please {0}register or {0}login to play!", Commands.Specifier);
if (!args.Player.IgnoreActionsForClearingTrashCan && (!args.Player.Dead || args.Player.TPlayer.difficulty != 2))
{
args.Player.PlayerData.CopyCharacter(args.Player);
TShock.CharacterDB.InsertPlayerData(args.Player);
}
}
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.User = null;
args.Player.IsLoggedIn = false;
args.Player.SendSuccessMessage("You have been successfully logged out of your account."); args.Player.SendSuccessMessage("You have been successfully logged out of your account.");
if (Main.ServerSideCharacter) if (Main.ServerSideCharacter)
{ {
@ -1225,16 +1203,20 @@ namespace TShockAPI
var user = TShock.Users.GetUserByName(username); var user = TShock.Users.GetUserByName(username);
if (user != null) if (user != null)
{ {
DateTime LastSeen = DateTime.Parse(user.LastAccessed).ToLocalTime(); DateTime LastSeen;
string Timezone = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours.ToString("+#;-#"); string Timezone = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours.ToString("+#;-#");
args.Player.SendSuccessMessage("{0}'s last login occured {1} {2} UTC{3}.", user.Name, LastSeen.ToShortDateString(), if (DateTime.TryParse(user.LastAccessed, out LastSeen))
LastSeen.ToShortTimeString(), Timezone); {
LastSeen = DateTime.Parse(user.LastAccessed).ToLocalTime();
args.Player.SendSuccessMessage("{0}'s last login occured {1} {2} UTC{3}.", user.Name, LastSeen.ToShortDateString(),
LastSeen.ToShortTimeString(), Timezone);
}
if (args.Player.Group.HasPermission(Permissions.advaccountinfo)) if (args.Player.Group.HasPermission(Permissions.advaccountinfo))
{ {
List<string> KnownIps = JsonConvert.DeserializeObject<List<string>>(user.KnownIps); List<string> KnownIps = JsonConvert.DeserializeObject<List<string>>(user.KnownIps?.ToString() ?? string.Empty);
string ip = KnownIps[KnownIps.Count - 1]; string ip = KnownIps?[KnownIps.Count - 1] ?? "N/A";
DateTime Registered = DateTime.Parse(user.Registered).ToLocalTime(); DateTime Registered = DateTime.Parse(user.Registered).ToLocalTime();
args.Player.SendSuccessMessage("{0}'s group is {1}.", user.Name, user.Group); args.Player.SendSuccessMessage("{0}'s group is {1}.", user.Name, user.Group);

View file

@ -637,6 +637,33 @@ namespace TShockAPI
return null; return null;
} }
/// <summary>
/// Logs the player out of an account.
/// </summary>
public void Logout()
{
PlayerHooks.OnPlayerLogout(this);
if (Main.ServerSideCharacter)
{
IgnoreActionsForInventory = $"Server side characters is enabled! Please {Commands.Specifier}register or {Commands.Specifier}login to play!";
if (!IgnoreActionsForClearingTrashCan && (!Dead || TPlayer.difficulty != 2))
{
PlayerData.CopyCharacter(this);
TShock.CharacterDB.InsertPlayerData(this);
}
}
PlayerData = new PlayerData(this);
Group = TShock.Groups.GetGroupByName(TShock.Config.DefaultGuestGroupName);
tempGroup = null;
if (tempGroupTimer != null)
{
tempGroupTimer.Stop();
}
User = null;
IsLoggedIn = false;
}
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="TSPlayer"/> class. /// Initializes a new instance of the <see cref="TSPlayer"/> class.
/// </summary> /// </summary>