diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index dbc603bb5..b45fedcb0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -1506,6 +1506,17 @@ namespace Barotrauma ToolBox.OpenFileWithShell(Path.GetFullPath(filePath)); })); #if DEBUG + commands.Add(new Command("querylobbies", "Queries all SteamP2P lobbies", (args) => + { + Steamworks.Data.LobbyQuery lobbyQuery = Steamworks.SteamMatchmaking.CreateLobbyQuery().FilterDistanceWorldwide(); + + Steamworks.Data.Lobby[] lobbies = lobbyQuery.RequestAsync().Result; + foreach (var lobby in lobbies) + { + DebugConsole.NewMessage(lobby.GetData("name") + ", " + lobby.GetData("lobbyowner")); + } + })); + commands.Add(new Command("checkduplicates", "Checks the given language for duplicate translation keys and writes to file.", (string[] args) => { if (args.Length != 1) return; @@ -2264,6 +2275,18 @@ namespace Barotrauma DebugConsole.NewMessage("Cannot pause when a multiplayer session is active."); } })); + + AssignOnClientExecute("showseed|showlevelseed", (string[] args) => + { + if (Level.Loaded == null) + { + ThrowError("No level loaded."); + } + else + { + NewMessage("Level seed: " + Level.Loaded.Seed); + } + }); } private static void ReloadWearables(Character character, int variant = 0) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs index 30539f8e3..67bd9cefe 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs @@ -279,6 +279,28 @@ namespace Barotrauma ScreenOverlayColor, true); } +#if UNSTABLE + string line1 = "Barotrauma Unstable v" + GameMain.Version; + string line2 = "(" + AssemblyInfo.GetBuildString() + ", branch " + AssemblyInfo.GetGitBranch() + ", revision " + AssemblyInfo.GetGitRevision() + ")"; + + Style.GetComponentStyle("OuterGlow").Sprites[GUIComponent.ComponentState.None][0].Draw( + spriteBatch, new Rectangle(-50, GameMain.GraphicsHeight - 80, 50 + (int)(Math.Max(LargeFont.MeasureString(line1).X, Font.MeasureString(line2).X) * 1.2f), 100), Color.Black * 0.8f); + LargeFont.DrawString(spriteBatch, line1, + new Vector2(10, GameMain.GraphicsHeight - 30 - LargeFont.MeasureString(line1).Y), Color.White * 0.6f); + Font.DrawString(spriteBatch, line2, + new Vector2(10, GameMain.GraphicsHeight - 30), Color.White * 0.6f); + + if (Screen.Selected != GameMain.GameScreen) + { + var buttonRect = + new Rectangle(20 + (int)Math.Max(LargeFont.MeasureString(line1).X, Font.MeasureString(line2).X), GameMain.GraphicsHeight - (int)(45 * Scale), (int)(150 * Scale), (int)(40 * Scale)); + if (DrawButton(spriteBatch, buttonRect, "Report Bug", Style.GetComponentStyle("GUIBugButton").Color * 0.8f)) + { + GameMain.Instance.ShowBugReporter(); + } + } +#endif + if (DisableHUD) { return; } if (GameMain.ShowFPS || GameMain.DebugDraw) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index a16cc6a7b..c3343cea0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -1026,11 +1026,17 @@ namespace Barotrauma public void ShowBugReporter() { + if (GUIMessageBox.VisibleBox != null && GUIMessageBox.VisibleBox.UserData as string == "bugreporter") + { + return; + } + var msgBox = new GUIMessageBox(TextManager.Get("bugreportbutton"), ""); msgBox.UserData = "bugreporter"; var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.025f }; linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height); +#if !UNSTABLE new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), linkHolder.RectTransform), TextManager.Get("bugreportfeedbackform"), style: "MainMenuGUIButton", textAlignment: Alignment.Left) { UserData = "https://steamcommunity.com/app/602960/discussions/1/", @@ -1041,10 +1047,15 @@ namespace Barotrauma return true; } }; +#endif new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), linkHolder.RectTransform), TextManager.Get("bugreportgithubform"), style: "MainMenuGUIButton", textAlignment: Alignment.Left) { +#if UNSTABLE + UserData = "https://barotraumagame.com/unstable-3rf3w5t4ter/", +#else UserData = "https://github.com/Regalis11/Barotrauma/issues/new?template=bug_report.md", +#endif OnClicked = (btn, userdata) => { ShowOpenUrlInWebBrowserPrompt(userdata as string); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs index 30b9eaa5f..5017a5598 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs @@ -56,17 +56,30 @@ namespace Barotrauma.Tutorials radioSpeakerName = TextManager.Get("Tutorial.Radio.Watchman"); GameMain.GameSession.CrewManager.AllowCharacterSwitch = false; - var revolver = captain.Inventory.FindItemByIdentifier("revolver"); + var revolver = FindOrGiveItem(captain, "revolver"); revolver.Unequip(captain); captain.Inventory.RemoveItem(revolver); - var captainscap = captain.Inventory.FindItemByIdentifier("captainscap"); - captainscap.Unequip(captain); - captain.Inventory.RemoveItem(captainscap); + var captainscap = + captain.Inventory.FindItemByIdentifier("captainscap1") ?? + captain.Inventory.FindItemByIdentifier("captainscap2") ?? + captain.Inventory.FindItemByIdentifier("captainscap3"); - var captainsuniform = captain.Inventory.FindItemByIdentifier("captainsuniform"); - captainsuniform.Unequip(captain); - captain.Inventory.RemoveItem(captainsuniform); + if (captainscap != null) + { + captainscap.Unequip(captain); + captain.Inventory.RemoveItem(captainscap); + } + + var captainsuniform = + captain.Inventory.FindItemByIdentifier("captainsuniform1") ?? + captain.Inventory.FindItemByIdentifier("captainsuniform2") ?? + captain.Inventory.FindItemByIdentifier("captainsuniform3"); + if (captainsuniform != null) + { + captainsuniform.Unequip(captain); + captain.Inventory.RemoveItem(captainsuniform); + } var steerOrder = Order.GetPrefab("steer"); captain_steerIcon = steerOrder.SymbolSprite; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs index 50806c412..cc1f812f9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs @@ -87,7 +87,7 @@ namespace Barotrauma.Tutorials radioSpeakerName = TextManager.Get("Tutorial.Radio.Speaker"); engineer = Character.Controlled; - var toolbox = engineer.Inventory.FindItemByIdentifier("toolbox"); + var toolbox = FindOrGiveItem(engineer, "toolbox"); toolbox.Unequip(engineer); engineer.Inventory.RemoveItem(toolbox); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs index 8389962dc..0579bcafd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs @@ -87,11 +87,11 @@ namespace Barotrauma.Tutorials radioSpeakerName = TextManager.Get("Tutorial.Radio.Speaker"); mechanic = Character.Controlled; - var toolbox = mechanic.Inventory.FindItemByIdentifier("toolbox"); + var toolbox = FindOrGiveItem(mechanic, "toolbox"); toolbox.Unequip(mechanic); mechanic.Inventory.RemoveItem(toolbox); - var crowbar = mechanic.Inventory.FindItemByIdentifier("crowbar"); + var crowbar = FindOrGiveItem(mechanic, "crowbar"); crowbar.Unequip(mechanic); mechanic.Inventory.RemoveItem(crowbar); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs index 7416c15bb..e48462988 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs @@ -89,19 +89,19 @@ namespace Barotrauma.Tutorials radioSpeakerName = TextManager.Get("Tutorial.Radio.Speaker"); officer = Character.Controlled; - var handcuffs = officer.Inventory.FindItemByIdentifier("handcuffs"); + var handcuffs = FindOrGiveItem(officer, "handcuffs"); handcuffs.Unequip(officer); officer.Inventory.RemoveItem(handcuffs); - var stunbaton = officer.Inventory.FindItemByIdentifier("stunbaton"); + var stunbaton = FindOrGiveItem(officer, "stunbaton"); stunbaton.Unequip(officer); officer.Inventory.RemoveItem(stunbaton); - var ballistichelmet = officer.Inventory.FindItemByIdentifier("ballistichelmet"); + var ballistichelmet = FindOrGiveItem(officer, "ballistichelmet"); ballistichelmet.Unequip(officer); officer.Inventory.RemoveItem(ballistichelmet); - var bodyarmor = officer.Inventory.FindItemByIdentifier("bodyarmor"); + var bodyarmor = FindOrGiveItem(officer, "bodyarmor"); bodyarmor.Unequip(officer); officer.Inventory.RemoveItem(bodyarmor); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs index 04d6d3d8c..9a8ac64fc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs @@ -298,5 +298,16 @@ namespace Barotrauma.Tutorials character.Bloodloss = 0.0f; character.SetStun(0.0f, true); } + + protected Item FindOrGiveItem(Character character, string identifier) + { + var item = character.Inventory.FindItemByIdentifier(identifier); + if (item != null) { return item; } + + ItemPrefab itemPrefab = MapEntityPrefab.Find(name: null, identifier: identifier) as ItemPrefab; + item = new Item(itemPrefab, Vector2.Zero, submarine: null); + character.Inventory.TryPutItem(item, character); + return item; + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs index beb62bb9c..a8c75e533 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Submarine.cs @@ -417,7 +417,7 @@ namespace Barotrauma } // show what game version the submarine was created on - if (!IsVanillaSubmarine()) + if (!IsVanillaSubmarine() && GameVersion != null) { var versionText = new GUITextBlock(new RectTransform(new Vector2(leftPanelWidth, 0), descriptionBox.Content.RectTransform), TextManager.Get("serverlistversion"), textAlignment: Alignment.TopLeft, font: font, wrap: true) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index af51c9b71..a01ff2f96 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -1071,6 +1071,7 @@ namespace Barotrauma.Networking { if (Character != null) Character.Remove(); HasSpawned = false; + eventErrorWritten = false; while (CoroutineManager.IsCoroutineRunning("EndGame")) { @@ -2670,6 +2671,48 @@ namespace Barotrauma.Networking break; } clientPeer.Send(outMsg, DeliveryMethod.Reliable); + + if (!eventErrorWritten) + { + WriteEventErrorData(error, expectedID, eventID, entityID); + eventErrorWritten = true; + } + } + + private bool eventErrorWritten; + private void WriteEventErrorData(ClientNetError error, UInt16 expectedID, UInt16 eventID, UInt16 entityID) + { + List errorLines = new List + { + error.ToString(), "" + }; + + if (IsServerOwner) + { + errorLines.Add("SERVER OWNER"); + } + + if (error == ClientNetError.MISSING_EVENT) + { + errorLines.Add("Expected ID: " + expectedID + ", received " + eventID); + } + else if (error == ClientNetError.MISSING_ENTITY) + { + errorLines.Add("Event ID: " + eventID + ", entity ID " + entityID); + } + + errorLines.Add("Entity IDs:"); + List sortedEntities = Entity.GetEntityList(); + sortedEntities.Sort((e1, e2) => e1.ID.CompareTo(e2.ID)); + foreach (Entity e in sortedEntities) + { + errorLines.Add(e.ID + ": " + e.ToString()); + } + + string filePath = "event_error_log_client_" + Name + "_" + ToolBox.RemoveInvalidFileNameChars(DateTime.UtcNow.ToShortTimeString() + ".log"); + filePath = Path.Combine(ServerLog.SavePath, filePath); + + File.WriteAllLines(filePath, errorLines); } #if DEBUG diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs index 16cf425f5..ad02f1747 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs @@ -15,6 +15,7 @@ namespace Barotrauma.Networking public string Port; public string QueryPort; + public Steamworks.Data.PingLocation? PingLocation; public UInt64 LobbyID; public UInt64 OwnerID; public bool OwnerVerified; @@ -500,18 +501,19 @@ namespace Barotrauma.Networking bool.TryParse(lobby.GetData("haspassword"), out bool hasPassword); int.TryParse(lobby.GetData("playercount"), out int currPlayers); int.TryParse(lobby.GetData("maxplayernum"), out int maxPlayers); - //UInt64.TryParse(lobby.GetData("connectsteamid"), out ulong connectSteamId); - string ip = lobby.GetData("hostipaddress"); UInt64 ownerId = SteamManager.SteamIDStringToUInt64(lobby.GetData("lobbyowner")); if (OwnerID != ownerId) { return; } - if (string.IsNullOrWhiteSpace(ip)) { ip = ""; } - ServerName = lobby.GetData("name"); + IP = ""; Port = ""; QueryPort = ""; - IP = ip; + string pingLocation = lobby.GetData("pinglocation"); + if (!string.IsNullOrEmpty(pingLocation)) + { + PingLocation = Steamworks.Data.PingLocation.TryParseFromString(pingLocation); + } PlayerCount = currPlayers; MaxPlayers = maxPlayers; HasPassword = hasPassword; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs index e94ed1f8a..7a94431c4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs @@ -110,43 +110,40 @@ namespace Barotrauma.Steam { get { return currentLobby?.Id ?? 0; } } - private static Task lobbyCreationTask; - private static Task lobbyJoinTask; public static void CreateLobby(ServerSettings serverSettings) { - Steamworks.SteamMatchmaking.ResetActions(); - Steamworks.SteamMatchmaking.OnLobbyCreated += (result, lobby) => - { - currentLobby = lobby; - - if (result != Steamworks.Result.OK) - { - DebugConsole.ThrowError("Failed to create Steam lobby: "+result.ToString()); - lobbyState = LobbyState.NotConnected; - return; - } - - DebugConsole.NewMessage("Lobby created!", Microsoft.Xna.Framework.Color.Lime); - - lobbyState = LobbyState.Owner; - lobbyID = lobby.Id; - - if (serverSettings.isPublic) - { - lobby.SetPublic(); - } - else - { - lobby.SetFriendsOnly(); - } - lobby.SetJoinable(true); - - UpdateLobby(serverSettings); - }; if (lobbyState != LobbyState.NotConnected) { return; } lobbyState = LobbyState.Creating; - lobbyCreationTask = Steamworks.SteamMatchmaking.CreateLobbyAsync(serverSettings.MaxPlayers+10); + TaskPool.Add(Steamworks.SteamMatchmaking.CreateLobbyAsync(serverSettings.MaxPlayers + 10), + (lobby) => + { + if (currentLobby == null) + { + DebugConsole.ThrowError("Failed to create Steam lobby"); + lobbyState = LobbyState.NotConnected; + return; + } + + currentLobby = lobby.Result; + + DebugConsole.NewMessage("Lobby created!", Microsoft.Xna.Framework.Color.Lime); + + lobbyState = LobbyState.Owner; + lobbyID = (currentLobby?.Id).Value; + + if (serverSettings.isPublic) + { + currentLobby?.SetPublic(); + } + else + { + currentLobby?.SetFriendsOnly(); + } + currentLobby?.SetJoinable(true); + + UpdateLobby(serverSettings); + }); } public static void UpdateLobby(ServerSettings serverSettings) @@ -169,10 +166,11 @@ namespace Barotrauma.Steam var contentPackages = GameMain.Config.SelectedContentPackages.Where(cp => cp.HasMultiplayerIncompatibleContent); currentLobby?.SetData("name", serverSettings.ServerName); - currentLobby?.SetData("owner", SteamIDUInt64ToString(GetSteamID())); - currentLobby?.SetData("playercount", (GameMain.Client?.ConnectedClients?.Count??0).ToString()); + currentLobby?.SetData("playercount", (GameMain.Client?.ConnectedClients?.Count ?? 0).ToString()); currentLobby?.SetData("maxplayernum", serverSettings.MaxPlayers.ToString()); - //lobby?..CurrentLobbyData.SetData("connectsteamid", Steam.SteamManager.GetSteamID().ToString()); + //currentLobby?.SetData("hostipaddress", lobbyIP); + currentLobby?.SetData("pinglocation", Steamworks.SteamNetworkingUtils.LocalPingLocation.ToString() ?? ""); + currentLobby?.SetData("lobbyowner", SteamIDUInt64ToString(GetSteamID())); currentLobby?.SetData("haspassword", serverSettings.HasPassword.ToString()); currentLobby?.SetData("message", serverSettings.ServerMessageText); @@ -187,9 +185,12 @@ namespace Barotrauma.Steam currentLobby?.SetData("voicechatenabled", serverSettings.VoiceChatEnabled.ToString()); currentLobby?.SetData("allowspectating", serverSettings.AllowSpectating.ToString()); currentLobby?.SetData("allowrespawn", serverSettings.AllowRespawn.ToString()); + currentLobby?.SetData("karmaenabled", serverSettings.KarmaEnabled.ToString()); + currentLobby?.SetData("friendlyfireenabled", serverSettings.AllowFriendlyFire.ToString()); currentLobby?.SetData("traitors", serverSettings.TraitorsEnabled.ToString()); currentLobby?.SetData("gamestarted", GameMain.Client.GameStarted.ToString()); - currentLobby?.SetData("gamemode", GameMain.NetLobbyScreen?.SelectedMode?.Identifier??""); + currentLobby?.SetData("playstyle", serverSettings.PlayStyle.ToString()); + currentLobby?.SetData("gamemode", GameMain.NetLobbyScreen?.SelectedMode?.Identifier ?? ""); DebugConsole.Log("Lobby updated!"); } @@ -208,30 +209,22 @@ namespace Barotrauma.Steam { if (currentLobby.HasValue && currentLobby.Value.Id == id) { return; } if (lobbyID == id) { return; } - Steamworks.SteamMatchmaking.ResetActions(); - Steamworks.SteamMatchmaking.OnLobbyEntered += (lobby) => - { - try - { - currentLobby = lobby; - lobbyState = LobbyState.Joined; - lobbyID = lobby.Id; - if (joinServer) - { - GameMain.Instance.ConnectLobby = 0; - GameMain.Instance.ConnectName = lobby.GetData("servername"); - GameMain.Instance.ConnectEndpoint = SteamIDUInt64ToString(lobby.Owner.Id.Value); - } - } - finally - { - Steamworks.SteamMatchmaking.ResetActions(); - } - }; lobbyState = LobbyState.Joining; lobbyID = id; - lobbyJoinTask = Steamworks.SteamMatchmaking.JoinLobbyAsync(lobbyID); + TaskPool.Add(Steamworks.SteamMatchmaking.JoinLobbyAsync(lobbyID), + (lobby) => + { + currentLobby = lobby.Result; + lobbyState = LobbyState.Joined; + lobbyID = (currentLobby?.Id).Value; + if (joinServer) + { + GameMain.Instance.ConnectLobby = 0; + GameMain.Instance.ConnectName = currentLobby?.GetData("servername"); + GameMain.Instance.ConnectEndpoint = SteamIDUInt64ToString((currentLobby?.Owner.Id).Value); + } + }); } public static bool GetServers(Action addToServerList, Action serverQueryFinished) @@ -362,10 +355,13 @@ namespace Barotrauma.Steam serverInfo.AllowSpectating = getLobbyBool("allowspectating"); serverInfo.AllowRespawn = getLobbyBool("allowrespawn"); serverInfo.VoipEnabled = getLobbyBool("voicechatenabled"); + serverInfo.KarmaEnabled = getLobbyBool("karmaenabled"); + serverInfo.FriendlyFireEnabled = getLobbyBool("friendlyfireenabled"); if (Enum.TryParse(lobby.GetData("traitors"), out YesNoMaybe traitorsEnabled)) { serverInfo.TraitorsEnabled = traitorsEnabled; } serverInfo.GameStarted = lobby.GetData("gamestarted") == "True"; serverInfo.GameMode = lobby.GetData("gamemode"); + if (Enum.TryParse(lobby.GetData("playstyle"), out PlayStyle playStyle)) serverInfo.PlayStyle = playStyle; if (serverInfo.ContentPackageNames.Count != serverInfo.ContentPackageHashes.Count || serverInfo.ContentPackageHashes.Count != serverInfo.ContentPackageWorkshopUrls.Count) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs index dc6657ef3..32dc33e84 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI.cs @@ -351,7 +351,16 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - System.Diagnostics.Process.Start(SaveUtil.SaveFolder); + try + { + ToolBox.OpenFileWithShell(SaveUtil.SaveFolder); + } + catch (Exception e) + { + new GUIMessageBox( + TextManager.Get("error"), + TextManager.GetWithVariables("showinfoldererror", new string[] { "[folder]", "[errormessage]" }, new string[] { SaveUtil.SaveFolder, e.Message })); + } return true; } }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index 2151c5165..8f08d7a4e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -312,23 +312,9 @@ namespace Barotrauma } }; #endif - var minButtonSize = new Point(120, 20); var maxButtonSize = new Point(480, 80); - /*new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonsParent.RectTransform), TextManager.Get("TutorialButton"), style: "GUIButtonLarge") - { - UserData = Tab.Tutorials, - OnClicked = SelectTab, - Enabled = false - };*/ - - /* var buttons = GUI.CreateButtons(9, new Vector2(1, 0.04f), buttonsParent.RectTransform, anchor: Anchor.BottomLeft, - minSize: minButtonSize, maxSize: maxButtonSize, relativeSpacing: 0.005f, extraSpacing: i => i % 2 == 0 ? 20 : 0); - buttons.ForEach(b => b.Color *= 0.8f); - SetupButtons(buttons); - buttons.ForEach(b => b.TextBlock.SetTextPos());*/ - var relativeSize = new Vector2(0.6f, 0.65f); var minSize = new Point(600, 400); var maxSize = new Point(2000, 1500); @@ -491,7 +477,7 @@ namespace Barotrauma if (GameMain.Config.ShowTutorialSkipWarning) { selectedTab = 0; - ShowTutorialSkipWarning(selectedTab); + ShowTutorialSkipWarning(Tab.NewGame); return true; } if (!GameMain.Config.CampaignDisclaimerShown) @@ -516,7 +502,7 @@ namespace Barotrauma if (GameMain.Config.ShowTutorialSkipWarning) { selectedTab = 0; - ShowTutorialSkipWarning(tab); + ShowTutorialSkipWarning(Tab.JoinServer); return true; } if (!GameMain.Config.CampaignDisclaimerShown) @@ -955,8 +941,9 @@ namespace Barotrauma GUI.Draw(Cam, spriteBatch); +#if !UNSTABLE GUI.Font.DrawString(spriteBatch, "Barotrauma v" + GameMain.Version + " (" + AssemblyInfo.GetBuildString() + ", branch " + AssemblyInfo.GetGitBranch() + ", revision " + AssemblyInfo.GetGitRevision() + ")", new Vector2(10, GameMain.GraphicsHeight - 20), Color.White * 0.7f); - +#endif if (selectedTab != Tab.Credits) { Vector2 textPos = new Vector2(GameMain.GraphicsWidth - 10, GameMain.GraphicsHeight - 10); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs index cdcaa0282..b2c1099f0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs @@ -949,28 +949,37 @@ namespace Barotrauma Version.TryParse(serverInfo.GameVersion, out remoteVersion); } - bool incompatible = - (!serverInfo.ContentPackageHashes.Any() && serverInfo.ContentPackagesMatch(GameMain.Config.SelectedContentPackages)) || - (remoteVersion != null && !NetworkMember.IsCompatible(GameMain.Version, remoteVersion)); + //never show newer versions + //(ignore revision number, it doesn't affect compatibility) + if (remoteVersion != null && + (remoteVersion.Major > GameMain.Version.Major || remoteVersion.Minor > GameMain.Version.Minor || remoteVersion.Build > GameMain.Version.Build)) + { + child.Visible = false; + } + else + { + bool incompatible = + (!serverInfo.ContentPackageHashes.Any() && serverInfo.ContentPackagesMatch(GameMain.Config.SelectedContentPackages)) || + (remoteVersion != null && !NetworkMember.IsCompatible(GameMain.Version, remoteVersion)); - child.Visible = - serverInfo.OwnerVerified && - serverInfo.ServerName.ToLowerInvariant().Contains(searchBox.Text.ToLowerInvariant()) && - (!filterSameVersion.Selected || (remoteVersion != null && NetworkMember.IsCompatible(remoteVersion, GameMain.Version))) && - (!filterPassword.Selected || !serverInfo.HasPassword) && - (!filterIncompatible.Selected || !incompatible) && - (!filterFull.Selected || serverInfo.PlayerCount < serverInfo.MaxPlayers) && - (!filterEmpty.Selected || serverInfo.PlayerCount > 0) && - (!filterWhitelisted.Selected || serverInfo.UsingWhiteList == true) && - (!filterKarma.Selected || serverInfo.KarmaEnabled == true) && - (!filterFriendlyFire.Selected || serverInfo.FriendlyFireEnabled == false) && - (!filterTraitor.Selected || serverInfo.TraitorsEnabled == YesNoMaybe.Yes || serverInfo.TraitorsEnabled == YesNoMaybe.Maybe) && - (!filterVoip.Selected || serverInfo.VoipEnabled == false) && - (!filterModded.Selected || serverInfo.GetPlayStyleTags().Any(t => t.Contains("modded.true"))) && - ((selectedTab == ServerListTab.All && (serverInfo.LobbyID != 0 || !string.IsNullOrWhiteSpace(serverInfo.Port))) || - (selectedTab == ServerListTab.Recent && serverInfo.Recent) || - (selectedTab == ServerListTab.Favorites && serverInfo.Favorite)) && - (remoteVersion != null && remoteVersion <= GameMain.Version); + child.Visible = + serverInfo.OwnerVerified && + serverInfo.ServerName.ToLowerInvariant().Contains(searchBox.Text.ToLowerInvariant()) && + (!filterSameVersion.Selected || (remoteVersion != null && NetworkMember.IsCompatible(remoteVersion, GameMain.Version))) && + (!filterPassword.Selected || !serverInfo.HasPassword) && + (!filterIncompatible.Selected || !incompatible) && + (!filterFull.Selected || serverInfo.PlayerCount < serverInfo.MaxPlayers) && + (!filterEmpty.Selected || serverInfo.PlayerCount > 0) && + (!filterWhitelisted.Selected || serverInfo.UsingWhiteList == true) && + (!filterKarma.Selected || serverInfo.KarmaEnabled == true) && + (!filterFriendlyFire.Selected || serverInfo.FriendlyFireEnabled == false) && + (!filterTraitor.Selected || serverInfo.TraitorsEnabled == YesNoMaybe.Yes || serverInfo.TraitorsEnabled == YesNoMaybe.Maybe) && + (!filterVoip.Selected || serverInfo.VoipEnabled == false) && + (!filterModded.Selected || serverInfo.GetPlayStyleTags().Any(t => t.Contains("modded.true"))) && + ((selectedTab == ServerListTab.All && (serverInfo.LobbyID != 0 || !string.IsNullOrWhiteSpace(serverInfo.Port))) || + (selectedTab == ServerListTab.Recent && serverInfo.Recent) || + (selectedTab == ServerListTab.Favorites && serverInfo.Favorite)); + } foreach (GUITickBox tickBox in playStyleTickBoxes) { @@ -1673,6 +1682,14 @@ namespace Barotrauma DebugConsole.ThrowError("Ping is null", ex); } } + else if (serverInfo.PingLocation != null) + { + Steamworks.Data.PingLocation pingLocation = serverInfo.PingLocation.Value; + serverInfo.Ping = Steamworks.SteamNetworkingUtils.LocalPingLocation?.EstimatePingTo(pingLocation) ?? -1; + serverInfo.PingChecked = true; + serverPingText.TextColor = GetPingTextColor(serverInfo.Ping); + serverPingText.Text = serverInfo.Ping > -1 ? serverInfo.Ping.ToString() : "?"; + } if (serverInfo.LobbyID == 0 && (string.IsNullOrWhiteSpace(serverInfo.IP) || string.IsNullOrWhiteSpace(serverInfo.Port))) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs index e6ae805b4..bc56d6ebf 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs @@ -278,13 +278,13 @@ namespace Barotrauma { //filter out the items published by the player (they're shown in the publish tab) var mySteamID = SteamManager.GetSteamID(); - OnItemsReceived(items.Where(it => it.Owner.Id != mySteamID).ToList(), subscribedItemList); + OnItemsReceived(GetVisibleItems(items.Where(it => it.Owner.Id != mySteamID)), subscribedItemList); }); } private void RefreshPopularItems() { - SteamManager.GetPopularWorkshopItems((items) => { OnItemsReceived(items, topItemList); }, 20); + SteamManager.GetPopularWorkshopItems((items) => { OnItemsReceived(GetVisibleItems(items), topItemList); }, 20); } private void RefreshPublishedItems() @@ -293,6 +293,17 @@ namespace Barotrauma RefreshMyItemList(); } + private IEnumerable GetVisibleItems(IEnumerable items) + { +#if UNSTABLE + //show everything in Unstable + return items; +#else + //hide Unstable items in normal version + return items.Where(it => !it.HasTag("unstable")); +#endif + } + private void RefreshMyItemList() { myItemList.ClearChildren(); @@ -341,7 +352,7 @@ namespace Barotrauma } } - private void OnItemsReceived(IList itemDetails, GUIListBox listBox) + private void OnItemsReceived(IEnumerable itemDetails, GUIListBox listBox) { CrossThread.RequestExecutionOnMainThread(() => { @@ -351,7 +362,7 @@ namespace Barotrauma CreateWorkshopItemFrame(item, listBox); } - if (itemDetails.Count == 0 && listBox == subscribedItemList) + if (itemDetails.Count() == 0 && listBox == subscribedItemList) { new GUITextBlock(new RectTransform(new Vector2(0.9f, 0.9f), listBox.Content.RectTransform, Anchor.Center), TextManager.Get("NoSubscribedMods"), wrap: true) { @@ -1530,11 +1541,30 @@ namespace Barotrauma private void PublishWorkshopItem() { - if (itemContentPackage == null || itemEditor == null) return; - + if (itemContentPackage == null || itemEditor == null) { return; } + +#if UNSTABLE + var msgBox = new GUIMessageBox(TextManager.Get("warning"), TextManager.Get("unstableworkshopitempublishwarning"), + new string[] { TextManager.Get("Yes"), TextManager.Get("No") }); + msgBox.Buttons[0].OnClicked = (btn, userdata) => + { + var workshopPublishStatus = SteamManager.StartPublishItem(itemContentPackage, itemEditor); + if (workshopPublishStatus != null) + { + if (!itemEditor.Value.Tags.Contains("unstable")) { itemEditor.Value.Tags.Add("unstable"); } + CoroutineManager.StartCoroutine(WaitForPublish(workshopPublishStatus), "WaitForPublish"); + } + msgBox.Close(); + return true; + }; + msgBox.Buttons[1].OnClicked += msgBox.Close; +#else var workshopPublishStatus = SteamManager.StartPublishItem(itemContentPackage, itemEditor); if (workshopPublishStatus == null) { return; } + if (itemEditor.Value.Tags.Contains("unstable")) { itemEditor.Value.Tags.Remove("unstable"); } CoroutineManager.StartCoroutine(WaitForPublish(workshopPublishStatus), "WaitForPublish"); +#endif + } private IEnumerable WaitForPublish(SteamManager.WorkshopPublishStatus workshopPublishStatus) @@ -1591,7 +1621,7 @@ namespace Barotrauma SelectTab(Tab.Browse); } - #region UI management +#region UI management public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch) { @@ -1613,6 +1643,6 @@ namespace Barotrauma { } - #endregion +#endregion } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs index 8b9cc129b..41574aa96 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs @@ -353,6 +353,19 @@ namespace Barotrauma.Sounds private uint[] unqueuedBuffers; private float[] streamBufferAmplitudes; + public int StreamSeekPos + { + get { return streamSeekPos; } + set + { + if (!IsStream) + { + throw new InvalidOperationException("Cannot set StreamSeekPos on a non-streaming sound channel."); + } + streamSeekPos = Math.Max(value, 0); + } + } + private object mutex; public bool IsPlaying diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs index 6e612f21d..51ccff9aa 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs @@ -39,6 +39,9 @@ namespace Barotrauma public readonly Vector2 IntensityRange; + public readonly bool ContinueFromPreviousTime; + public int PreviousTime; + public readonly XElement Element; public BackgroundMusic(XElement element) @@ -47,6 +50,7 @@ namespace Barotrauma this.Type = element.GetAttributeString("type", "").ToLowerInvariant(); this.IntensityRange = element.GetAttributeVector2("intensityrange", new Vector2(0.0f, 100.0f)); this.DuckVolume = element.GetAttributeBool("duckvolume", false); + this.ContinueFromPreviousTime = element.GetAttributeBool("continuefromprevioustime", false); this.Element = element; } } @@ -681,6 +685,10 @@ namespace Barotrauma DisposeMusicChannel(i); currentMusic[i] = GameMain.SoundManager.LoadSound(targetMusic[i].File, true); musicChannel[i] = currentMusic[i].Play(0.0f, "music"); + if (targetMusic[i].ContinueFromPreviousTime) + { + musicChannel[i].StreamSeekPos = targetMusic[i].PreviousTime; + } musicChannel[i].Looping = true; } } @@ -705,6 +713,12 @@ namespace Barotrauma private static void DisposeMusicChannel(int index) { + var clip = musicClips.Find(m => m.File == musicChannel[index]?.Sound?.Filename); + if (clip != null) + { + if (clip.ContinueFromPreviousTime) { clip.PreviousTime = musicChannel[index].StreamSeekPos; } + } + musicChannel[index]?.Dispose(); musicChannel[index] = null; currentMusic[index]?.Dispose(); currentMusic[index] = null; } diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 45eea90f1..1b41990d6 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -6,11 +6,12 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma ..\BarotraumaShared\Icon.ico + Debug;Release;Unstable @@ -31,12 +32,24 @@ ..\bin\$(Configuration)Linux\ + + TRACE;CLIENT;LINUX;USE_STEAM;UNSTABLE + x64 + ..\bin\$(Configuration)Linux\ + + TRACE;CLIENT;LINUX;X64;USE_STEAM x64 ..\bin\$(Configuration)Linux\ + + TRACE;CLIENT;LINUX;X64;USE_STEAM;UNSTABLE + x64 + ..\bin\$(Configuration)Linux\ + + @@ -79,16 +92,26 @@ Icon.bmp - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -110,12 +133,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index ffd3d6a99..e996a62a4 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -6,12 +6,13 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma ..\BarotraumaShared\Icon.ico 0.9.0.0 + Debug;Release;Unstable @@ -33,12 +34,25 @@ ..\bin\$(Configuration)Mac + + TRACE;CLIENT;OSX;USE_STEAM;RELEASE;NETCOREAPP;NETCOREAPP3_0;UNSTABLE + x64 + + ..\bin\$(Configuration)Mac + + TRACE;CLIENT;OSX;X64;USE_STEAM x64 ..\bin\$(Configuration)Mac\ + + TRACE;CLIENT;OSX;X64;USE_STEAM;UNSTABLE + x64 + ..\bin\$(Configuration)Mac\ + + @@ -81,14 +95,14 @@ - - - - - - - - + + + + + + + + @@ -121,12 +135,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index 93471db0f..5169849cc 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -6,11 +6,12 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma ..\BarotraumaShared\Icon.ico + Debug;Release;Unstable @@ -31,12 +32,24 @@ ..\bin\$(Configuration)Windows\ + + TRACE;CLIENT;WINDOWS;USE_STEAM + x64 + ..\bin\$(Configuration)Windows\ + + TRACE;CLIENT;WINDOWS;X64;USE_STEAM x64 ..\bin\$(Configuration)Windows\ + + TRACE;CLIENT;WINDOWS;X64;USE_STEAM + x64 + ..\bin\$(Configuration)Windows\ + + @@ -75,16 +88,26 @@ PreserveNewest - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -96,6 +119,33 @@ + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + @@ -106,12 +156,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaServer/LinuxServer.csproj b/Barotrauma/BarotraumaServer/LinuxServer.csproj index a83b2bf4a..e63ef050e 100644 --- a/Barotrauma/BarotraumaServer/LinuxServer.csproj +++ b/Barotrauma/BarotraumaServer/LinuxServer.csproj @@ -6,11 +6,12 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer ..\BarotraumaShared\Icon.ico + Debug;Release;Unstable @@ -31,24 +32,43 @@ ..\bin\$(Configuration)Linux\ + + TRACE;SERVER;LINUX;USE_STEAM + x64 + ..\bin\$(Configuration)Linux\ + + TRACE;SERVER;LINUX;X64;USE_STEAM x64 ..\bin\$(Configuration)Linux\ + + TRACE;SERVER;LINUX;X64;USE_STEAM + x64 + ..\bin\$(Configuration)Linux\ + + - - - - - - + + + + + + + + + + + + + @@ -61,12 +81,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index cef313853..a44b2b5fd 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -6,12 +6,13 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer ..\BarotraumaShared\Icon.ico 0.9.0.0 + Debug;Release;Unstable @@ -35,12 +36,25 @@ ..\bin\ReleaseMac + + TRACE;SERVER;OSX;USE_STEAM;RELEASE;NETCOREAPP;NETCOREAPP3_0;UNSTABLE + x64 + + ..\bin\ReleaseMac + + TRACE;SERVER;OSX;X64;USE_STEAM x64 ..\bin\$(Configuration)Mac\ + + TRACE;SERVER;OSX;X64;USE_STEAM;UNSTABLE + x64 + ..\bin\$(Configuration)Mac\ + + @@ -49,12 +63,19 @@ - - - - - - + + + + + + + + + + + + + @@ -73,12 +94,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index bae1f50cb..80ce75d4f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -742,6 +742,15 @@ namespace Barotrauma.Networking Log(c.Name + " has reported an error: " + errorStr, ServerLog.MessageType.Error); GameAnalyticsManager.AddErrorEventOnce("GameServer.HandleClientError:" + errorStr, GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorStr); + try + { + WriteEventErrorData(c, errorStr); + } + catch (Exception e) + { + DebugConsole.ThrowError("Failed to write event error data", e); + } + if (c.Connection == OwnerConnection) { SendDirectChatMessage(errorStr, c, ChatMessageType.MessageBox); @@ -751,6 +760,44 @@ namespace Barotrauma.Networking { KickClient(c, errorStr); } + + } + + private void WriteEventErrorData(Client client, string errorStr) + { + string filePath = "event_error_log_server_" + client.Name + "_" + ToolBox.RemoveInvalidFileNameChars(DateTime.UtcNow.ToShortTimeString() + ".log"); + filePath = Path.Combine(ServerLog.SavePath, filePath); + if (File.Exists(filePath)) { return; } + + List errorLines = new List + { + errorStr, "" + }; + + errorLines.Add("Entity IDs:"); + List sortedEntities = Entity.GetEntityList(); + sortedEntities.Sort((e1, e2) => e1.ID.CompareTo(e2.ID)); + foreach (Entity e in sortedEntities) + { + errorLines.Add(e.ID + ": " + e.ToString()); + } + + errorLines.Add(""); + errorLines.Add("EntitySpawner events:"); + foreach (var entityEvent in entityEventManager.UniqueEvents) + { + if (entityEvent.Entity is EntitySpawner) + { + var spawnData = entityEvent.Data[0] as EntitySpawner.SpawnOrRemove; + errorLines.Add( + entityEvent.ID + ": " + + (spawnData.Remove ? "Remove " : "Create ") + + spawnData.Entity.ToString() + + " (" + spawnData.OriginalID + ", " + spawnData.Entity.ID + ")"); + } + } + + File.WriteAllLines(filePath, errorLines); } public override void CreateEntityEvent(INetSerializable entity, object[] extraData = null) diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index 35ea64165..78ef122eb 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -6,11 +6,12 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.9.7.0 - Copyright © FakeFish 2018-2019 + 0.9.700.0 + Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer ..\BarotraumaShared\Icon.ico + Debug;Release;Unstable @@ -31,24 +32,44 @@ ..\bin\$(Configuration)Windows\ + + TRACE;SERVER;WINDOWS;USE_STEAM + x64 + ..\bin\$(Configuration)Windows\ + + TRACE;SERVER;WINDOWS;X64;USE_STEAM x64 ..\bin\$(Configuration)Windows\ + + TRACE;SERVER;WINDOWS;X64;USE_STEAM + x64 + ..\bin\$(Configuration)Windows\ + + - - - - - - + + + + + + + + + + + + + + @@ -61,12 +82,12 @@ - + - - + + diff --git a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml index 1442f3933..fce51ea89 100644 --- a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml +++ b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml @@ -78,17 +78,19 @@ - - - + + - - + + + + + diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs index 650aace86..75fd533bc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs @@ -1233,14 +1233,14 @@ namespace Barotrauma LatchOntoAI?.DeattachFromBody(); Character.AnimController.ReleaseStuckLimbs(); + if (attacker == null || attacker.AiTarget == null) { return; } + if (State == AIState.Flee) { SelectTarget(attacker.AiTarget); return; } - if (attacker == null || attacker.AiTarget == null) { return; } - if (attackResult.Damage > 0.0f && Character.Params.AI.AttackWhenProvoked) { if (attacker.Submarine == Character.Submarine && canAttackCharacters || diff --git a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs index 7a0455489..3cb4cfa99 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs @@ -1370,7 +1370,7 @@ namespace Barotrauma if (human) { - var variant = Rand.Range(0, job.Variants, Rand.RandSync.Server); + var variant = job != null ? Rand.Range(0, job.Variants, Rand.RandSync.Server) : 0; CharacterInfo characterInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: job, variant: variant); spawnedCharacter = Character.Create(characterInfo, spawnPosition, ToolBox.RandomSeed(8)); if (job != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs index 55ff92395..fd114b2d4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs @@ -2,9 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Barotrauma.Extensions; -using System.Linq; namespace Barotrauma { @@ -71,6 +69,7 @@ namespace Barotrauma for (int i = 0; i < prefabsWithContainer.Count; i++) { var itemPrefab = prefabsWithContainer[i]; + if (itemPrefab == null) { continue; } if (SpawnItems(itemPrefab)) { removals.Add(itemPrefab); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs index 5e72af69c..18ed1b3e6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs @@ -341,7 +341,7 @@ namespace Barotrauma.Items.Components //ignore sensors and items if (fixture?.Body == null || fixture.IsSensor) { return -1; } - if (fixture.Body.UserData is Item) { return -1; } + if (fixture.Body.UserData is Item item && item.GetComponent() == null) { return -1; } if (fixture.Body?.UserData as string == "ruinroom") { return -1; } //ignore everything else than characters, sub walls and level walls diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs index c36e76de3..15460c917 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs @@ -546,6 +546,8 @@ namespace Barotrauma private void HandleLimbCollision(Impact collision, Limb limb) { + if (limb?.body?.FarseerBody == null || limb.character == null) { return; } + if (limb.Mass > MinImpactLimbMass) { Vector2 normal = @@ -565,18 +567,18 @@ namespace Barotrauma //find all contacts between the limb and level walls List levelContacts = new List(); ContactEdge contactEdge = limb.body.FarseerBody.ContactList; - while (contactEdge != null) + while (contactEdge?.Contact != null) { if (contactEdge.Contact.Enabled && - contactEdge.Other.UserData is VoronoiCell && - contactEdge.Contact.IsTouching) + contactEdge.Contact.IsTouching && + contactEdge.Other?.UserData is VoronoiCell) { levelContacts.Add(contactEdge.Contact); } contactEdge = contactEdge.Next; } - if (levelContacts.Count == 0) return; + if (levelContacts.Count == 0) { return; } //if the limb is in contact with the level, apply an artifical impact to prevent the sub from bouncing on top of it //not a very realistic way to handle the collisions (makes it seem as if the characters were made of reinforced concrete), diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs index bd0ae7fc9..8a87b93cc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs @@ -59,10 +59,10 @@ namespace Barotrauma.Networking { shutDown = true; readCancellationToken?.Cancel(); - readCancellationToken?.Dispose(); - readCancellationToken = null; readThread?.Join(); readThread = null; writeThread?.Join(); writeThread = null; + readCancellationToken?.Dispose(); + readCancellationToken = null; readStream?.Dispose(); readStream = null; writeStream?.Dispose(); writeStream = null; } @@ -71,11 +71,11 @@ namespace Barotrauma.Networking { while (!shutDown) { - Task readTask = readStream.ReadAsync(tempBytes, 0, tempBytes.Length, readCancellationToken.Token); + Task readTask = readStream?.ReadAsync(tempBytes, 0, tempBytes.Length, readCancellationToken.Token); TimeSpan ts = TimeSpan.FromMilliseconds(15000); - if (!readTask.Wait(ts)) + if (readTask == null || !readTask.Wait(ts)) { - readCancellationToken.Cancel(); + readCancellationToken?.Cancel(); shutDown = true; return; } @@ -142,8 +142,8 @@ namespace Barotrauma.Networking byte[] lengthBytes = new byte[2]; lengthBytes[0] = (byte)(msg.Length & 0xFF); lengthBytes[1] = (byte)((msg.Length >> 8) & 0xFF); - writeStream.Write(lengthBytes, 0, 2); - writeStream.Write(msg, 0, msg.Length); + writeStream?.Write(lengthBytes, 0, 2); + writeStream?.Write(msg, 0, msg.Length); if (shutDown) { break; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs index 4d642e749..1cac0fe43 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEvent.cs @@ -29,7 +29,11 @@ namespace Barotrauma.Networking //arbitrary extra data that will be passed to the Write method of the serializable entity //(the index of an itemcomponent for example) - protected object[] Data; + public object[] Data + { + get; + private set; + } public bool Sent; diff --git a/Barotrauma/BarotraumaShared/Submarines/Berilia.sub b/Barotrauma/BarotraumaShared/Submarines/Berilia.sub index 4b1660c9c..59b97e680 100644 Binary files a/Barotrauma/BarotraumaShared/Submarines/Berilia.sub and b/Barotrauma/BarotraumaShared/Submarines/Berilia.sub differ diff --git a/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub b/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub index 89923de30..18795ce2a 100644 Binary files a/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub and b/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub differ diff --git a/Barotrauma/BarotraumaShared/Submarines/Typhon2.sub b/Barotrauma/BarotraumaShared/Submarines/Typhon2.sub new file mode 100644 index 000000000..427c7085a Binary files /dev/null and b/Barotrauma/BarotraumaShared/Submarines/Typhon2.sub differ diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt index 97227da6b..1ba1ebc2b 100644 --- a/Barotrauma/BarotraumaShared/changelog.txt +++ b/Barotrauma/BarotraumaShared/changelog.txt @@ -1,3 +1,24 @@ +--------------------------------------------------------------------------------------------------------- +v0.9.7000 (Unstable) +--------------------------------------------------------------------------------------------------------- + +- Additional logging to diagnose event/entity ID errors: server and clients write a log file with a bunch of debug information the error happens. The files can be found in the ServerLogs folder after the error has occurred. If you get log files, please send them to us to help us diagnose these bugs! + +- Fixed "skip tutorials" returning to the main menu instead of opening the correct tab when starting a new game. +- Fixed crashing when an enemy takes damage from something else than a character. +- Fixed clients disconnecting if a sub with no version number (or a sub the client hasn't received yet) is selected. +- Fixed crash when spawning a human without specified job through the console. +- Fixed several bugs that were causing crashes due to race conditions in the server list. +- Made "showseed" console command usable by clients. +- Fixed accordion collider. +- Fixed doors not blocking hitscan weapons. +- Continue playing the main menu and editor musics from previous position instead of restarting when switching between screens. +- Added missing sonar display background to sonar monitor. +- Fuel rods now always return their steel on deconstruction. +- Constructing fuel rods now requires lead. +- Added an improved version of Typhon. +- Reworked Berilia. + --------------------------------------------------------------------------------------------------------- v0.9.7.0 --------------------------------------------------------------------------------------------------------- diff --git a/Deploy/Linux/DeployLinuxUnstable.sh b/Deploy/Linux/DeployLinuxUnstable.sh new file mode 100644 index 000000000..7362f9057 --- /dev/null +++ b/Deploy/Linux/DeployLinuxUnstable.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish LinuxClient.csproj -c Unstable --self-contained -r linux-x64 \/p:Platform="x64" + +cd .. +cd BarotraumaServer +dotnet publish LinuxServer.csproj -c Unstable --self-contained -r linux-x64 \/p:Platform="x64" diff --git a/Deploy/Linux/DeployMacUnstable.sh b/Deploy/Linux/DeployMacUnstable.sh new file mode 100644 index 000000000..683ad7973 --- /dev/null +++ b/Deploy/Linux/DeployMacUnstable.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish MacClient.csproj -c Unstable --self-contained -r osx-x64 \/p:Platform="x64" + +cd .. +cd BarotraumaServer +dotnet publish MacServer.csproj -c Unstable --self-contained -r osx-x64 \/p:Platform="x64" diff --git a/Deploy/Linux/DeployWindowsUnstable.sh b/Deploy/Linux/DeployWindowsUnstable.sh new file mode 100644 index 000000000..e37eb630c --- /dev/null +++ b/Deploy/Linux/DeployWindowsUnstable.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish WindowsClient.csproj -c Unstable --self-contained -r win-x64 \/p:Platform="x64" + +cd .. +cd BarotraumaServer +dotnet publish WindowsServer.csproj -c Unstable --self-contained -r win-x64 \/p:Platform="x64" diff --git a/Deploy/Windows/DeployLinuxUnstable.bat b/Deploy/Windows/DeployLinuxUnstable.bat new file mode 100644 index 000000000..eb3279e76 --- /dev/null +++ b/Deploy/Windows/DeployLinuxUnstable.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish LinuxClient.csproj -c Unstable --self-contained -r linux-x64 /p:Platform=x64 + +cd .. +cd BarotraumaServer +dotnet publish LinuxServer.csproj -c Unstable --self-contained -r linux-x64 /p:Platform=x64 + +PAUSE diff --git a/Deploy/Windows/DeployMacUnstable.bat b/Deploy/Windows/DeployMacUnstable.bat new file mode 100644 index 000000000..321211736 --- /dev/null +++ b/Deploy/Windows/DeployMacUnstable.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish MacClient.csproj -c Unstable --self-contained -r osx-x64 /p:Platform=x64 + +cd .. +cd BarotraumaServer +dotnet publish MacServer.csproj -c Unstable --self-contained -r osx-x64 /p:Platform=x64 + +PAUSE diff --git a/Deploy/Windows/DeployWindowsUnstable.bat b/Deploy/Windows/DeployWindowsUnstable.bat new file mode 100644 index 000000000..99847a16c --- /dev/null +++ b/Deploy/Windows/DeployWindowsUnstable.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +cd ../../Barotrauma + +cd BarotraumaClient +dotnet publish WindowsClient.csproj -c Unstable --self-contained -r win-x64 /p:Platform=x64 + +cd .. +cd BarotraumaServer +dotnet publish WindowsServer.csproj -c Unstable --self-contained -r win-x64 /p:Platform=x64 + +PAUSE diff --git a/Libraries/Facepunch.Steamworks/Utility/Helpers.cs b/Libraries/Facepunch.Steamworks/Utility/Helpers.cs index 549ea068d..3d1ea74c0 100644 --- a/Libraries/Facepunch.Steamworks/Utility/Helpers.cs +++ b/Libraries/Facepunch.Steamworks/Utility/Helpers.cs @@ -40,33 +40,41 @@ namespace Steamworks private static byte[][] BufferPool; private static int BufferPoolIndex; + private static object BufferMutex = new object(); /// /// Returns a buffer. This will get returned and reused later on. /// public static byte[] TakeBuffer( int minSize ) { - if ( BufferPool == null ) + int bufferPoolIndex; + lock (BufferMutex) { - // - // The pool has 8 items. - // - BufferPool = new byte[8][]; + if (BufferPool == null) + { + // + // The pool has 8 items. + // + BufferPool = new byte[8][]; - for ( int i = 0; i < BufferPool.Length; i++ ) - BufferPool[i] = new byte[ 1024 * 128 ]; + for (int i = 0; i < BufferPool.Length; i++) + BufferPool[i] = new byte[1024 * 128]; + } + + BufferPoolIndex++; + + if (BufferPoolIndex < 0 || BufferPoolIndex >= BufferPool.Length) + BufferPoolIndex = 0; + + bufferPoolIndex = BufferPoolIndex; } - BufferPoolIndex++; - if ( BufferPoolIndex >= BufferPool.Length ) - BufferPoolIndex = 0; - - if ( BufferPool[BufferPoolIndex].Length < minSize ) + if ( BufferPool[bufferPoolIndex].Length < minSize ) { - BufferPool[BufferPoolIndex] = new byte[minSize + 1024]; + BufferPool[bufferPoolIndex] = new byte[minSize + 1024]; } - return BufferPool[BufferPoolIndex]; + return BufferPool[bufferPoolIndex]; } internal unsafe static string MemoryToString( IntPtr ptr ) diff --git a/LinuxSolution.sln b/LinuxSolution.sln index bcc92f101..6f55edc64 100644 --- a/LinuxSolution.sln +++ b/LinuxSolution.sln @@ -45,6 +45,8 @@ Global Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 + Unstable|Any CPU = Unstable|Any CPU + Unstable|x64 = Unstable|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -55,6 +57,10 @@ Global {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Release|Any CPU.Build.0 = Release|Any CPU {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Release|x64.ActiveCfg = Release|x64 {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Release|x64.Build.0 = Release|x64 + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|Any CPU.Build.0 = Release|Any CPU + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|x64.ActiveCfg = Unstable|x64 + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|x64.Build.0 = Unstable|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Debug|Any CPU.Build.0 = Debug|Any CPU {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Debug|x64.ActiveCfg = Debug|x64 @@ -63,6 +69,10 @@ Global {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Release|Any CPU.Build.0 = Release|Any CPU {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Release|x64.ActiveCfg = Release|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Release|x64.Build.0 = Release|x64 + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|Any CPU.Build.0 = Release|Any CPU + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|x64.ActiveCfg = Unstable|x64 + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|x64.Build.0 = Unstable|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Debug|Any CPU.Build.0 = Debug|Any CPU {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Debug|x64.ActiveCfg = Debug|x64 @@ -71,6 +81,10 @@ Global {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Release|Any CPU.Build.0 = Release|Any CPU {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Release|x64.ActiveCfg = Release|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Release|x64.Build.0 = Release|x64 + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|Any CPU.Build.0 = Release|Any CPU + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|x64.ActiveCfg = Unstable|x64 + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|x64.Build.0 = Unstable|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Debug|x64.ActiveCfg = Debug|x64 @@ -79,6 +93,10 @@ Global {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Release|Any CPU.Build.0 = Release|Any CPU {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Release|x64.ActiveCfg = Release|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Release|x64.Build.0 = Release|x64 + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|Any CPU.Build.0 = Release|Any CPU + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|x64.ActiveCfg = Unstable|x64 + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|x64.Build.0 = Unstable|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Debug|x64.ActiveCfg = Debug|x64 @@ -87,6 +105,10 @@ Global {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Release|Any CPU.Build.0 = Release|Any CPU {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Release|x64.ActiveCfg = Release|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Release|x64.Build.0 = Release|x64 + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|Any CPU.Build.0 = Release|Any CPU + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|x64.ActiveCfg = Unstable|x64 + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|x64.Build.0 = Unstable|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Debug|Any CPU.Build.0 = Debug|Any CPU {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Debug|x64.ActiveCfg = Debug|x64 @@ -95,6 +117,10 @@ Global {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Release|Any CPU.Build.0 = Release|Any CPU {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Release|x64.ActiveCfg = Release|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Release|x64.Build.0 = Release|x64 + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|Any CPU.Build.0 = Release|Any CPU + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|x64.ActiveCfg = Unstable|x64 + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|x64.Build.0 = Unstable|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Debug|Any CPU.Build.0 = Debug|Any CPU {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Debug|x64.ActiveCfg = Debug|x64 @@ -103,6 +129,10 @@ Global {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Release|Any CPU.Build.0 = Release|Any CPU {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Release|x64.ActiveCfg = Release|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Release|x64.Build.0 = Release|x64 + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|Any CPU.Build.0 = Release|Any CPU + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|x64.ActiveCfg = Unstable|x64 + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|x64.Build.0 = Unstable|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6911872D-40EF-400C-B0A1-9985A19ED488}.Debug|Any CPU.Build.0 = Debug|Any CPU {6911872D-40EF-400C-B0A1-9985A19ED488}.Debug|x64.ActiveCfg = Debug|x64 @@ -111,6 +141,10 @@ Global {6911872D-40EF-400C-B0A1-9985A19ED488}.Release|Any CPU.Build.0 = Release|Any CPU {6911872D-40EF-400C-B0A1-9985A19ED488}.Release|x64.ActiveCfg = Release|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Release|x64.Build.0 = Release|x64 + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|Any CPU.Build.0 = Release|Any CPU + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|x64.ActiveCfg = Unstable|x64 + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|x64.Build.0 = Unstable|x64 {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Debug|Any CPU.Build.0 = Debug|Any CPU {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Debug|x64.ActiveCfg = Debug|x64 @@ -119,6 +153,10 @@ Global {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Release|Any CPU.Build.0 = Release|Any CPU {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Release|x64.ActiveCfg = Release|x64 {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Release|x64.Build.0 = Release|x64 + {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Unstable|Any CPU.ActiveCfg = Unstable|Any CPU + {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Unstable|Any CPU.Build.0 = Unstable|Any CPU + {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Unstable|x64.ActiveCfg = Unstable|x64 + {D47E4AAA-C3E5-4F0D-B7FF-D3B54966DE51}.Unstable|x64.Build.0 = Unstable|x64 {2B0881F6-9C67-4446-A1F2-FC042763A462}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2B0881F6-9C67-4446-A1F2-FC042763A462}.Debug|Any CPU.Build.0 = Debug|Any CPU {2B0881F6-9C67-4446-A1F2-FC042763A462}.Debug|x64.ActiveCfg = Debug|x64 @@ -127,6 +165,10 @@ Global {2B0881F6-9C67-4446-A1F2-FC042763A462}.Release|Any CPU.Build.0 = Release|Any CPU {2B0881F6-9C67-4446-A1F2-FC042763A462}.Release|x64.ActiveCfg = Release|x64 {2B0881F6-9C67-4446-A1F2-FC042763A462}.Release|x64.Build.0 = Release|x64 + {2B0881F6-9C67-4446-A1F2-FC042763A462}.Unstable|Any CPU.ActiveCfg = Unstable|Any CPU + {2B0881F6-9C67-4446-A1F2-FC042763A462}.Unstable|Any CPU.Build.0 = Unstable|Any CPU + {2B0881F6-9C67-4446-A1F2-FC042763A462}.Unstable|x64.ActiveCfg = Unstable|x64 + {2B0881F6-9C67-4446-A1F2-FC042763A462}.Unstable|x64.Build.0 = Unstable|x64 {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Debug|Any CPU.Build.0 = Debug|Any CPU {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Debug|x64.ActiveCfg = Debug|x64 @@ -135,6 +177,10 @@ Global {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Release|Any CPU.Build.0 = Release|Any CPU {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Release|x64.ActiveCfg = Release|x64 {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Release|x64.Build.0 = Release|x64 + {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Unstable|Any CPU.Build.0 = Release|Any CPU + {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Unstable|x64.ActiveCfg = Unstable|x64 + {33E95A21-E071-4432-819F-AA64CF3EF3F1}.Unstable|x64.Build.0 = Unstable|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MacSolution.sln b/MacSolution.sln index bfcf089a8..174867661 100644 --- a/MacSolution.sln +++ b/MacSolution.sln @@ -12,29 +12,29 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Barotrauma", "Barotrauma", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{DE36F45F-F09E-4719-B953-00D148F7722A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GA_SDK_NETSTANDARD", "Libraries\GameAnalytics\GA_SDK_NETSTANDARD\GA_SDK_NETSTANDARD.csproj", "{C54F0DFE-ADD3-4767-8CBC-101859218D66}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GA_SDK_NETSTANDARD", "Libraries\GameAnalytics\GA_SDK_NETSTANDARD\GA_SDK_NETSTANDARD.csproj", "{C54F0DFE-ADD3-4767-8CBC-101859218D66}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Farseer.NetStandard", "Libraries\Farseer Physics Engine 3.5\Farseer.NetStandard.csproj", "{6D65C294-C636-4D57-9826-10CA13A87C95}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Farseer.NetStandard", "Libraries\Farseer Physics Engine 3.5\Farseer.NetStandard.csproj", "{6D65C294-C636-4D57-9826-10CA13A87C95}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.NetStandard", "Libraries\Lidgren.Network\Lidgren.NetStandard.csproj", "{DB1F46B3-7C84-4F36-9580-B288B400A1FE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lidgren.NetStandard", "Libraries\Lidgren.Network\Lidgren.NetStandard.csproj", "{DB1F46B3-7C84-4F36-9580-B288B400A1FE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Concentus.NetStandard", "Libraries\Concentus\CSharp\Concentus\Concentus.NetStandard.csproj", "{249A3B8A-03ED-400B-856D-0D4537A8B4C8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Concentus.NetStandard", "Libraries\Concentus\CSharp\Concentus\Concentus.NetStandard.csproj", "{249A3B8A-03ED-400B-856D-0D4537A8B4C8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hyper.ComponentModel.NetStandard", "Libraries\Hyper.ComponentModel\Hyper.ComponentModel.NetStandard.csproj", "{E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyper.ComponentModel.NetStandard", "Libraries\Hyper.ComponentModel\Hyper.ComponentModel.NetStandard.csproj", "{E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XNATypes", "Libraries\XNATypes\XNATypes.csproj", "{F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XNATypes", "Libraries\XNATypes\XNATypes.csproj", "{F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpFont.NetStandard", "Libraries\SharpFont\Source\SharpFont\SharpFont.NetStandard.csproj", "{EF96144B-3DE6-4C8C-9670-C73C838D9F96}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpFont.NetStandard", "Libraries\SharpFont\Source\SharpFont\SharpFont.NetStandard.csproj", "{EF96144B-3DE6-4C8C-9670-C73C838D9F96}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MacOS", "MacOS", "{DFD82BBD-8D05-403D-BEBC-F4C1CF783E18}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacServer", "Barotrauma\BarotraumaServer\MacServer.csproj", "{8C3F4314-E5CA-4563-BEE6-69E97CAA0813}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MacServer", "Barotrauma\BarotraumaServer\MacServer.csproj", "{8C3F4314-E5CA-4563-BEE6-69E97CAA0813}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MacClient", "Barotrauma\BarotraumaClient\MacClient.csproj", "{F17FB469-E9E6-4B1C-B887-4FE709D4D771}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MacClient", "Barotrauma\BarotraumaClient\MacClient.csproj", "{F17FB469-E9E6-4B1C-B887-4FE709D4D771}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.MacOS.NetStandard", "Libraries\MonoGame.Framework\Src\MonoGame.Framework\MonoGame.Framework.MacOS.NetStandard.csproj", "{35DDDA7D-328D-4A5D-BCBB-2E60C830A899}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoGame.Framework.MacOS.NetStandard", "Libraries\MonoGame.Framework\Src\MonoGame.Framework\MonoGame.Framework.MacOS.NetStandard.csproj", "{35DDDA7D-328D-4A5D-BCBB-2E60C830A899}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facepunch.Steamworks.Posix64", "Libraries\Facepunch.Steamworks\Facepunch.Steamworks.Posix64.csproj", "{F10CE3BB-26B8-446E-84D2-86D25E850F61}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Facepunch.Steamworks.Posix64", "Libraries\Facepunch.Steamworks\Facepunch.Steamworks.Posix64.csproj", "{F10CE3BB-26B8-446E-84D2-86D25E850F61}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -42,6 +42,8 @@ Global Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 + Unstable|Any CPU = Unstable|Any CPU + Unstable|x64 = Unstable|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -52,6 +54,10 @@ Global {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Release|Any CPU.Build.0 = Release|Any CPU {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Release|x64.ActiveCfg = Release|x64 {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Release|x64.Build.0 = Release|x64 + {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Unstable|Any CPU.Build.0 = Release|Any CPU + {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Unstable|x64.ActiveCfg = Release|x64 + {C54F0DFE-ADD3-4767-8CBC-101859218D66}.Unstable|x64.Build.0 = Release|x64 {6D65C294-C636-4D57-9826-10CA13A87C95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D65C294-C636-4D57-9826-10CA13A87C95}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D65C294-C636-4D57-9826-10CA13A87C95}.Debug|x64.ActiveCfg = Debug|x64 @@ -60,6 +66,10 @@ Global {6D65C294-C636-4D57-9826-10CA13A87C95}.Release|Any CPU.Build.0 = Release|Any CPU {6D65C294-C636-4D57-9826-10CA13A87C95}.Release|x64.ActiveCfg = Release|x64 {6D65C294-C636-4D57-9826-10CA13A87C95}.Release|x64.Build.0 = Release|x64 + {6D65C294-C636-4D57-9826-10CA13A87C95}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {6D65C294-C636-4D57-9826-10CA13A87C95}.Unstable|Any CPU.Build.0 = Release|Any CPU + {6D65C294-C636-4D57-9826-10CA13A87C95}.Unstable|x64.ActiveCfg = Release|x64 + {6D65C294-C636-4D57-9826-10CA13A87C95}.Unstable|x64.Build.0 = Release|x64 {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Debug|x64.ActiveCfg = Debug|x64 @@ -68,6 +78,10 @@ Global {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Release|Any CPU.Build.0 = Release|Any CPU {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Release|x64.ActiveCfg = Release|x64 {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Release|x64.Build.0 = Release|x64 + {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Unstable|Any CPU.Build.0 = Release|Any CPU + {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Unstable|x64.ActiveCfg = Release|x64 + {DB1F46B3-7C84-4F36-9580-B288B400A1FE}.Unstable|x64.Build.0 = Release|x64 {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Debug|Any CPU.Build.0 = Debug|Any CPU {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Debug|x64.ActiveCfg = Debug|x64 @@ -76,6 +90,10 @@ Global {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Release|Any CPU.Build.0 = Release|Any CPU {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Release|x64.ActiveCfg = Release|x64 {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Release|x64.Build.0 = Release|x64 + {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Unstable|Any CPU.Build.0 = Release|Any CPU + {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Unstable|x64.ActiveCfg = Release|x64 + {249A3B8A-03ED-400B-856D-0D4537A8B4C8}.Unstable|x64.Build.0 = Release|x64 {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Debug|x64.ActiveCfg = Debug|x64 @@ -84,6 +102,10 @@ Global {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Release|Any CPU.Build.0 = Release|Any CPU {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Release|x64.ActiveCfg = Release|x64 {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Release|x64.Build.0 = Release|x64 + {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Unstable|Any CPU.Build.0 = Release|Any CPU + {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Unstable|x64.ActiveCfg = Release|x64 + {E8485CBC-9B68-4F0B-96EB-AFCBD0DFD357}.Unstable|x64.Build.0 = Release|x64 {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Debug|Any CPU.Build.0 = Debug|Any CPU {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Debug|x64.ActiveCfg = Debug|x64 @@ -92,6 +114,10 @@ Global {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Release|Any CPU.Build.0 = Release|Any CPU {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Release|x64.ActiveCfg = Release|x64 {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Release|x64.Build.0 = Release|x64 + {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Unstable|Any CPU.Build.0 = Release|Any CPU + {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Unstable|x64.ActiveCfg = Release|x64 + {F5F3D706-78DF-469D-8AA0-E2FF5E81EA85}.Unstable|x64.Build.0 = Release|x64 {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Debug|Any CPU.Build.0 = Debug|Any CPU {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Debug|x64.ActiveCfg = Debug|x64 @@ -100,6 +126,10 @@ Global {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Release|Any CPU.Build.0 = Release|Any CPU {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Release|x64.ActiveCfg = Release|x64 {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Release|x64.Build.0 = Release|x64 + {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Unstable|Any CPU.Build.0 = Release|Any CPU + {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Unstable|x64.ActiveCfg = Release|x64 + {EF96144B-3DE6-4C8C-9670-C73C838D9F96}.Unstable|x64.Build.0 = Release|x64 {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Debug|x64.ActiveCfg = Debug|x64 @@ -108,6 +138,10 @@ Global {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Release|Any CPU.Build.0 = Release|Any CPU {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Release|x64.ActiveCfg = Release|x64 {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Release|x64.Build.0 = Release|x64 + {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Unstable|Any CPU.ActiveCfg = Unstable|Any CPU + {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Unstable|Any CPU.Build.0 = Unstable|Any CPU + {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Unstable|x64.ActiveCfg = Unstable|x64 + {8C3F4314-E5CA-4563-BEE6-69E97CAA0813}.Unstable|x64.Build.0 = Unstable|x64 {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Debug|Any CPU.Build.0 = Debug|Any CPU {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Debug|x64.ActiveCfg = Debug|x64 @@ -116,6 +150,10 @@ Global {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Release|Any CPU.Build.0 = Release|Any CPU {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Release|x64.ActiveCfg = Release|x64 {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Release|x64.Build.0 = Release|x64 + {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Unstable|Any CPU.ActiveCfg = Unstable|Any CPU + {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Unstable|Any CPU.Build.0 = Unstable|Any CPU + {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Unstable|x64.ActiveCfg = Unstable|x64 + {F17FB469-E9E6-4B1C-B887-4FE709D4D771}.Unstable|x64.Build.0 = Unstable|x64 {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Debug|Any CPU.Build.0 = Debug|Any CPU {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Debug|x64.ActiveCfg = Debug|x64 @@ -124,6 +162,10 @@ Global {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Release|Any CPU.Build.0 = Release|Any CPU {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Release|x64.ActiveCfg = Release|x64 {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Release|x64.Build.0 = Release|x64 + {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Unstable|Any CPU.Build.0 = Release|Any CPU + {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Unstable|x64.ActiveCfg = Release|x64 + {35DDDA7D-328D-4A5D-BCBB-2E60C830A899}.Unstable|x64.Build.0 = Release|x64 {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Debug|Any CPU.Build.0 = Debug|Any CPU {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -132,6 +174,10 @@ Global {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Release|Any CPU.Build.0 = Release|Any CPU {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Release|x64.ActiveCfg = Release|Any CPU {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Release|x64.Build.0 = Release|Any CPU + {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Unstable|Any CPU.ActiveCfg = Release|Any CPU + {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Unstable|Any CPU.Build.0 = Release|Any CPU + {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Unstable|x64.ActiveCfg = Release|Any CPU + {F10CE3BB-26B8-446E-84D2-86D25E850F61}.Unstable|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WindowsSolution.sln b/WindowsSolution.sln index 65801aa4e..eb92b3c70 100644 --- a/WindowsSolution.sln +++ b/WindowsSolution.sln @@ -43,52 +43,75 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 Release|x64 = Release|x64 + Unstable|x64 = Unstable|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Debug|x64.ActiveCfg = Debug|x64 {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Debug|x64.Build.0 = Debug|x64 {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Release|x64.ActiveCfg = Release|x64 {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Release|x64.Build.0 = Release|x64 + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|x64.ActiveCfg = Release|x64 + {E1BBC67C-DC2A-40E8-89F3-B57299D7B16C}.Unstable|x64.Build.0 = Release|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Debug|x64.ActiveCfg = Debug|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Debug|x64.Build.0 = Debug|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Release|x64.ActiveCfg = Release|x64 {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Release|x64.Build.0 = Release|x64 + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|x64.ActiveCfg = Release|x64 + {95C4D59D-9BE4-4278-B4F8-46C0BA1A3916}.Unstable|x64.Build.0 = Release|x64 {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Debug|x64.ActiveCfg = Debug|x64 {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Debug|x64.Build.0 = Debug|x64 {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Release|x64.ActiveCfg = Release|x64 {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Release|x64.Build.0 = Release|x64 + {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Unstable|x64.ActiveCfg = Release|x64 + {AD30AE95-7BF6-4CE5-AEED-B6C30A88F139}.Unstable|x64.Build.0 = Release|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Debug|x64.ActiveCfg = Debug|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Debug|x64.Build.0 = Debug|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Release|x64.ActiveCfg = Release|x64 {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Release|x64.Build.0 = Release|x64 + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|x64.ActiveCfg = Release|x64 + {894D3518-A0E3-4B88-B9BF-9E1AFC3F9523}.Unstable|x64.Build.0 = Release|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Debug|x64.ActiveCfg = Debug|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Debug|x64.Build.0 = Debug|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Release|x64.ActiveCfg = Release|x64 {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Release|x64.Build.0 = Release|x64 + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|x64.ActiveCfg = Release|x64 + {ED2873CA-C209-4CBC-ADD4-DAA753DFEEAF}.Unstable|x64.Build.0 = Release|x64 {978633A8-094A-4623-9B82-8533FC8BA1CC}.Debug|x64.ActiveCfg = Debug|x64 {978633A8-094A-4623-9B82-8533FC8BA1CC}.Debug|x64.Build.0 = Debug|x64 {978633A8-094A-4623-9B82-8533FC8BA1CC}.Release|x64.ActiveCfg = Release|x64 {978633A8-094A-4623-9B82-8533FC8BA1CC}.Release|x64.Build.0 = Release|x64 + {978633A8-094A-4623-9B82-8533FC8BA1CC}.Unstable|x64.ActiveCfg = Unstable|x64 + {978633A8-094A-4623-9B82-8533FC8BA1CC}.Unstable|x64.Build.0 = Unstable|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Debug|x64.ActiveCfg = Debug|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Debug|x64.Build.0 = Debug|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Release|x64.ActiveCfg = Release|x64 {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Release|x64.Build.0 = Release|x64 + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|x64.ActiveCfg = Release|x64 + {39E52316-D6C1-4D1F-95FF-37F41C9AB5A7}.Unstable|x64.Build.0 = Release|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Debug|x64.ActiveCfg = Debug|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Debug|x64.Build.0 = Debug|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Release|x64.ActiveCfg = Release|x64 {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Release|x64.Build.0 = Release|x64 + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|x64.ActiveCfg = Release|x64 + {D379BF8E-D696-4AB9-A27F-4D0C493BF484}.Unstable|x64.Build.0 = Release|x64 {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Debug|x64.ActiveCfg = Debug|x64 {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Debug|x64.Build.0 = Debug|x64 {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Release|x64.ActiveCfg = Release|x64 {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Release|x64.Build.0 = Release|x64 + {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Unstable|x64.ActiveCfg = Unstable|x64 + {47848C6E-C7A8-4EC3-96C2-3BC8A4234AFA}.Unstable|x64.Build.0 = Unstable|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Debug|x64.ActiveCfg = Debug|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Debug|x64.Build.0 = Debug|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Release|x64.ActiveCfg = Release|x64 {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Release|x64.Build.0 = Release|x64 + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|x64.ActiveCfg = Release|x64 + {1F318AC4-F808-4130-867F-B98DF9AA8F95}.Unstable|x64.Build.0 = Release|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Debug|x64.ActiveCfg = Debug|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Debug|x64.Build.0 = Debug|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Release|x64.ActiveCfg = Release|x64 {6911872D-40EF-400C-B0A1-9985A19ED488}.Release|x64.Build.0 = Release|x64 + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|x64.ActiveCfg = Release|x64 + {6911872D-40EF-400C-B0A1-9985A19ED488}.Unstable|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE