From ddb2afefe9873f8d7cadc92c4403f2d768526854 Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Fri, 11 Oct 2013 00:49:46 -0400 Subject: [PATCH] Fix hardcore deaths by wiping and reseeding the tsCharacter table. Log to server/logs chat over head. --- TShockAPI/DB/CharacterManager.cs | 15 +++++++++++++++ TShockAPI/GetDataHandlers.cs | 9 +++++++++ TShockAPI/TShock.cs | 12 +++++++++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/TShockAPI/DB/CharacterManager.cs b/TShockAPI/DB/CharacterManager.cs index 7f80bdd4..c0c0a6d7 100755 --- a/TShockAPI/DB/CharacterManager.cs +++ b/TShockAPI/DB/CharacterManager.cs @@ -130,5 +130,20 @@ namespace TShockAPI.DB } return false; } + + public bool RemovePlayer(int userid) + { + try + { + database.Query("DELETE FROM tsCharacter WHERE Account = @0;", userid); + return true; + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + + return false; + } } } \ No newline at end of file diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 060c8034..924f0ef4 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2513,6 +2513,15 @@ namespace TShockAPI args.Player.LastDeath = DateTime.Now; args.Player.Dead = true; + if (args.TPlayer.difficulty == 2 && TShock.Config.ServerSideCharacter && args.Player.IsLoggedIn) + { + User user = TShock.Users.GetUserByName(args.Player.UserAccountName); + if (TShock.CharacterDB.RemovePlayer(user.ID)) + { + TShock.CharacterDB.SeedInitialData(user); + } + } + return false; } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 96d00ac0..bb63c3a4 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -920,7 +920,7 @@ namespace TShockAPI } Log.Info(string.Format("{0} disconnected.", tsplr.Name)); - if (tsplr.IsLoggedIn && !tsplr.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter) + if (tsplr.IsLoggedIn && !tsplr.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter && (!tsplr.Dead || tsplr.TPlayer.difficulty != 2)) { tsplr.PlayerData.CopyCharacter(tsplr); CharacterDB.InsertPlayerData(tsplr); @@ -990,9 +990,15 @@ namespace TShockAPI ply.name = name; NetMessage.SendData((int) PacketTypes.ChatText, -1, args.Who, args.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); - tsplr.SendMessage(String.Format("<{0}> {1}", + + string msg = String.Format("<{0}> {1}", String.Format(Config.ChatAboveHeadsFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix), - args.Text), tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); + args.Text); + + tsplr.SendMessage(msg, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); + + TSPlayer.Server.SendMessage(msg, tsplr.Group.R, tsplr.Group.G, tsplr.Group.B); + Log.Info(string.Format("Broadcast: {0}", msg)); args.Handled = true; } }