diff --git a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs index 655c6fb9d..a058432bc 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/CampaignUI.cs @@ -230,7 +230,7 @@ namespace Barotrauma RelativeSpacing = 0.05f, Stretch = true }; - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), crewContent.RectTransform), "", font: GUI.LargeFont) + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), repairContent.RectTransform), "", font: GUI.LargeFont) { TextGetter = GetMoney }; @@ -254,14 +254,22 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - if (campaign.Money >= CampaignMode.HullRepairCost) + if (campaign.PurchasedHullRepairs) { - campaign.Money -= CampaignMode.HullRepairCost; - campaign.PurchasedHullRepairs = true; - GameMain.Client?.SendCampaignState(); - btn.GetChild().Selected = true; + campaign.Money += CampaignMode.HullRepairCost; + campaign.PurchasedHullRepairs = false; } - btn.Enabled = false; + else + { + if (campaign.Money >= CampaignMode.HullRepairCost) + { + campaign.Money -= CampaignMode.HullRepairCost; + campaign.PurchasedHullRepairs = true; + } + } + GameMain.Client?.SendCampaignState(); + btn.GetChild().Selected = campaign.PurchasedHullRepairs; + return true; } }; @@ -289,14 +297,22 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { - if (campaign.Money >= CampaignMode.ItemRepairCost) + if (campaign.PurchasedItemRepairs) { - campaign.Money -= CampaignMode.ItemRepairCost; - campaign.PurchasedItemRepairs = true; - GameMain.Client?.SendCampaignState(); - btn.GetChild().Selected = true; + campaign.Money += CampaignMode.ItemRepairCost; + campaign.PurchasedItemRepairs = false; } - btn.Enabled = false; + else + { + if (campaign.Money >= CampaignMode.ItemRepairCost) + { + campaign.Money -= CampaignMode.ItemRepairCost; + campaign.PurchasedItemRepairs = true; + } + } + GameMain.Client?.SendCampaignState(); + btn.GetChild().Selected = campaign.PurchasedItemRepairs; + return true; } }; @@ -747,11 +763,11 @@ namespace Barotrauma { case Tab.Repair: repairHullsButton.Enabled = - !Campaign.PurchasedHullRepairs && Campaign.Money >= CampaignMode.HullRepairCost && + (Campaign.PurchasedHullRepairs || Campaign.Money >= CampaignMode.HullRepairCost) && (GameMain.Client == null || GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)); repairHullsButton.GetChild().Selected = Campaign.PurchasedHullRepairs; repairItemsButton.Enabled = - !Campaign.PurchasedItemRepairs && Campaign.Money >= CampaignMode.ItemRepairCost && + (Campaign.PurchasedItemRepairs || Campaign.Money >= CampaignMode.ItemRepairCost) && (GameMain.Client == null || GameMain.Client.HasPermission(Networking.ClientPermissions.ManageCampaign)); repairItemsButton.GetChild().Selected = Campaign.PurchasedItemRepairs; break; diff --git a/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/MultiPlayerCampaign.cs index 7cacaa130..271e444c2 100644 --- a/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaServer/Source/GameSession/GameModes/MultiPlayerCampaign.cs @@ -212,15 +212,31 @@ namespace Barotrauma return; } - if (purchasedHullRepairs && !this.PurchasedHullRepairs && Money >= HullRepairCost) + if (purchasedHullRepairs != this.PurchasedHullRepairs) { - this.PurchasedHullRepairs = true; - Money -= HullRepairCost; + if (purchasedHullRepairs && Money >= HullRepairCost) + { + this.PurchasedHullRepairs = true; + Money -= HullRepairCost; + } + else if (!purchasedHullRepairs) + { + this.PurchasedHullRepairs = false; + Money += HullRepairCost; + } } - if (purchasedItemRepairs && !this.PurchasedItemRepairs && Money >= ItemRepairCost) + if (purchasedItemRepairs != this.PurchasedItemRepairs) { - this.PurchasedItemRepairs = true; - Money -= ItemRepairCost; + if (purchasedItemRepairs && Money >= ItemRepairCost) + { + this.PurchasedItemRepairs = true; + Money -= ItemRepairCost; + } + else if (!purchasedItemRepairs) + { + this.PurchasedItemRepairs = false; + Money += ItemRepairCost; + } } Map.SelectLocation(selectedLocIndex == UInt16.MaxValue ? -1 : selectedLocIndex);