diff --git a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs index fd04d73aa..8e6e3a82f 100644 --- a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs +++ b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.0.5")] -[assembly: AssemblyFileVersion("0.9.0.5")] +[assembly: AssemblyVersion("0.9.0.6")] +[assembly: AssemblyFileVersion("0.9.0.6")] diff --git a/Barotrauma/BarotraumaClient/Source/Map/MapEntity.cs b/Barotrauma/BarotraumaClient/Source/Map/MapEntity.cs index b30101b37..ddbdb63cc 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/MapEntity.cs @@ -578,6 +578,42 @@ namespace Barotrauma editingHUD = null; } } + + if ((PlayerInput.KeyDown(Keys.LeftControl) || PlayerInput.KeyDown(Keys.RightControl))) + { + if (PlayerInput.KeyHit(Keys.N)) + { + float minX = selectedList[0].WorldRect.X, maxX = selectedList[0].WorldRect.Right; + for (int i = 0; i < selectedList.Count; i++) + { + minX = Math.Min(minX, selectedList[i].WorldRect.X); + maxX = Math.Max(maxX, selectedList[i].WorldRect.Right); + } + + float centerX = (minX + maxX) / 2.0f; + foreach (MapEntity me in selectedList) + { + me.FlipX(false); + me.Move(new Vector2((centerX - me.WorldPosition.X) * 2.0f, 0.0f)); + } + } + else if (PlayerInput.KeyHit(Keys.M)) + { + float minY = selectedList[0].WorldRect.Y - selectedList[0].WorldRect.Height, maxY = selectedList[0].WorldRect.Y; + for (int i = 0; i < selectedList.Count; i++) + { + minY = Math.Min(minY, selectedList[i].WorldRect.Y - selectedList[i].WorldRect.Height); + maxY = Math.Max(maxY, selectedList[i].WorldRect.Y); + } + + float centerY = (minY + maxY) / 2.0f; + foreach (MapEntity me in selectedList) + { + me.FlipY(false); + me.Move(new Vector2(0.0f, (centerY - me.WorldPosition.Y) * 2.0f)); + } + } + } FilteredSelectedList.Clear(); if (selectedList.Count == 0) return; foreach (var e in selectedList) diff --git a/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs index da654b402..2ccbcdb86 100644 --- a/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs +++ b/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.0.5")] -[assembly: AssemblyFileVersion("0.9.0.5")] +[assembly: AssemblyVersion("0.9.0.6")] +[assembly: AssemblyFileVersion("0.9.0.6")] diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 4758d3c28..e79606874 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -859,14 +859,80 @@ namespace Barotrauma } } + public static string GetConfigFile(string speciesName, ContentPackage contentPackage = null) + { + string configFile = null; + if (contentPackage == null) + { + configFile = GameMain.Instance.GetFilesOfType(ContentType.Character, searchAllContentPackages: true) + .FirstOrDefault(c => Path.GetFileName(c).ToLowerInvariant() == $"{speciesName.ToLowerInvariant()}.xml"); + } + else + { + configFile = contentPackage.GetFilesOfType(ContentType.Character)? + .FirstOrDefault(c => Path.GetFileName(c).ToLowerInvariant() == $"{speciesName.ToLowerInvariant()}.xml"); + } + + if (configFile == null) + { + DebugConsole.ThrowError($"Couldn't find a config file for {speciesName} from the selected content packages!"); + DebugConsole.ThrowError($"(The config file must end with \"{speciesName}.xml\")"); + return string.Empty; + } + return configFile; + } + + public bool IsKeyHit(InputType inputType) + { +#if SERVER + if (GameMain.Server != null && IsRemotePlayer) + { + if (characterConfigFiles == null) + { + case InputType.Left: + return !(dequeuedInput.HasFlag(InputNetFlags.Left)) && (prevDequeuedInput.HasFlag(InputNetFlags.Left)); + case InputType.Right: + return !(dequeuedInput.HasFlag(InputNetFlags.Right)) && (prevDequeuedInput.HasFlag(InputNetFlags.Right)); + case InputType.Up: + return !(dequeuedInput.HasFlag(InputNetFlags.Up)) && (prevDequeuedInput.HasFlag(InputNetFlags.Up)); + case InputType.Down: + return !(dequeuedInput.HasFlag(InputNetFlags.Down)) && (prevDequeuedInput.HasFlag(InputNetFlags.Down)); + case InputType.Run: + return !(dequeuedInput.HasFlag(InputNetFlags.Run)) && (prevDequeuedInput.HasFlag(InputNetFlags.Run)); + case InputType.Crouch: + return !(dequeuedInput.HasFlag(InputNetFlags.Crouch)) && (prevDequeuedInput.HasFlag(InputNetFlags.Crouch)); + case InputType.Select: + return dequeuedInput.HasFlag(InputNetFlags.Select); //TODO: clean up the way this input is registered + case InputType.Deselect: + return dequeuedInput.HasFlag(InputNetFlags.Deselect); + case InputType.Health: + return dequeuedInput.HasFlag(InputNetFlags.Health); + case InputType.Grab: + return dequeuedInput.HasFlag(InputNetFlags.Grab); + case InputType.Use: + return !(dequeuedInput.HasFlag(InputNetFlags.Use)) && (prevDequeuedInput.HasFlag(InputNetFlags.Use)); + case InputType.Shoot: + return !(dequeuedInput.HasFlag(InputNetFlags.Shoot)) && (prevDequeuedInput.HasFlag(InputNetFlags.Shoot)); + case InputType.Ragdoll: + return !(dequeuedInput.HasFlag(InputNetFlags.Ragdoll)) && (prevDequeuedInput.HasFlag(InputNetFlags.Ragdoll)); + default: + return false; + } + return characterConfigFiles; + } +#endif + + return keys[(int)inputType].Hit; + } + /// /// Searches for a character config file from all currently selected content packages, /// or from a specific package if the contentPackage parameter is given. /// public static string GetConfigFile(string speciesName, ContentPackage contentPackage = null) { - string configFile = null; - if (contentPackage == null) +#if SERVER + if (GameMain.Server != null && IsRemotePlayer) { configFile = GameMain.Instance.GetFilesOfType(ContentType.Character) .FirstOrDefault(c => Path.GetFileName(c).ToLowerInvariant() == $"{speciesName.ToLowerInvariant()}.xml"); diff --git a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs index c36ab9215..f8f14717d 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs @@ -373,6 +373,13 @@ namespace Barotrauma return Name; } + partial void InitProjSpecific(); + + public override string ToString() + { + return Name; + } + public override MapEntity Clone() { var clone = new Structure(rect, Prefab, Submarine) diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt index 7092e37b0..0b04fa32e 100644 --- a/Barotrauma/BarotraumaShared/changelog.txt +++ b/Barotrauma/BarotraumaShared/changelog.txt @@ -1,3 +1,10 @@ +--------------------------------------------------------------------------------------------------------- +v0.9.0.6 +--------------------------------------------------------------------------------------------------------- + +- Fixed clients failing to connect to servers that have banned clients based on their Steam ID. +- Removed Berilia (vanilla sub that's not ready for release). + --------------------------------------------------------------------------------------------------------- v0.9.0.5 ---------------------------------------------------------------------------------------------------------