diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs index a7e1de746..35a63376e 100644 --- a/Barotrauma/BarotraumaClient/Source/GameMain.cs +++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs @@ -287,7 +287,13 @@ namespace Barotrauma { if (GameSettings.ShowUserStatisticsPrompt) { - if (TextManager.ContainsTag("statisticspromptheader") && TextManager.ContainsTag("statisticsprompttext")) + //TODO: translate + var userStatsPrompt = new GUIMessageBox( + "Do you want to help us make Barotrauma better?", + "Do you allow Barotrauma to send usage statistics and error reports to the developers? The data is anonymous, " + + "does not contain any personal information and is only used to help us diagnose issues and improve Barotrauma.", + new string[] { "Yes", "No" }); + userStatsPrompt.Buttons[0].OnClicked += (btn, userdata) => { var userStatsPrompt = new GUIMessageBox( TextManager.Get("statisticspromptheader"), @@ -318,7 +324,17 @@ namespace Barotrauma GameSettings.SendUserStatistics = true; GameAnalyticsManager.Init(); Config.SaveNewPlayerConfig(); - } + return true; + }; + userStatsPrompt.Buttons[0].OnClicked += userStatsPrompt.Close; + userStatsPrompt.Buttons[1].OnClicked += (btn, userdata) => + { + GameSettings.ShowUserStatisticsPrompt = false; + GameSettings.SendUserStatistics = false; + Config.SaveNewPlayerConfig(); + return true; + }; + userStatsPrompt.Buttons[1].OnClicked += userStatsPrompt.Close; } else if (GameSettings.SendUserStatistics) { @@ -383,10 +399,10 @@ namespace Barotrauma DebugConsole.Log("Selected content packages: " + string.Join(", ", SelectedPackages.Select(cp => cp.Name))); } -/*#if DEBUG +#if DEBUG GameSettings.ShowUserStatisticsPrompt = false; GameSettings.SendUserStatistics = false; -#endif*/ +#endif InitUserStats(); diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs index 7a31b0c49..6d1ed1501 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/GameModes/Tutorials/DoctorTutorial.cs @@ -208,10 +208,11 @@ namespace Barotrauma.Tutorials TriggerTutorialSegment(1, GameMain.Config.KeyBind(InputType.Health)); // Open health interface while (CharacterHealth.OpenHealthWindow == null) { - yield return new WaitForSeconds(1.0f, false); + doctor.CharacterHealth.HealthBarPulsateTimer = 1.0f; + yield return null; } RemoveCompletedObjective(segments[1]); - + yield return new WaitForSeconds(1.0f, false); TriggerTutorialSegment(2); //Treat self while (doctor.CharacterHealth.GetAfflictionStrength("damage") > 0.01f) { diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs index 212acdc56..1dde7cb03 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs @@ -477,7 +477,7 @@ namespace Barotrauma if (string.IsNullOrWhiteSpace(VoiceCaptureDevice)) VoiceCaptureDevice = deviceNames[0]; #if (!OSX) - var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), TextManager.EnsureUTF8(VoiceCaptureDevice), deviceNames.Count); + var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), VoiceCaptureDevice, deviceNames.Count); foreach (string name in deviceNames) { deviceList.AddItem(TextManager.EnsureUTF8(name), name); @@ -492,7 +492,7 @@ namespace Barotrauma }; #else var suavemente = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), - TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TextManager.EnsureUTF8(VoiceCaptureDevice))) + TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), VoiceCaptureDevice)) { ToolTip = TextManager.Get("CurrentDeviceToolTip.OSX"), TextAlignment = Alignment.CenterX @@ -507,7 +507,7 @@ namespace Barotrauma if (VoiceCaptureDevice == deviceNames[0]) return true; VoipCapture.ChangeCaptureDevice(deviceNames[0]); - suavemente.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TextManager.EnsureUTF8(VoiceCaptureDevice)); + suavemente.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), VoiceCaptureDevice); suavemente.Flash(Color.Blue); return true; diff --git a/Barotrauma/BarotraumaClient/Source/Map/Map/Map.cs b/Barotrauma/BarotraumaClient/Source/Map/Map/Map.cs index 27ae86b7a..8bb06d630 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Map/Map.cs @@ -624,22 +624,10 @@ namespace Barotrauma if (mouseOn && PlayerInput.LeftButtonClicked() && !messageBoxOpen) { - if (TextManager.ContainsTag("centerarealockedheader") && TextManager.ContainsTag("centerarealockedtext") ) - { - var messageBox = new GUIMessageBox( - TextManager.Get("centerarealockedheader"), - TextManager.Get("centerarealockedtext")); - messageBoxOpen = true; - CoroutineManager.StartCoroutine(WaitForMessageBoxClosed(messageBox)); - } - else - { - //if the message cannot be shown in the selected language, - //show the campaign roadmap (which mentions the center location not being reachable) - var messageBox = new GUIMessageBox(TextManager.Get("CampaignRoadMapTitle"), TextManager.Get("CampaignRoadMapText")); - messageBoxOpen = true; - CoroutineManager.StartCoroutine(WaitForMessageBoxClosed(messageBox)); - } + //TODO: translate or replace + var messageBox = new GUIMessageBox("Mysteries lie ahead...", "This area is unreachable in this version of Barotrauma. Please wait for future updates!"); + messageBoxOpen = true; + CoroutineManager.StartCoroutine(WaitForMessageBoxClosed(messageBox)); } } diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs index 70b981ebe..7ef09692e 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignSetupUI.cs @@ -435,8 +435,6 @@ namespace Barotrauma saveTime = time.ToString(); } - string mapseed = doc.Root.GetAttributeString("mapseed", "unknown"); - var saveFileFrame = new GUIFrame(new RectTransform(new Vector2(0.45f, 0.6f), loadGameContainer.RectTransform, Anchor.TopRight) { RelativeOffset = new Vector2(0.0f, 0.1f) diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs index e622bc1ca..304aba705 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs @@ -74,14 +74,15 @@ namespace Barotrauma outpostBtn.TextBlock.Font = GUI.LargeFont; outpostBtn.TextBlock.AutoScale = true; - var tabButtonContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.4f, 0.4f), topPanelContent.RectTransform, Anchor.BottomLeft), isHorizontal: true); + var tabButtonContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.4f, 0.3f), topPanelContent.RectTransform, Anchor.BottomLeft), isHorizontal: true); int i = 0; var tabValues = Enum.GetValues(typeof(Tab)); foreach (Tab tab in tabValues) { var tabButton = new GUIButton(new RectTransform(new Vector2(0.25f, 1.0f), tabButtonContainer.RectTransform), - "", + TextManager.Get(tab.ToString()), + textAlignment: Alignment.Center, style: i == 0 ? "GUISlopedTabButtonLeft" : (i == tabValues.Length - 1 ? "GUISlopedTabButtonRight" : "GUISlopedTabButtonMid")) { UserData = tab, @@ -92,32 +93,11 @@ namespace Barotrauma tabButton.RectTransform.MaxSize = new Point( (int)(tabButton.Rect.Height * (buttonSprite.Sprite.size.X / buttonSprite.Sprite.size.Y)), int.MaxValue); - //the text needs to be positioned differently in the buttons at the edges due to the "slopes" in the button - if (i == 0 || i == tabValues.Length - 1) - { - new GUITextBlock(new RectTransform(new Vector2(0.8f, 0.9f), tabButton.RectTransform, i == 0 ? Anchor.CenterLeft : Anchor.CenterRight) { RelativeOffset = new Vector2(0.05f, 0.0f) }, - TextManager.Get(tab.ToString()), textColor: tabButton.TextColor, font: GUI.LargeFont, textAlignment: Alignment.Center, style: null) - { - UserData = "buttontext" - }; - } - else - { - new GUITextBlock(new RectTransform(new Vector2(0.7f, 0.9f), tabButton.RectTransform, Anchor.Center), - TextManager.Get(tab.ToString()), textColor: tabButton.TextColor, font: GUI.LargeFont, textAlignment: Alignment.Center, style: null) - { - UserData = "buttontext" - }; - } - tabButtons.Add(tabButton); + tabButton.Font = GUI.LargeFont; i++; } - GUITextBlock.AutoScaleAndNormalize(tabButtons.Select(t => t.GetChildByUserData("buttontext") as GUITextBlock)); - tabButtons.FirstOrDefault().RectTransform.SizeChanged += () => - { - GUITextBlock.AutoScaleAndNormalize(tabButtons.Select(t => t.GetChildByUserData("buttontext") as GUITextBlock)); - }; + GUITextBlock.AutoScaleAndNormalize(tabButtons.Select(t => t.TextBlock)); // crew tab ------------------------------------------------------------------------- diff --git a/Barotrauma/BarotraumaShared/Source/Events/Missions/MissionPrefab.cs b/Barotrauma/BarotraumaShared/Source/Events/Missions/MissionPrefab.cs index 49827886d..df7a431fa 100644 --- a/Barotrauma/BarotraumaShared/Source/Events/Missions/MissionPrefab.cs +++ b/Barotrauma/BarotraumaShared/Source/Events/Missions/MissionPrefab.cs @@ -83,15 +83,11 @@ namespace Barotrauma Commonness = element.GetAttributeInt("commonness", 1); SuccessMessage = TextManager.Get("MissionSuccess." + Identifier, true) ?? element.GetAttributeString("successmessage", "Mission completed successfully"); - FailureMessage = TextManager.Get("MissionFailure." + Identifier, true) ?? ""; - if (string.IsNullOrEmpty(FailureMessage) && TextManager.ContainsTag("missionfailed")) - { - FailureMessage = TextManager.Get("missionfailed", returnNull: true) ?? ""; - } - if (string.IsNullOrEmpty(FailureMessage) && GameMain.Config.Language == "English") - { - FailureMessage = element.GetAttributeString("failuremessage", ""); - } + FailureMessage = + TextManager.Get("MissionFailure." + Identifier, true) ?? + element.GetAttributeString("failuremessage", null) ?? + TextManager.Get("missionfailed", returnNull: true) ?? + ""; SonarLabel = TextManager.Get("MissionSonarLabel." + Identifier, true) ?? element.GetAttributeString("sonarlabel", ""); diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs index 3227f1413..a6c19d120 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs @@ -750,7 +750,6 @@ namespace Barotrauma if (!fileFound) { ShowLanguageSelectionPrompt = true; - ShowUserStatisticsPrompt = true; SaveNewPlayerConfig(); } } @@ -821,6 +820,58 @@ namespace Barotrauma { VoiceSetting = voiceSetting; } + foreach (ContentFile file in contentPackage.Files) + { + ToolBox.IsProperFilenameCase(file.Path); + } + } + if (!SelectedContentPackages.Any()) + { + var availablePackage = ContentPackage.List.FirstOrDefault(cp => cp.IsCompatible() && cp.CorePackage); + if (availablePackage != null) + { + SelectedContentPackages.Add(availablePackage); + } + } + + //save to get rid of the invalid selected packages in the config file + if (missingPackagePaths.Count > 0 || incompatiblePackages.Count > 0) { SaveNewPlayerConfig(); } + } + #endregion + + #region Save DefaultConfig + private void SaveNewDefaultConfig() + { + XDocument doc = new XDocument(); + + if (doc.Root == null) + { + doc.Add(new XElement("config")); + } + + doc.Root.Add( + new XAttribute("language", TextManager.Language), + new XAttribute("masterserverurl", MasterServerUrl), + new XAttribute("autocheckupdates", AutoCheckUpdates), + new XAttribute("musicvolume", musicVolume), + new XAttribute("soundvolume", soundVolume), + new XAttribute("voicechatvolume", voiceChatVolume), + new XAttribute("verboselogging", VerboseLogging), + new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs), + new XAttribute("enablesplashscreen", EnableSplashScreen), + new XAttribute("usesteammatchmaking", useSteamMatchmaking), + new XAttribute("quickstartsub", QuickStartSubmarineName), + new XAttribute("requiresteamauthentication", requireSteamAuthentication), + new XAttribute("aimassistamount", aimAssistAmount)); + + if (!ShowUserStatisticsPrompt) + { + doc.Root.Add(new XAttribute("senduserstatistics", sendUserStatistics)); + } + + if (WasGameUpdated) + { + doc.Root.Add(new XAttribute("wasgameupdated", true)); } useSteamMatchmaking = doc.Root.GetAttributeBool("usesteammatchmaking", useSteamMatchmaking); diff --git a/Barotrauma/BarotraumaShared/Source/SteamAchievementManager.cs b/Barotrauma/BarotraumaShared/Source/SteamAchievementManager.cs index cd5989c75..9dfe58a9e 100644 --- a/Barotrauma/BarotraumaShared/Source/SteamAchievementManager.cs +++ b/Barotrauma/BarotraumaShared/Source/SteamAchievementManager.cs @@ -119,40 +119,23 @@ namespace Barotrauma } } - if (GameMain.GameSession != null) + if (GameMain.GameSession != null && Character.Controlled != null) { -#if CLIENT - if (Character.Controlled != null) { CheckMidRoundAchievements(Character.Controlled); } -#else - foreach (Client client in GameMain.Server.ConnectedClients) + if (Character.Controlled.HasEquippedItem("clownmask") && + Character.Controlled.HasEquippedItem("clowncostume")) { - if (client.Character != null) + UnlockAchievement(Character.Controlled, "clowncostume"); + } + + if (Submarine.MainSub != null && Character.Controlled.Submarine == null) + { + float dist = 500 / Physics.DisplayToRealWorldRatio; + if (Vector2.DistanceSquared(Character.Controlled.WorldPosition, Submarine.MainSub.WorldPosition) > + dist * dist) { - CheckMidRoundAchievements(client.Character); + UnlockAchievement(Character.Controlled, "crewaway"); } - } -#endif - } - } - - private static void CheckMidRoundAchievements(Character c) - { - if (c == null || c.Removed) { return; } - - if (c.HasEquippedItem("clownmask") && - c.HasEquippedItem("clowncostume")) - { - UnlockAchievement(c, "clowncostume"); - } - - if (Submarine.MainSub != null && c.Submarine == null) - { - float dist = 500 / Physics.DisplayToRealWorldRatio; - if (Vector2.DistanceSquared(c.WorldPosition, Submarine.MainSub.WorldPosition) > - dist * dist) - { - UnlockAchievement(c, "crewaway"); - } + } } } @@ -231,8 +214,7 @@ namespace Barotrauma } if (character.HasEquippedItem("clownmask") && - character.HasEquippedItem("clowncostume") && - causeOfDeath.Killer != character) + character.HasEquippedItem("clowncostume")) { UnlockAchievement(causeOfDeath.Killer, "killclown"); }