From a26ad7dce0314c65c047139b9a32411f48162093 Mon Sep 17 00:00:00 2001 From: Stealownz Date: Sun, 4 Jul 2021 17:15:13 +0800 Subject: [PATCH 01/43] Fix SendTileRectHandler not sending tile rect updates to everyone else Fixes #2386 --- CHANGELOG.md | 1 + TShockAPI/Handlers/SendTileRectHandler.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d31e64..cbfb3a12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) +* Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) diff --git a/TShockAPI/Handlers/SendTileRectHandler.cs b/TShockAPI/Handlers/SendTileRectHandler.cs index b3955618..b5c0bafd 100644 --- a/TShockAPI/Handlers/SendTileRectHandler.cs +++ b/TShockAPI/Handlers/SendTileRectHandler.cs @@ -85,7 +85,7 @@ namespace TShockAPI.Handlers // At this point we should send our state back to the client so they remain in sync with the server if (args.Handled == true) { - args.Player.SendTileRect(args.TileX, args.TileY, args.Width, args.Length); + TSPlayer.All.SendTileRect(args.TileX, args.TileY, args.Width, args.Length); TShock.Log.ConsoleDebug("Bouncer / SendTileRect reimplemented from carbonara from {0}", args.Player.Name); } } From ef603f61a860df671074025624f4e92bb13adb3a Mon Sep 17 00:00:00 2001 From: James Puleo Date: Fri, 9 Jul 2021 17:27:41 -0400 Subject: [PATCH 02/43] Consistently use `TilePlacementValid` and `SendTileSquare` in Bouncer. There are 3 different ways Bouncer uses these: - Not checking `TilePlacementValid` at all. - Checking `TilePlacementValid`, rejecting, but then doing a `SendTileSquare` to that player. - Checking `TilePlacementValid`, rejecting. _(this is what we should always be doing)_ Not checking `TilePlacementValid` can allow for placement outside of the world (unknown results), and checking `TilePlacementValid` and sending a `SendTileSquare` on rejection causes the server to try to frame that square. In the case of invalid coordinates (negative), framing takes much longer than expected. --- CHANGELOG.md | 1 + TShockAPI/Bouncer.cs | 51 ++++++++++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d31e64..9a3902b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) +* Properly sanitize packet tile coordinates that coulbe used to DoS attack a server. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 42cc6cd1..60737a7f 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -260,6 +260,13 @@ namespace TShockAPI try { + if (!TShock.Utils.TilePlacementValid(tileX, tileY)) + { + TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (tile placement valid) {0} {1} {2}", args.Player.Name, action, editData); + args.Handled = true; + return; + } + if (editData < 0 || ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile) && editData >= Main.maxTileSets) || ((action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && editData >= Main.maxWallTypes)) @@ -270,14 +277,6 @@ namespace TShockAPI return; } - if (!TShock.Utils.TilePlacementValid(tileX, tileY)) - { - TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (tile placement valid) {0} {1} {2}", args.Player.Name, action, editData); - args.Player.SendTileSquare(tileX, tileY, 1); - args.Handled = true; - return; - } - if (action == EditAction.KillTile && Main.tile[tileX, tileY].type == TileID.MagicalIceBlock) { TShock.Log.ConsoleDebug("Bouncer / OnTileEdit super accepted from (ice block) {0} {1} {2}", args.Player.Name, action, editData); @@ -1654,6 +1653,13 @@ namespace TShockAPI short type = args.Type; short style = args.Style; + if (!TShock.Utils.TilePlacementValid(x, y)) + { + TShock.Log.ConsoleDebug("Bouncer / OnPlaceObject rejected valid placements from {0}", args.Player.Name); + args.Handled = true; + return; + } + if (type < 0 || type >= Main.maxTileSets) { TShock.Log.ConsoleDebug("Bouncer / OnPlaceObject rejected out of bounds tile from {0}", args.Player.Name); @@ -1702,14 +1708,6 @@ namespace TShockAPI return; } - if (!TShock.Utils.TilePlacementValid(x, y)) - { - TShock.Log.ConsoleDebug("Bouncer / OnPlaceObject rejected valid placements from {0}", args.Player.Name); - args.Player.SendTileSquare(x, y, 1); - args.Handled = true; - return; - } - if (args.Player.Dead && TShock.Config.Settings.PreventDeadModification) { TShock.Log.ConsoleDebug("Bouncer / OnPlaceObject rejected dead people don't do things from {0}", args.Player.Name); @@ -1801,6 +1799,13 @@ namespace TShockAPI /// The packet arguments that the event has. internal void OnPlaceTileEntity(object sender, GetDataHandlers.PlaceTileEntityEventArgs args) { + if (!TShock.Utils.TilePlacementValid(args.X, args.Y)) + { + TShock.Log.ConsoleDebug("Bouncer / OnPlaceTileEntity rejected tile placement valid from {0}", args.Player.Name); + args.Handled = true; + return; + } + if (args.Player.IsBeingDisabled()) { TShock.Log.ConsoleDebug("Bouncer / OnPlaceTileEntity rejected disabled from {0}", args.Player.Name); @@ -1828,6 +1833,13 @@ namespace TShockAPI /// The packet arguments that the event has. internal void OnPlaceItemFrame(object sender, GetDataHandlers.PlaceItemFrameEventArgs args) { + if (!TShock.Utils.TilePlacementValid(args.X, args.Y)) + { + TShock.Log.ConsoleDebug("Bouncer / OnPlaceItemFrame rejected tile placement valid from {0}", args.Player.Name); + args.Handled = true; + return; + } + if (args.Player.IsBeingDisabled()) { TShock.Log.ConsoleDebug("Bouncer / OnPlaceItemFrame rejected disabled from {0}", args.Player.Name); @@ -2129,6 +2141,13 @@ namespace TShockAPI /// internal void OnFoodPlatterTryPlacing(object sender, GetDataHandlers.FoodPlatterTryPlacingEventArgs args) { + if (!TShock.Utils.TilePlacementValid(args.TileX, args.TileY)) + { + TShock.Log.ConsoleDebug("Bouncer / OnFoodPlatterTryPlacing rejected tile placement valid from {0}", args.Player.Name); + args.Handled = true; + return; + } + if ((args.Player.SelectedItem.type != args.ItemID && args.Player.ItemInHand.type != args.ItemID)) { TShock.Log.ConsoleDebug("Bouncer / OnFoodPlatterTryPlacing rejected item not placed by hand from {0}", args.Player.Name); From 10e0b33e82180bde33af1e1b03b7032df9143015 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Fri, 16 Jul 2021 14:19:37 -0400 Subject: [PATCH 03/43] Add Lunatic Cultist summon permission check Didn't bother adding the broadcast stuff bc there's 4 cultists and it'll prob spam the chat if multiple players kill them at around the same time --- TShockAPI/GetDataHandlers.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index ed701f2f..430d8256 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2829,6 +2829,17 @@ namespace TShockAPI else TShock.Utils.SendLogs(string.Format($"{args.Player.Name} summoned the Empress of Light!"), Color.PaleVioletRed, args.Player); } + + if (Main.npc[id].netID == NPCID.CultistDevote || Main.npc[id].netID == NPCID.CultistArcherBlue) + { + if (!args.Player.HasPermission(Permissions.summonboss)) + { + args.Player.SendErrorMessage("You do not have permission to summon the Lunatic Cultist!"); + args.Player.SendData(PacketTypes.NpcUpdate, "", id); + TShock.Log.ConsoleDebug($"GetDataHandlers / HandleNpcStrike rejected Cultist summon from {args.Player.Name}"); + return true; + } + } return false; } From 154bee58f1fd8304ec9065dd92754debb490bbe9 Mon Sep 17 00:00:00 2001 From: Killia0 Date: Fri, 16 Jul 2021 14:53:37 -0400 Subject: [PATCH 04/43] Typo fixes on comments/strings My first PR contribution to TShock is spellcheck huh, frankly I don't know why but hey I could spare the time for this and caught some stuff. --- TShockAPI/Bouncer.cs | 2 +- TShockAPI/Commands.cs | 10 +++++----- TShockAPI/DB/GroupManager.cs | 4 ++-- TShockAPI/DB/RegionManager.cs | 10 +++++----- TShockAPI/DB/RememberedPosManager.cs | 2 +- TShockAPI/DB/UserManager.cs | 2 +- TShockAPI/DB/WarpsManager.cs | 6 +++--- TShockAPI/GetDataHandlers.cs | 10 +++++----- TShockAPI/Group.cs | 2 +- TShockAPI/Handlers/NetModules/PylonHandler.cs | 2 +- TShockAPI/ILog.cs | 4 ++-- TShockAPI/Permissions.cs | 2 +- TShockAPI/Rest/RestManager.cs | 4 ++-- TShockAPI/Sockets/LinuxTcpSocket.cs | 2 +- TShockAPI/TSPlayer.cs | 2 +- TShockAPI/TSServerPlayer.cs | 4 ++-- TShockAPI/TShock.cs | 2 +- TShockAPI/Utils.cs | 2 +- 18 files changed, 36 insertions(+), 36 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 42cc6cd1..299ab85b 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1726,7 +1726,7 @@ namespace TShockAPI return; } - // This is neccessary to check in order to prevent special tiles such as + // This is necessary to check in order to prevent special tiles such as // queen bee larva, paintings etc that use this packet from being placed // without selecting the right item. if (type != args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].createTile) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b6ba179f..39ab2cd5 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -50,7 +50,7 @@ namespace TShockAPI public bool Silent { get; private set; } /// - /// Parameters passed to the arguement. Does not include the command name. + /// Parameters passed to the argument. Does not include the command name. /// IE '/kick "jerk face"' will only have 1 argument /// public List Parameters { get; private set; } @@ -939,7 +939,7 @@ namespace TShockAPI } catch (UserAccountManagerException ex) { - args.Player.SendErrorMessage("Sorry, an error occured: " + ex.Message + "."); + args.Player.SendErrorMessage("Sorry, an error occurred: " + ex.Message + "."); TShock.Log.ConsoleError("PasswordUser returned an error: " + ex); } } @@ -1003,7 +1003,7 @@ namespace TShockAPI } catch (UserAccountManagerException ex) { - args.Player.SendErrorMessage("Sorry, an error occured: " + ex.Message + "."); + args.Player.SendErrorMessage("Sorry, an error occurred: " + ex.Message + "."); TShock.Log.ConsoleError("RegisterUser returned an error: " + ex); } } @@ -1216,7 +1216,7 @@ namespace TShockAPI if (DateTime.TryParse(account.LastAccessed, out LastSeen)) { LastSeen = DateTime.Parse(account.LastAccessed).ToLocalTime(); - args.Player.SendSuccessMessage("{0}'s last login occured {1} {2} UTC{3}.", account.Name, LastSeen.ToShortDateString(), + args.Player.SendSuccessMessage("{0}'s last login occurred {1} {2} UTC{3}.", account.Name, LastSeen.ToShortDateString(), LastSeen.ToShortTimeString(), Timezone); } @@ -6472,6 +6472,6 @@ namespace TShockAPI } } - #endregion Cheat Comamnds + #endregion Cheat Commands } } diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index 7b3b62dd..3bb50881 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -425,14 +425,14 @@ namespace TShockAPI.DB } catch (Exception ex) { - TShock.Log.Error($"An exception has occured during database transaction: {ex.Message}"); + TShock.Log.Error($"An exception has occurred during database transaction: {ex.Message}"); try { transaction.Rollback(); } catch (Exception rollbackEx) { - TShock.Log.Error($"An exception has occured during database rollback: {rollbackEx.Message}"); + TShock.Log.Error($"An exception has occurred during database rollback: {rollbackEx.Message}"); } } } diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index eaf8f1ba..60ff0ed5 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -168,7 +168,7 @@ namespace TShockAPI.DB } /// - /// Delets the region from this world with a given ID. + /// Deletes the region from this world with a given ID. /// /// The ID of the region to delete. /// Whether the region was successfully deleted. @@ -584,7 +584,7 @@ namespace TShockAPI.DB /// /// Region name /// New owner's username - /// Whether the change was successfull + /// Whether the change was successful public bool ChangeOwner(string regionName, string newOwner) { var region = GetRegionByName(regionName); @@ -604,7 +604,7 @@ namespace TShockAPI.DB /// /// Region name /// Group's name - /// Whether the change was successfull + /// Whether the change was successful public bool AllowGroup(string regionName, string groupName) { string mergedGroups = ""; @@ -646,7 +646,7 @@ namespace TShockAPI.DB /// /// Region name /// Group name - /// Whether the change was successfull + /// Whether the change was successful public bool RemoveGroup(string regionName, string group) { Region r = GetRegionByName(regionName); @@ -688,7 +688,7 @@ namespace TShockAPI.DB /// /// Region name /// New Z index - /// Whether the change was successfull + /// Whether the change was successful public bool SetZ(string name, int z) { try diff --git a/TShockAPI/DB/RememberedPosManager.cs b/TShockAPI/DB/RememberedPosManager.cs index 77fef847..c49c5912 100644 --- a/TShockAPI/DB/RememberedPosManager.cs +++ b/TShockAPI/DB/RememberedPosManager.cs @@ -56,7 +56,7 @@ namespace TShockAPI.DB { int checkX=reader.Get("X"); int checkY=reader.Get("Y"); - //fix leftover inconsistancies + //fix leftover inconsistencies if (checkX==0) checkX++; if (checkY==0) diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs index 2d09ba5a..4fedaaed 100644 --- a/TShockAPI/DB/UserManager.cs +++ b/TShockAPI/DB/UserManager.cs @@ -378,7 +378,7 @@ namespace TShockAPI.DB /// The hashed password for the user account. public string Password { get; internal set; } - /// The user's saved Univerally Unique Identifier token. + /// The user's saved Universally Unique Identifier token. public string UUID { get; set; } /// The group object that the user account is a part of. diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index a409580e..bd13ce4d 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -139,7 +139,7 @@ namespace TShockAPI.DB /// The warp name. /// The X position. /// The Y position. - /// Whether the operation suceeded. + /// Whether the operation succeeded. public bool Position(string warpName, int x, int y) { try @@ -163,7 +163,7 @@ namespace TShockAPI.DB /// /// The warp name. /// The state. - /// Whether the operation suceeded. + /// Whether the operation succeeded. public bool Hide(string warpName, bool state) { try @@ -216,4 +216,4 @@ namespace TShockAPI.DB IsPrivate = false; } } -} \ No newline at end of file +} diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index ed701f2f..c675910b 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -346,7 +346,7 @@ namespace TShockAPI /// public Vector2 Velocity { get; set; } /// - /// Original poisition of the player when using Potion of Return. + /// Original position of the player when using Potion of Return. /// public Vector2? OriginalPos { get; set; } /// @@ -770,7 +770,7 @@ namespace TShockAPI { /// The projectile's identity...? public int ProjectileIdentity; - /// The the player index of the projectile's owner (Main.players). + /// The player index of the projectile's owner (Main.players). public byte ProjectileOwner; /// The index of the projectile in Main.projectile. public int ProjectileIndex; @@ -1846,7 +1846,7 @@ namespace TShockAPI /// public byte ID { get; set; } /// - /// The direction the damage is occuring from + /// The direction the damage is occurring from /// public byte Direction { get; set; } /// @@ -1902,7 +1902,7 @@ namespace TShockAPI /// public byte Direction { get; set; } /// - /// Amount of damage delt + /// Amount of damage dealt /// public short Damage { get; set; } /// @@ -1989,7 +1989,7 @@ namespace TShockAPI /// public int Slot { get; set; } /// - /// Wether or not the slot that is being modified is a Dye slot. + /// Whether or not the slot that is being modified is a Dye slot. /// public bool IsDye { get; set; } /// diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index fa2d1975..ff2ba2e9 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -273,7 +273,7 @@ namespace TShockAPI /// /// Clears the permission list and sets it to the list provided, - /// will parse "!permssion" and add it to the negated permissions. + /// will parse "!permission" and add it to the negated permissions. /// /// The new list of permissions to associate with the group. public void SetPermission(List permission) diff --git a/TShockAPI/Handlers/NetModules/PylonHandler.cs b/TShockAPI/Handlers/NetModules/PylonHandler.cs index 7cbe054b..10a30b68 100644 --- a/TShockAPI/Handlers/NetModules/PylonHandler.cs +++ b/TShockAPI/Handlers/NetModules/PylonHandler.cs @@ -11,7 +11,7 @@ namespace TShockAPI.Handlers.NetModules public class PylonHandler : INetModuleHandler { /// - /// Event occuring + /// Event occurring /// public SubPacketType PylonEventType { get; set; } /// diff --git a/TShockAPI/ILog.cs b/TShockAPI/ILog.cs index 9fac3789..4c560f1f 100644 --- a/TShockAPI/ILog.cs +++ b/TShockAPI/ILog.cs @@ -119,7 +119,7 @@ namespace TShockAPI /// Writes a message to the log /// /// Message to write - /// LogLevel assosciated with the message + /// LogLevel associated with the message void Write(string message, TraceLevel level); /// @@ -152,4 +152,4 @@ namespace TShockAPI /// void Dispose(); } -} \ No newline at end of file +} diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index 8ce013b8..7df1ca83 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -399,7 +399,7 @@ namespace TShockAPI [Description("User can use Creative UI to set world time speed.")] public static readonly string journey_timespeed = "tshock.journey.time.setspeed"; - [Description("User can use Creative UI to to toggle character godmode.")] + [Description("User can use Creative UI to toggle character godmode.")] public static readonly string journey_godmode = "tshock.journey.godmode"; [Description("User can use Creative UI to set world wind strength/seed.")] diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 8a88dbb6..6ca9889e 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -1117,7 +1117,7 @@ namespace TShockAPI [Permission(RestPermissions.restmanagegroups)] [Noun("group", true, "The name of the new group.", typeof(String))] [Noun("parent", false, "The name of the parent group.", typeof(String))] - [Noun("permissions", false, "A comma seperated list of permissions for the new group.", typeof(String))] + [Noun("permissions", false, "A comma separated list of permissions for the new group.", typeof(String))] [Noun("chatcolor", false, "A r,g,b string representing the color for this groups chat.", typeof(String))] [Token] private object GroupCreate(RestRequestArgs args) @@ -1142,7 +1142,7 @@ namespace TShockAPI [Noun("group", true, "The name of the group to modify.", typeof(String))] [Noun("parent", false, "The name of the new parent for this group.", typeof(String))] [Noun("chatcolor", false, "The new chat color r,g,b.", typeof(String))] - [Noun("permissions", false, "The new comma seperated list of permissions.", typeof(String))] + [Noun("permissions", false, "The new comma separated list of permissions.", typeof(String))] [Token] private object GroupUpdate(RestRequestArgs args) { diff --git a/TShockAPI/Sockets/LinuxTcpSocket.cs b/TShockAPI/Sockets/LinuxTcpSocket.cs index 98892c42..5a95794b 100644 --- a/TShockAPI/Sockets/LinuxTcpSocket.cs +++ b/TShockAPI/Sockets/LinuxTcpSocket.cs @@ -200,7 +200,7 @@ namespace TShockAPI.Sockets this._listener.Stop(); // currently vanilla will stop listening when the slots are full, however it appears that this Netplay.IsListening - // flag is still set, making the server loop beleive it's still listening when it's actually not. + // flag is still set, making the server loop believe it's still listening when it's actually not. // clearing this flag when we actually have stopped will allow the ServerLoop to start listening again when // there are enough slots available. Netplay.IsListening = false; diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 47dea08b..afde7cef 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -1018,7 +1018,7 @@ namespace TShockAPI } /// - /// Player Y cooridnate divided by 16. Supposed Y world coordinate. + /// Player Y coordinate divided by 16. Supposed Y world coordinate. /// public int TileY { diff --git a/TShockAPI/TSServerPlayer.cs b/TShockAPI/TSServerPlayer.cs index 09642f59..9f59da49 100644 --- a/TShockAPI/TSServerPlayer.cs +++ b/TShockAPI/TSServerPlayer.cs @@ -182,12 +182,12 @@ namespace TShockAPI public void RevertTiles(Dictionary tiles) { - // Update Main.Tile first so that when tile sqaure is sent it is correct + // Update Main.Tile first so that when tile square is sent it is correct foreach (KeyValuePair entry in tiles) { Main.tile[(int)entry.Key.X, (int)entry.Key.Y] = entry.Value; } - // Send all players updated tile sqaures + // Send all players updated tile squares foreach (Vector2 coords in tiles.Keys) { All.SendTileSquare((int)coords.X, (int)coords.Y, 3); diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index ed74b882..c743a7d7 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1614,7 +1614,7 @@ namespace TShockAPI } /// OnProjectileSetDefaults - Called when a projectile sets the default attributes for itself. - /// e - The SetDefaultsEventArgs object praameterized with Projectile and int. + /// e - The SetDefaultsEventArgs object parameterized with Projectile and int. private void OnProjectileSetDefaults(SetDefaultsEventArgs e) { //tombstone fix. diff --git a/TShockAPI/Utils.cs b/TShockAPI/Utils.cs index 23007b19..92d45299 100644 --- a/TShockAPI/Utils.cs +++ b/TShockAPI/Utils.cs @@ -141,7 +141,7 @@ namespace TShockAPI } /// - /// Broadcasts a message from a Terraria playerplayer, not TShock + /// Broadcasts a message from a Terraria player, not TShock /// /// ply - the Terraria player index that will send the packet /// msg - The message to send From 40f8c931189b725a6fcee0bd5d7539843ffe4547 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Fri, 16 Jul 2021 15:01:41 -0400 Subject: [PATCH 05/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e55df643..62f09d5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) -* Added `summonboss` permission check for Prismatic Lacewing. Players who do not have said permission will be unable to kill this critter, as it will summon the Empress of Light. Also added support for the `AnonymousBossInvasions` config option, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) +* Added `summonboss` permission check for Empress of Light and Lunatic Cultist. Players who do not have this permission will be unable to kill Prismatic Lacewings, Cultist Devotees, and Cultist Archers. Also added support for the `AnonymousBossInvasions` config option for summoning Empress of Light, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) * Added `ForceTime` config setting check for Enchanted Sundial usage. If `ForceTime` is set to anything other than `normal`, Sundial use will be rejected as this would lead to very janky game behavior. Additionally, players with `cfgreload` permission will be advised to change it back to `normal` in order to use sundial. (@moisterrific, @bartico6) * Added `%onlineplayers%` and `%serverslots%` placeholders for MOTD. The default MOTD message was also updated to use this. (@moisterrific, @bartico6) From 8ebecd9ff2e777adfebdffba07252959ba941f1b Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 17 Jul 2021 14:36:10 -0400 Subject: [PATCH 06/43] Add notify msg for online player group change This makes it more consistent with how /tempgroup works, since that tells the target player of their group change. Also added silent command support. --- TShockAPI/Commands.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b6ba179f..ce0bf192 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1116,6 +1116,12 @@ namespace TShockAPI TShock.UserAccounts.SetUserGroup(account, args.Parameters[2]); TShock.Log.ConsoleInfo(args.Player.Name + " changed account " + account.Name + " to group " + args.Parameters[2] + "."); args.Player.SendSuccessMessage("Account " + account.Name + " has been changed to group " + args.Parameters[2] + "!"); + + var players = TSPlayer.FindByNameOrID(account.Name); + if (players.Count == 0) + return; + else if (!args.Silent) + players[0].SendSuccessMessage($"{args.Player.Name} has changed your group to {args.Parameters[2]}"); } catch (GroupNotExistsException) { From 96570bfcbdd09bf1fa3fab86aeb667381b43a83b Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 17 Jul 2021 14:43:52 -0400 Subject: [PATCH 07/43] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e55df643..d11a391a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Added `summonboss` permission check for Prismatic Lacewing. Players who do not have said permission will be unable to kill this critter, as it will summon the Empress of Light. Also added support for the `AnonymousBossInvasions` config option, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) * Added `ForceTime` config setting check for Enchanted Sundial usage. If `ForceTime` is set to anything other than `normal`, Sundial use will be rejected as this would lead to very janky game behavior. Additionally, players with `cfgreload` permission will be advised to change it back to `normal` in order to use sundial. (@moisterrific, @bartico6) * Added `%onlineplayers%` and `%serverslots%` placeholders for MOTD. The default MOTD message was also updated to use this. (@moisterrific, @bartico6) +* Added a notification message and silent command support for permanently changing a target player's user group. Now players who received a group change will be notified of their new group if they are currently online. (@moisterrific) ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) From 1521c8b28e271272813bcde6f70187fb332d18d4 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Mon, 19 Jul 2021 20:03:39 -0400 Subject: [PATCH 08/43] Improved login error messages and onboarding process Added config based checks so error messages only tell what is relevant to the user. Doesn't make any sense to tell them you can do /login when UUID is set to false because they will just get the same error message again. Also added an additional info message to the onboarding/password registration process so the next steps will be more obvious for first time users. --- TShockAPI/Commands.cs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b6ba179f..a8a287b0 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -807,9 +807,17 @@ namespace TShockAPI } else { - args.Player.SendErrorMessage("Syntax: {0}login - Logs in using your UUID and character name", Specifier); - args.Player.SendErrorMessage(" {0}login - Logs in using your password and character name", Specifier); - args.Player.SendErrorMessage(" {0}login - Logs in using your username and password", Specifier); + if (TShock.Config.Settings.DisableUUIDLogin && !TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); + else if (TShock.Config.Settings.DisableUUIDLogin && TShock.Config.Settings.AllowLoginAnyUsername) + { + args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); + args.Player.SendErrorMessage($" {Specifier}login - Logs in using your username and password"); + } + else + { + args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your UUID and character name"); + } args.Player.SendErrorMessage("If you forgot your password, there is no way to recover it."); return; } @@ -991,6 +999,14 @@ namespace TShockAPI { args.Player.SendSuccessMessage("Account \"{0}\" has been registered.", account.Name); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); + if (TShock.Config.Settings.DisableUUIDLogin && !TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + else if (TShock.Config.Settings.DisableUUIDLogin && TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + else + { + args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + } TShock.UserAccounts.AddUserAccount(account); TShock.Log.ConsoleInfo("{0} registered an account: \"{1}\".", args.Player.Name, account.Name); } From cdafad1d5ab30404cca407e72ef02eaaae518432 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Mon, 19 Jul 2021 20:10:11 -0400 Subject: [PATCH 09/43] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e55df643..53ffbb74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Added `summonboss` permission check for Prismatic Lacewing. Players who do not have said permission will be unable to kill this critter, as it will summon the Empress of Light. Also added support for the `AnonymousBossInvasions` config option, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) * Added `ForceTime` config setting check for Enchanted Sundial usage. If `ForceTime` is set to anything other than `normal`, Sundial use will be rejected as this would lead to very janky game behavior. Additionally, players with `cfgreload` permission will be advised to change it back to `normal` in order to use sundial. (@moisterrific, @bartico6) * Added `%onlineplayers%` and `%serverslots%` placeholders for MOTD. The default MOTD message was also updated to use this. (@moisterrific, @bartico6) +* Improved `/login` related error messages and made the `/register` process more friendly for players new to TShock. (@moisterrific) ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) From 640c4ebdb50b601913d74d932bda7413ecf97809 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Mon, 19 Jul 2021 20:25:20 -0400 Subject: [PATCH 10/43] Slightly even better idea I just realized --- TShockAPI/Commands.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index a8a287b0..280c1cfb 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1000,9 +1000,9 @@ namespace TShockAPI args.Player.SendSuccessMessage("Account \"{0}\" has been registered.", account.Name); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); if (TShock.Config.Settings.DisableUUIDLogin && !TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + args.Player.SendInfoMessage($"Type {Specifier}login {echoPassword} to sign in to your account."); else if (TShock.Config.Settings.DisableUUIDLogin && TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + args.Player.SendInfoMessage($"Type {Specifier}login \"{account.Name}\" {echoPassword} to sign in to your account."); else { args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); From 6ad57ba51710a99e86166c8e934a0c8f9a19d9e5 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Wed, 21 Jul 2021 18:14:46 -0700 Subject: [PATCH 11/43] Fix changelog typos --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3902b4..3ca714dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) -* Properly sanitize packet tile coordinates that coulbe used to DoS attack a server. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) +* Properly sanitized packet tile coordinates that could be used to DoS attack a server. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) From 853715cfa7b922de5fec2c014df0dfb45aef8ce8 Mon Sep 17 00:00:00 2001 From: James Puleo Date: Wed, 21 Jul 2021 21:40:44 -0400 Subject: [PATCH 12/43] Update changelog to be _much_ more verbose about GHSA-jq4j-v8pr-jv7j --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ca714dc..35b3788e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,12 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) -* Properly sanitized packet tile coordinates that could be used to DoS attack a server. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) +* Fixed Bouncer inconsistently using `TilePlacementValid` when validating tile coordinates, which could cause a DoS attack due to unexpectedly large world framing. The list below shows the corrected methods within Bouncer. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/Plugins/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) + * `OnTileEdit`: The check was moved to be the first, and will no longer `SendTileSquare` upon failure. + * `OnPlaceObject`: The check was moved to be the first, and will no longer `SendTileSquare` upon failure. + * `OnPlaceTileEntity`: The check was newly added. + * `OnPlaceItemFrame`: The check was newly added. + * `OnFoodPlatterTryPlacing`: The check was newly added. ## TShock 4.5.4 * Fixed ridiculous typo in `GetDataHandlers` which caused TShock to read the wrong field in the packet for `usingBiomeTorches`. (@hakusaro, @Arthri) From 87d5b769c78a8d514af4c45bccd78fc01935af2b Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Wed, 21 Jul 2021 18:46:01 -0700 Subject: [PATCH 13/43] Version tick: 4.5.5 --- CHANGELOG.md | 3 +++ TShockAPI/Properties/AssemblyInfo.cs | 4 ++-- TShockAPI/TShock.cs | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ccb7a06..4399f2f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. ## Upcoming changes +* This could be you! + +## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) * Added `/slay` as an alias for `/kill` to be more consistent with other server mods. (@hakusaro) * Added `/god` as an alias for `/godmode` to be more consistent with other server mods. (@hakusaro) diff --git a/TShockAPI/Properties/AssemblyInfo.cs b/TShockAPI/Properties/AssemblyInfo.cs index 819058cb..28c98cd4 100644 --- a/TShockAPI/Properties/AssemblyInfo.cs +++ b/TShockAPI/Properties/AssemblyInfo.cs @@ -53,5 +53,5 @@ using System.Runtime.InteropServices; // Also, be sure to release on github with the exact assembly version tag as below // so that the update manager works correctly (via the Github releases api and mimic) -[assembly: AssemblyVersion("4.5.4")] -[assembly: AssemblyFileVersion("4.5.4")] +[assembly: AssemblyVersion("4.5.5")] +[assembly: AssemblyFileVersion("4.5.5")] diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index ed74b882..2114b469 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -58,7 +58,7 @@ namespace TShockAPI /// VersionNum - The version number the TerrariaAPI will return back to the API. We just use the Assembly info. public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version; /// VersionCodename - The version codename is displayed when the server starts. Inspired by software codenames conventions. - public static readonly string VersionCodename = "Blood Moon edition"; + public static readonly string VersionCodename = "Olympics maybe?"; /// SavePath - This is the path TShock saves its data in. This path is relative to the TerrariaServer.exe (not in ServerPlugins). public static string SavePath = "tshock"; From 59f7ea02455545b3820edb69bfbcdde834ab37d7 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Wed, 21 Jul 2021 19:22:45 -0700 Subject: [PATCH 14/43] I'm seeing things --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4399f2f9..b1a5d203 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,7 +35,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Added `summonboss` permission check for Prismatic Lacewing. Players who do not have said permission will be unable to kill this critter, as it will summon the Empress of Light. Also added support for the `AnonymousBossInvasions` config option, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) * Added `ForceTime` config setting check for Enchanted Sundial usage. If `ForceTime` is set to anything other than `normal`, Sundial use will be rejected as this would lead to very janky game behavior. Additionally, players with `cfgreload` permission will be advised to change it back to `normal` in order to use sundial. (@moisterrific, @bartico6) * Added `%onlineplayers%` and `%serverslots%` placeholders for MOTD. The default MOTD message was also updated to use this. (@moisterrific, @bartico6) -* Fixed Bouncer inconsistently using `TilePlacementValid` when validating tile coordinates, which could cause a DoS attack due to unexpectedly large world framing. The list below shows the corrected methods within Bouncer. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/Plugins/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) +* Fixed Bouncer inconsistently using `TilePlacementValid` when validating tile coordinates, which could cause a DoS attack due to unexpectedly large world framing. The list below shows the corrected methods within Bouncer. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) * `OnTileEdit`: The check was moved to be the first, and will no longer `SendTileSquare` upon failure. * `OnPlaceObject`: The check was moved to be the first, and will no longer `SendTileSquare` upon failure. * `OnPlaceTileEntity`: The check was newly added. From 7cf49b55d8fb0fa86b476533121086bf218d7fde Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 16:44:24 -0400 Subject: [PATCH 15/43] Update TShockAPI/Commands.cs Co-authored-by: Chris <2648373+QuiCM@users.noreply.github.com> --- TShockAPI/Commands.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index ce0bf192..db92ca85 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1117,11 +1117,10 @@ namespace TShockAPI TShock.Log.ConsoleInfo(args.Player.Name + " changed account " + account.Name + " to group " + args.Parameters[2] + "."); args.Player.SendSuccessMessage("Account " + account.Name + " has been changed to group " + args.Parameters[2] + "!"); - var players = TSPlayer.FindByNameOrID(account.Name); - if (players.Count == 0) - return; - else if (!args.Silent) - players[0].SendSuccessMessage($"{args.Player.Name} has changed your group to {args.Parameters[2]}"); + //send message to player with matching account name + var player = TShock.Players.FirstOrDefault(p => p != null && p.Account?.Name == account.Name) + if (player != null && !args.Silent) + player.SendSuccessMessage($"{args.Player.Name} has changed your group to {args.Parameters[2]}"); } catch (GroupNotExistsException) { From 1d2cc0f7d3bc7f1e0401211113459e06ccd6a957 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 16:45:30 -0400 Subject: [PATCH 16/43] fix minor typo --- TShockAPI/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index db92ca85..86a99e31 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1118,7 +1118,7 @@ namespace TShockAPI args.Player.SendSuccessMessage("Account " + account.Name + " has been changed to group " + args.Parameters[2] + "!"); //send message to player with matching account name - var player = TShock.Players.FirstOrDefault(p => p != null && p.Account?.Name == account.Name) + var player = TShock.Players.FirstOrDefault(p => p != null && p.Account?.Name == account.Name); if (player != null && !args.Silent) player.SendSuccessMessage($"{args.Player.Name} has changed your group to {args.Parameters[2]}"); } From 88080b139c81816db64690a06e51eb952ce5021c Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 16:47:31 -0400 Subject: [PATCH 17/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec3924f4..73e95489 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. ## Upcoming changes -* Added a notification message and silent command support for permanently changing a target player's user group. Now players who received a group change will be notified of their new group if they are currently online. (@moisterrific) +* Added a notification message and silent command support for permanently changing a target player's user group. Now players who received a group change will be notified of their new group if they are currently online. (@moisterrific, @QuiCM) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From c71bcc02b94bfd2f28ffff0b40f262c89c80a731 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Sat, 24 Jul 2021 16:19:59 -0700 Subject: [PATCH 18/43] Update PR template changelog warning --- .github/PULL_REQUEST_TEMPLATE.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4cf87d10..473130c4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,19 +1,3 @@ -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? -?????? HAVE YOU UPDATED THE CHANGELOG? ?????? \ No newline at end of file + From 2a80e22e125c35c6e68426d6c36bfd751ae07df1 Mon Sep 17 00:00:00 2001 From: Killia0 Date: Sat, 24 Jul 2021 19:47:29 -0400 Subject: [PATCH 19/43] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e55df643..8d9e18eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. ## Upcoming changes +* Fix some typos that have been in the repository for over a lustrum. (@Killia0) * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) * Added `/slay` as an alias for `/kill` to be more consistent with other server mods. (@hakusaro) * Added `/god` as an alias for `/godmode` to be more consistent with other server mods. (@hakusaro) From 11463930f38e0da2b59a0762375023fb6d57a20c Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:53:13 -0400 Subject: [PATCH 20/43] Add DisablePrimeBombs to OnProjectileSetDefaults --- TShockAPI/TShock.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 2114b469..92c8c8af 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1627,6 +1627,9 @@ namespace TShockAPI if (e.Info == 109) if (Config.Settings.DisableSnowBalls) e.Object.SetDefaults(0); + if (e.Info == ProjectileID.BombSkeletronPrime) + if (Config.Settings.DisablePrimeBombs) + e.Object.SetDefaults(0); } /// NetHooks_SendData - Fired when the server sends data. From 347a23a8bc65e6e5b53257f8610a9ce884b715d1 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:55:38 -0400 Subject: [PATCH 21/43] Add DisablePrimeBombs to World Settings --- TShockAPI/Configuration/TShockConfig.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TShockAPI/Configuration/TShockConfig.cs b/TShockAPI/Configuration/TShockConfig.cs index 801a4c5f..7fe74884 100644 --- a/TShockAPI/Configuration/TShockConfig.cs +++ b/TShockAPI/Configuration/TShockConfig.cs @@ -156,6 +156,12 @@ namespace TShockAPI.Configuration /// Disables tombstone dropping during death for all players. [Description("Disables tombstone dropping during death for all players.")] public bool DisableTombstones = true; + + /// + /// Disables Skeletron Prime Bombs from spawning, useful for preventing unwanted world destruction on for the worthy seed world. + /// + [Description("Disables Skeletron Prime Bombs from spawning, useful for preventing unwanted world destruction on for the worthy seed world.")] + public bool DisablePrimeBombs; /// Forces the world time to be normal, day, or night. [Description("Forces the world time to be normal, day, or night.")] From adeb7225e6df358153b285f67752b95362d05a96 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:01:21 -0400 Subject: [PATCH 22/43] Add DisablePrimeBombs to Upcoming changes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cba20d9..05f94143 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) +* Added a new `DisablePrimeBombs` config option (`false` by default). Highly recommended to set this to `true` in order to prevent griefing on servers doing a `for the worthy` play-through, since the prime bombs on this seed can destroy most tiles and bypass region protection. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From b5c1640058988d2da036da291c248b5365e1c351 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:08:51 -0400 Subject: [PATCH 23/43] Refactor: use more human-readable ProjectileID --- TShockAPI/TShock.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 92c8c8af..78c13a8d 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1618,13 +1618,13 @@ namespace TShockAPI private void OnProjectileSetDefaults(SetDefaultsEventArgs e) { //tombstone fix. - if (e.Info == 43 || (e.Info >= 201 && e.Info <= 205) || (e.Info >= 527 && e.Info <= 531)) + if (e.Info == ProjectileID.Tombstone || (e.Info >= ProjectileID.GraveMarker && e.Info <= ProjectileID.Obelisk) || (e.Info >= ProjectileID.RichGravestone1 && e.Info <= ProjectileID.RichGravestone5)) if (Config.Settings.DisableTombstones) e.Object.SetDefaults(0); - if (e.Info == 75) + if (e.Info == ProjectileID.HappyBomb) if (Config.Settings.DisableClownBombs) e.Object.SetDefaults(0); - if (e.Info == 109) + if (e.Info == ProjectileID.SnowBallHostile) if (Config.Settings.DisableSnowBalls) e.Object.SetDefaults(0); if (e.Info == ProjectileID.BombSkeletronPrime) From 5bce3b3492ff60526e3575d96444edeb5e35cbfd Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:13:11 -0400 Subject: [PATCH 24/43] Update CHANGELOG.md with suggested change Co-authored-by: Lucas Nicodemus --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ff0dc50..e33eaf01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. ## Upcoming changes -* Improved `/login` related error messages and made the `/register` process more friendly for players new to TShock. (@moisterrific) +* Changed `/login` and `/register` provide login help depending on if UUID login is enabled or disabled, and whether or not a player can login via any username or not. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From bf5ba6e0f8e5e3a5c3ec488d84ed2cd581c44924 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:19:12 -0400 Subject: [PATCH 25/43] Add Lunatic Cultist summon permission check to Upcoming changes --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01cc4b86..2ac697e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) +* Added a `tshock.npc.summonboss` permission check for Lunatic Cultist, players who do not have this permission will not be able to kill Cultist Archers/Devotees to summon the Lunatic Cultist. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) @@ -32,7 +33,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Correct rejection message in LandGolfBallInCupHandler to output the proper expected player id. (@drunderscore) * Clarified the error mesage that the console is presented if a rate-limit is reached over REST to indicate that "tokens" actually refers to rate-limit tokens, and not auth tokens, and added a hint as to what config setting determines this. (@hakusaro, @patsore) * Fixed an issue where, when the console was redirected, input was disabled and commands didn't work, in TSAPI. You can now pass `-disable-commands` to disable the input thread, but by default, it will be enabled. Fixes [#1450](https://github.com/Pryaxis/TShock/issues/1450). (@DeathCradle, @QuiCM) -* Added `summonboss` permission check for Empress of Light and Lunatic Cultist. Players who do not have this permission will be unable to kill Prismatic Lacewings, Cultist Devotees, and Cultist Archers. Also added support for the `AnonymousBossInvasions` config option for summoning Empress of Light, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) +* Added `summonboss` permission check for Empress of Light. Players who do not have this permission will be unable to kill Prismatic Lacewings. Also added support for the `AnonymousBossInvasions` config option, if this is set to `false` it will now broadcast the name of the player who summoned her. (@moisterrific) * Added `ForceTime` config setting check for Enchanted Sundial usage. If `ForceTime` is set to anything other than `normal`, Sundial use will be rejected as this would lead to very janky game behavior. Additionally, players with `cfgreload` permission will be advised to change it back to `normal` in order to use sundial. (@moisterrific, @bartico6) * Added `%onlineplayers%` and `%serverslots%` placeholders for MOTD. The default MOTD message was also updated to use this. (@moisterrific, @bartico6) * Fixed Bouncer inconsistently using `TilePlacementValid` when validating tile coordinates, which could cause a DoS attack due to unexpectedly large world framing. The list below shows the corrected methods within Bouncer. This was assigned [GHSA-jq4j-v8pr-jv7j](https://github.com/Pryaxis/TShock/security/advisories/GHSA-jq4j-v8pr-jv7j). (@drunderscore) From ba8db77823a15ced1875f110798e5077c61e2d43 Mon Sep 17 00:00:00 2001 From: Killia0 Date: Sat, 24 Jul 2021 20:21:07 -0400 Subject: [PATCH 26/43] Fix changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1434d2c4..73eb4121 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,8 +13,10 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. ## Upcoming changes -* Fix some typos that have been in the repository for over a lustrum. (@Killia0) * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) +* Fix some typos that have been in the repository for over a lustrum. (@Killia0) + +## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) * Added `/slay` as an alias for `/kill` to be more consistent with other server mods. (@hakusaro) * Added `/god` as an alias for `/godmode` to be more consistent with other server mods. (@hakusaro) From a40effd55ecd0c53710499dc21eb518111a0fa8a Mon Sep 17 00:00:00 2001 From: James Puleo Date: Tue, 13 Jul 2021 21:49:22 -0400 Subject: [PATCH 27/43] Introduce `SoftcoreOnly` config option to allow only softcore characters to connect. --- CHANGELOG.md | 1 + TShockAPI/Configuration/TShockConfig.cs | 4 ++++ TShockAPI/GetDataHandlers.cs | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cba20d9..3ab34a6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) +* Introduced `SoftcoreOnly` config option to allow only softcore characters to connect. (@drunderscore) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) diff --git a/TShockAPI/Configuration/TShockConfig.cs b/TShockAPI/Configuration/TShockConfig.cs index 801a4c5f..eb28b90b 100644 --- a/TShockAPI/Configuration/TShockConfig.cs +++ b/TShockAPI/Configuration/TShockConfig.cs @@ -133,6 +133,10 @@ namespace TShockAPI.Configuration [Description("Prevents softcore players from connecting.")] public bool MediumcoreOnly; + /// Prevents non-softcore players from connecting. + [Description("Prevents non-softcore players from connecting.")] + public bool SoftcoreOnly; + /// Disables any placing, or removal of blocks. [Description("Disables any placing, or removal of blocks.")] public bool DisableBuild; diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index ed701f2f..ae459289 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2364,6 +2364,12 @@ namespace TShockAPI NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, args.Player.Index, NetworkText.FromLiteral(args.Player.Name), args.Player.Index); return true; } + if (TShock.Config.Settings.SoftcoreOnly && difficulty != 0) + { + TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected softcore required"); + args.Player.Kick("You need to join with a softcore player.", true, true); + return true; + } if (TShock.Config.Settings.MediumcoreOnly && difficulty < 1) { TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected mediumcore required"); From 86b5454854f44409cd872be97227ccaee6874290 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:37:09 -0400 Subject: [PATCH 28/43] Refactor for readability --- TShockAPI/Commands.cs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 280c1cfb..d2659c97 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -807,17 +807,18 @@ namespace TShockAPI } else { - if (TShock.Config.Settings.DisableUUIDLogin && !TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); - else if (TShock.Config.Settings.DisableUUIDLogin && TShock.Config.Settings.AllowLoginAnyUsername) + if (TShock.Config.Settings.DisableUUIDLogin) { - args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); - args.Player.SendErrorMessage($" {Specifier}login - Logs in using your username and password"); + if (TShock.Config.Settings.AllowLoginAnyUsername) + { + args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); + args.Player.SendErrorMessage($" {Specifier}login - Logs in using your username and password"); + } + else + args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); } else - { args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your UUID and character name"); - } args.Player.SendErrorMessage("If you forgot your password, there is no way to recover it."); return; } @@ -999,14 +1000,17 @@ namespace TShockAPI { args.Player.SendSuccessMessage("Account \"{0}\" has been registered.", account.Name); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); - if (TShock.Config.Settings.DisableUUIDLogin && !TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendInfoMessage($"Type {Specifier}login {echoPassword} to sign in to your account."); - else if (TShock.Config.Settings.DisableUUIDLogin && TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendInfoMessage($"Type {Specifier}login \"{account.Name}\" {echoPassword} to sign in to your account."); - else + + if (TShock.Config.Settings.DisableUUIDLogin) { - args.Player.SendInfoMessage($"Type {Specifier}login to sign in to your account."); + if (TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendInfoMessage($"Type {Specifier}login \"{account.Name}\" {echoPassword} to sign in to your account."); + else + args.Player.SendInfoMessage($"Type {Specifier}login {echoPassword} to sign in to your account."); } + else + args.Player.SendSuccessMessage($"Type {Specifier}login to sign in to your account."); + TShock.UserAccounts.AddUserAccount(account); TShock.Log.ConsoleInfo("{0} registered an account: \"{1}\".", args.Player.Name, account.Name); } From 3ba1e7419d63535eeb8b5634ec668448499f71df Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Sat, 24 Jul 2021 17:40:42 -0700 Subject: [PATCH 29/43] Rename game commands region For compliance purposes --- TShockAPI/Commands.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 39ab2cd5..cae1ebf3 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -5518,7 +5518,7 @@ namespace TShockAPI #endregion General Commands - #region Cheat Commands + #region Game Commands private static void Clear(CommandArgs args) { @@ -6472,6 +6472,6 @@ namespace TShockAPI } } - #endregion Cheat Commands + #endregion Game Commands } } From fc2330458e81fb871271b47336a3a6eac5471018 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 22:47:28 -0400 Subject: [PATCH 30/43] Change to independent checks and use colour differentiation --- TShockAPI/Commands.cs | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 8ebea2b9..178c64b7 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -807,19 +807,15 @@ namespace TShockAPI } else { - if (TShock.Config.Settings.DisableUUIDLogin) - { - if (TShock.Config.Settings.AllowLoginAnyUsername) - { - args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); - args.Player.SendErrorMessage($" {Specifier}login - Logs in using your username and password"); - } - else - args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your password and character name"); - } + if (!TShock.Config.Settings.DisableUUIDLogin) + args.Player.SendMessage($"{Specifier}login - Logs in using your UUID and character name.", Color.White); + + if (TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendMessage($"{Specifier}login {"username".Color(Utils.GreenHighlight)} {"password".Color(Utils.BoldHighlight)} - Logs in using your username and password.", Color.White); else - args.Player.SendErrorMessage($"Syntax: {Specifier}login - Logs in using your UUID and character name"); - args.Player.SendErrorMessage("If you forgot your password, there is no way to recover it."); + args.Player.SendMessage($"{Specifier}login {"password".Color(Utils.BoldHighlight)} - Logs in using your password and character name.", Color.White); + + args.Player.SendWarningMessage("If you forgot your password, there is no way to recover it."); return; } try @@ -1001,15 +997,13 @@ namespace TShockAPI args.Player.SendSuccessMessage("Account \"{0}\" has been registered.", account.Name); args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); - if (TShock.Config.Settings.DisableUUIDLogin) - { - if (TShock.Config.Settings.AllowLoginAnyUsername) - args.Player.SendInfoMessage($"Type {Specifier}login \"{account.Name}\" {echoPassword} to sign in to your account."); - else - args.Player.SendInfoMessage($"Type {Specifier}login {echoPassword} to sign in to your account."); - } + if (!TShock.Config.Settings.DisableUUIDLogin) + args.Player.SendMessage($"Type {Specifier}login to sign in to your account.", Color.White); + + if (TShock.Config.Settings.AllowLoginAnyUsername) + args.Player.SendMessage($"Type {Specifier}login \"{account.Name.Color(Utils.GreenHighlight)}\" {echoPassword.Color(Utils.BoldHighlight)} to sign in to your account.", Color.White); else - args.Player.SendSuccessMessage($"Type {Specifier}login to sign in to your account."); + args.Player.SendMessage($"Type {Specifier}login {echoPassword.Color(Utils.BoldHighlight)} to sign in to your account.", Color.White); TShock.UserAccounts.AddUserAccount(account); TShock.Log.ConsoleInfo("{0} registered an account: \"{1}\".", args.Player.Name, account.Name); From ec4b21e78d431c0c13d30691bc7bbd4861420ccb Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 24 Jul 2021 22:51:38 -0400 Subject: [PATCH 31/43] Fix grammar typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27c710e6..5d634545 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) * Fix some typos that have been in the repository for over a lustrum. (@Killia0) -* Changed `/login` and `/register` provide login help depending on if UUID login is enabled or disabled, and whether or not a player can login via any username or not. (@moisterrific) +* Changed `/login` and `/register` to provide login help depending on if UUID login is enabled or disabled, and whether or not a player can login via any username or not. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From 838c03ce3f7f676d4ad8c37c95d91d5f11b840fc Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sun, 25 Jul 2021 15:45:43 -0400 Subject: [PATCH 32/43] Make UUID login help more descriptive Co-authored-by: Lucas Nicodemus --- TShockAPI/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 178c64b7..2633d237 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -998,7 +998,7 @@ namespace TShockAPI args.Player.SendSuccessMessage("Your password is {0}.", echoPassword); if (!TShock.Config.Settings.DisableUUIDLogin) - args.Player.SendMessage($"Type {Specifier}login to sign in to your account.", Color.White); + args.Player.SendMessage($"Type {Specifier}login to sign in to your account using your UUID.", Color.White); if (TShock.Config.Settings.AllowLoginAnyUsername) args.Player.SendMessage($"Type {Specifier}login \"{account.Name.Color(Utils.GreenHighlight)}\" {echoPassword.Color(Utils.BoldHighlight)} to sign in to your account.", Color.White); From 46865d2ad4ba5aa1c7727a34cc75ca632faafece Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sun, 25 Jul 2021 16:10:31 -0400 Subject: [PATCH 33/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d634545..54ef2466 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) * Fix some typos that have been in the repository for over a lustrum. (@Killia0) -* Changed `/login` and `/register` to provide login help depending on if UUID login is enabled or disabled, and whether or not a player can login via any username or not. (@moisterrific) +* Changed `/login` and `/register` to provide login help depending on if UUID login is enabled or disabled, and whether or not a player can login via any username or not. In addition, the message parameters will now be differentiated by colour instead of `<>` (@moisterrific, @hakusaro) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From e1b78fe71f62a0302f75870f2908e1ba9ec527d8 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sun, 25 Jul 2021 22:20:59 -0400 Subject: [PATCH 34/43] Add ban usage examples + minor grammar & visual fixes for ban help Added usage examples for: - banning offline player by account - banning offline player by ip - banning online player by index Added ban help examples after ban help commands and fixed a few minor visual/grammar issues relating to ban help --- TShockAPI/Commands.cs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index cae1ebf3..88f44a27 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1303,7 +1303,7 @@ namespace TShockAPI args.Player.SendMessage($"ban {"list".Color(Utils.RedHighlight)}", Color.White); args.Player.SendMessage($"ban {"details".Color(Utils.RedHighlight)} ", Color.White); args.Player.SendMessage($"Quick usage: {"ban add".Color(Utils.BoldHighlight)} {args.Player.Name.Color(Utils.RedHighlight)} \"Griefing\"", Color.White); - args.Player.SendMessage($"For more info, use {"ban help".Color(Utils.BoldHighlight)} {"command".Color(Utils.RedHighlight)}", Color.White); + args.Player.SendMessage($"For more info, use {"ban help".Color(Utils.BoldHighlight)} {"command".Color(Utils.RedHighlight)} or {"ban help".Color(Utils.BoldHighlight)} {"examples".Color(Utils.RedHighlight)}", Color.White); } void MoreHelp(string cmd) @@ -1327,7 +1327,7 @@ namespace TShockAPI args.Player.SendMessage("", Color.White); args.Player.SendMessage("Ban Del Syntax", Color.White); args.Player.SendMessage($"{"ban del".Color(Utils.BoldHighlight)} <{"Ticket Number".Color(Utils.RedHighlight)}>", Color.White); - args.Player.SendMessage($"- {"Ticket Number".Color(Utils.RedHighlight)}s are provided when you add a ban, and can also be viewed with the {"ban list".Color(Utils.BoldHighlight)} command.", Color.White); + args.Player.SendMessage($"- {"Ticket Numbers".Color(Utils.RedHighlight)} are provided when you add a ban, and can also be viewed with the {"ban list".Color(Utils.BoldHighlight)} command.", Color.White); args.Player.SendMessage($"Example usage: {"ban del".Color(Utils.BoldHighlight)} {"12345".Color(Utils.RedHighlight)}", Color.White); break; @@ -1343,14 +1343,14 @@ namespace TShockAPI args.Player.SendMessage("", Color.White); args.Player.SendMessage("Ban Details Syntax", Color.White); args.Player.SendMessage($"{"ban details".Color(Utils.BoldHighlight)} <{"Ticket Number".Color(Utils.RedHighlight)}>", Color.White); - args.Player.SendMessage($"- {"Ticket Number".Color(Utils.RedHighlight)}s are provided when you add a ban, and can be found with the {"ban list".Color(Utils.BoldHighlight)} command.", Color.White); + args.Player.SendMessage($"- {"Ticket Numbers".Color(Utils.RedHighlight)} are provided when you add a ban, and can be found with the {"ban list".Color(Utils.BoldHighlight)} command.", Color.White); args.Player.SendMessage($"Example usage: {"ban details".Color(Utils.BoldHighlight)} {"12345".Color(Utils.RedHighlight)}", Color.White); break; case "identifiers": if (!PaginationTools.TryParsePageNumber(args.Parameters, 2, args.Player, out int pageNumber)) { - args.Player.SendMessage($"Invalid page number. Page number should be numeric.", Color.White); + args.Player.SendMessage($"Invalid page number. Page number must be numeric.", Color.White); return; } @@ -1368,10 +1368,23 @@ namespace TShockAPI LineTextColor = Color.White }); break; + + case "examples": + args.Player.SendMessage("", Color.White); + args.Player.SendMessage("Ban Usage Examples", Color.White); + args.Player.SendMessage("- Ban an offline player by account name", Color.White); + args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"acc:".Color(Utils.RedHighlight)}{args.Player.Account.Color(Utils.RedHighlight)} {"\"Multiple accounts are not allowed\"".Color(Utils.BoldHighlight)} (Permanently bans this account name)", Color.White); + args.Player.SendMessage("- Ban an offline player by IP address", Color.White); + args.Player.SendMessage($" {Specifier}{"ai".Color(Utils.BoldHighlight)} \"{args.Player.Account.Color(Utils.RedHighlight)}\" (Find the IP associated with the offline target's account)", Color.White); + args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"ip:".Color(Utils.RedHighlight)}{args.Player.IP.Color(Utils.RedHighlight)} {"\"Griefing\"".Color(Utils.BoldHighlight)} {"-e".Color(Utils.GreenHighlight)} (Permanently bans this IP address)", Color.White); + args.Player.SendMessage($"- Ban an online player by index (Useful for hard to type names)", Color.White); + args.Player.SendMessage($" {Specifier}{"who".Color(Utils.BoldHighlight)} {"-i".Color(Utils.GreenHighlight)} (Find the player index for the target)", Color.White); + args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"tsi:".Color(Utils.RedHighlight)}{args.Player.Index.Color(Utils.RedHighlight)} {"\"Trolling\"".Color(Utils.BoldHighlight)} {"-a -u -ip".Color(Utils.GreenHighlight)} (Permanently bans the online player by Account, UUID, and IP)", Color.White); + // Ban by account ID when? + break; default: - args.Player.SendMessage($"Unknown ban command. Try {"add".Color(Utils.RedHighlight)}, {"del".Color(Utils.RedHighlight)}, {"list".Color(Utils.RedHighlight)}, or {"details".Color(Utils.RedHighlight)}.", Color.White); - break; + args.Player.SendMessage($"Unknown ban command. Try {"ban help".Color(Utils.BoldHighlight)} {"add".Color(Utils.RedHighlight)}, {"del".Color(Utils.RedHighlight)}, {"list".Color(Utils.RedHighlight)}, {"details".Color(Utils.RedHighlight)}, {"identifiers".Color(Utils.RedHighlight)}, or {"examples".Color(Utils.RedHighlight)}.", Color.White); break; } } From da9076058567aef1092bf6e6b834c33841194b21 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sun, 25 Jul 2021 22:32:32 -0400 Subject: [PATCH 35/43] Add ban usage examples to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73eb4121..a49e14ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) * Fix some typos that have been in the repository for over a lustrum. (@Killia0) +* Added more usage examples for the `ban` command under `ban help examples` to explain how users can ban: offline players by account, offline players by IP, and online players by player index - useful for banning hard to type character names. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From da8d7d4e7018abb029f2eac683e96d1ec734a135 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Mon, 26 Jul 2021 08:35:30 -0400 Subject: [PATCH 36/43] Add "" for acc:account name https://github.com/Pryaxis/TShock/issues/2382#issuecomment-870062082 --- TShockAPI/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 88f44a27..af1a0693 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1373,7 +1373,7 @@ namespace TShockAPI args.Player.SendMessage("", Color.White); args.Player.SendMessage("Ban Usage Examples", Color.White); args.Player.SendMessage("- Ban an offline player by account name", Color.White); - args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"acc:".Color(Utils.RedHighlight)}{args.Player.Account.Color(Utils.RedHighlight)} {"\"Multiple accounts are not allowed\"".Color(Utils.BoldHighlight)} (Permanently bans this account name)", Color.White); + args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} \"{"acc:".Color(Utils.RedHighlight)}{args.Player.Account.Color(Utils.RedHighlight)}\" {"\"Multiple accounts are not allowed\"".Color(Utils.BoldHighlight)} (Permanently bans this account name)", Color.White); args.Player.SendMessage("- Ban an offline player by IP address", Color.White); args.Player.SendMessage($" {Specifier}{"ai".Color(Utils.BoldHighlight)} \"{args.Player.Account.Color(Utils.RedHighlight)}\" (Find the IP associated with the offline target's account)", Color.White); args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"ip:".Color(Utils.RedHighlight)}{args.Player.IP.Color(Utils.RedHighlight)} {"\"Griefing\"".Color(Utils.BoldHighlight)} {"-e".Color(Utils.GreenHighlight)} (Permanently bans this IP address)", Color.White); From 818e9ce24bb55087a6d750340a633a8265e95d22 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 31 Jul 2021 13:59:24 -0400 Subject: [PATCH 37/43] Add new Respawn command --- TShockAPI/Commands.cs | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index cae1ebf3..501efe0f 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -599,6 +599,10 @@ namespace TShockAPI { HelpText = "Sends all tiles from the server to the player to resync the client with the actual world state." }); + add(new Command(Permissions.respawn, Respawn, "respawn") + { + HelpText = "Respawn yourself or another player." + }); #endregion add(new Command(Aliases, "aliases") @@ -5632,6 +5636,57 @@ namespace TShockAPI plr.SendErrorMessage("{0} just killed you!", args.Player.Name); } } + + private static void Respawn(CommandArgs args) + { + TSPlayer playerToRespawn; + if (args.Parameters.Count > 0) + { + if (!args.Player.HasPermission(Permissions.respawnother)) + { + args.Player.SendErrorMessage("You do not have permission to respawn another player."); + return; + } + string plStr = String.Join(" ", args.Parameters); + var players = TSPlayer.FindByNameOrID(plStr); + if (players.Count == 0) + { + args.Player.SendErrorMessage($"Could not find any player named \"{plStr}\""); + return; + } + else if (players.Count > 1) + { + args.Player.SendMultipleMatchError(players.Select(p => p.Name)); + return; + } + else + playerToRespawn = players[0]; + } + else if (!args.Player.RealPlayer) + { + args.Player.SendErrorMessage("You can't respawn the server console!"); + return; + } + else + playerToRespawn = args.Player; + + if (!playerToRespawn.Dead) + { + args.Player.SendErrorMessage($"{(playerToRespawn == args.Player ? "You" : playerToRespawn.Name)} {(playerToRespawn == args.Player ? "are" : "is")} not dead."); + return; + } + else + playerToRespawn.Spawn(PlayerSpawnContext.ReviveFromDeath); + + if (playerToRespawn != args.Player) + { + args.Player.SendSuccessMessage($"You have respawned {playerToRespawn.Name}"); + if (!args.Silent) + playerToRespawn.SendSuccessMessage($"{args.Player.Name} has respawned you."); + } + else + playerToRespawn.SendSuccessMessage("You have respawned yourself."); + } private static void Butcher(CommandArgs args) { From c1f14367e6b882cc282b66c9d1635b97551f941b Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:01:17 -0400 Subject: [PATCH 38/43] Add respawn and respawnother permissions --- TShockAPI/Permissions.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index 7df1ca83..7de195d2 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -436,6 +436,12 @@ namespace TShockAPI [Description("User can kill others.")] public static readonly string kill = "tshock.kill"; + + [Description("Player can respawn themselves.")] + public static readonly string respawn = "tshock.respawn"; + + [Description("Player can respawn others.")] + public static readonly string respawnother = "tshock.respawn.other"; [Description("Allows you to bypass the max slots for up to 5 slots above your max.")] public static readonly string reservedslot = "tshock.reservedslot"; From f53ba4309390930941df1e8d5b8599860a8e2562 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:05:59 -0400 Subject: [PATCH 39/43] Add respawn command to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73eb4121..031cb686 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Fixed SendTileRectHandler not sending tile rect updates like Pylons/Mannequins to other clients. (@Stealownz) * Fix some typos that have been in the repository for over a lustrum. (@Killia0) +* Added a new `/respawn` command that lets you respawn yourself or another player. Respawning yourself requires the `tshock.respawn` permission and respawning others requires the `tshock.respawn.other` permission. The full command syntax is `/respawn [player]`. (@moisterrific) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro) From aa4b735163ebcb15c33937d4931cb343f71b69a9 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Mon, 2 Aug 2021 11:15:21 -0400 Subject: [PATCH 40/43] Refactor for fail fast approach --- TShockAPI/Commands.cs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index bdce7fb3..f464470f 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -5666,6 +5666,11 @@ namespace TShockAPI private static void Respawn(CommandArgs args) { + if (!args.Player.RealPlayer) + { + args.Player.SendErrorMessage("You can't respawn the server console!"); + return; + } TSPlayer playerToRespawn; if (args.Parameters.Count > 0) { @@ -5681,20 +5686,14 @@ namespace TShockAPI args.Player.SendErrorMessage($"Could not find any player named \"{plStr}\""); return; } - else if (players.Count > 1) + if (players.Count > 1) { args.Player.SendMultipleMatchError(players.Select(p => p.Name)); return; } - else - playerToRespawn = players[0]; + playerToRespawn = players[0]; } - else if (!args.Player.RealPlayer) - { - args.Player.SendErrorMessage("You can't respawn the server console!"); - return; - } - else + else playerToRespawn = args.Player; if (!playerToRespawn.Dead) @@ -5702,8 +5701,7 @@ namespace TShockAPI args.Player.SendErrorMessage($"{(playerToRespawn == args.Player ? "You" : playerToRespawn.Name)} {(playerToRespawn == args.Player ? "are" : "is")} not dead."); return; } - else - playerToRespawn.Spawn(PlayerSpawnContext.ReviveFromDeath); + playerToRespawn.Spawn(PlayerSpawnContext.ReviveFromDeath); if (playerToRespawn != args.Player) { From ecec84ef09d0594b3a4bdd82629aac32b0eac24c Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Thu, 5 Aug 2021 14:09:45 -0400 Subject: [PATCH 41/43] Fix typo in ban usage examples --- TShockAPI/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 3961bf1f..55d281c3 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1396,7 +1396,7 @@ namespace TShockAPI args.Player.SendMessage("", Color.White); args.Player.SendMessage("Ban Usage Examples", Color.White); args.Player.SendMessage("- Ban an offline player by account name", Color.White); - args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} \"{"acc:".Color(Utils.RedHighlight)}{args.Player.Account.Color(Utils.RedHighlight)}\" {"\"Multiple accounts are not allowed\"".Color(Utils.BoldHighlight)} (Permanently bans this account name)", Color.White); + args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} \"{"acc:".Color(Utils.RedHighlight)}{args.Player.Account.Color(Utils.RedHighlight)}\" {"\"Multiple accounts are not allowed\"".Color(Utils.BoldHighlight)} {"-e".Color(Utils.GreenHighlight)} (Permanently bans this account name)", Color.White); args.Player.SendMessage("- Ban an offline player by IP address", Color.White); args.Player.SendMessage($" {Specifier}{"ai".Color(Utils.BoldHighlight)} \"{args.Player.Account.Color(Utils.RedHighlight)}\" (Find the IP associated with the offline target's account)", Color.White); args.Player.SendMessage($" {Specifier}{"ban add".Color(Utils.BoldHighlight)} {"ip:".Color(Utils.RedHighlight)}{args.Player.IP.Color(Utils.RedHighlight)} {"\"Griefing\"".Color(Utils.BoldHighlight)} {"-e".Color(Utils.GreenHighlight)} (Permanently bans this IP address)", Color.White); From ccea7b7d576fac26d7ab878066b34b8ae8e5fa3d Mon Sep 17 00:00:00 2001 From: Armano den Boef <68127614+Rozen4334@users.noreply.github.com> Date: Mon, 9 Aug 2021 01:32:17 +0200 Subject: [PATCH 42/43] Return loopback IP if RealPlayer is false --- TShockAPI/TSPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index afde7cef..ba789eea 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -892,7 +892,7 @@ namespace TShockAPI CacheIP = RealPlayer ? (Netplay.Clients[Index].Socket.IsConnected() ? TShock.Utils.GetRealIP(Netplay.Clients[Index].Socket.GetRemoteAddress().ToString()) : "") - : ""; + : "127.0.0.1"; else return CacheIP; } From 491c3ebb7690b7f013b3be7bf765ae1745c9a604 Mon Sep 17 00:00:00 2001 From: Armano den Boef <68127614+Rozen4334@users.noreply.github.com> Date: Mon, 9 Aug 2021 01:33:11 +0200 Subject: [PATCH 43/43] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9243d03..9e03b4fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Added a new `DisablePrimeBombs` config option (`false` by default). Highly recommended to set this to `true` in order to prevent griefing on servers doing a `for the worthy` play-through, since the prime bombs on this seed can destroy most tiles and bypass region protection. (@moisterrific) * Added a new `/respawn` command that lets you respawn yourself or another player. Respawning yourself requires the `tshock.respawn` permission and respawning others requires the `tshock.respawn.other` permission. The full command syntax is `/respawn [player]`. (@moisterrific) * Added a notification message and silent command support for permanently changing a target player's user group. Now players who received a group change will be notified of their new group if they are currently online. (@moisterrific, @QuiCM) +* Changed the TSPlayer IP method to return the loopback IP if RealPlayer is false. (@Rozen4334) ## TShock 4.5.5 * Changed the world autosave message so that it no longer warns of a "potential lag spike." (@hakusaro)