From 359bbee9f5277cc2a64bc403fb9e77b897a31407 Mon Sep 17 00:00:00 2001 From: Nils Caspar Date: Thu, 3 Sep 2020 14:20:42 -0700 Subject: [PATCH] Fix #12845: Cancel marketing campaigns for demolished rides (#12848) --- distribution/changelog.txt | 1 + src/openrct2/actions/RideDemolishAction.hpp | 2 ++ src/openrct2/management/Marketing.cpp | 15 +++++++++++++++ src/openrct2/management/Marketing.h | 1 + src/openrct2/network/NetworkBase.cpp | 2 +- 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 5af12eee9e..bc568367ef 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -10,6 +10,7 @@ - Fix: [#12737] Space Rings draw the same vehicle 4 times. - Fix: [#12764] Rides don't start aged anymore. - Fix: [#12820] Title menu buttons not invalidating properly +- Fix: [#12845] Deleting ride with active ad campaign creates incorrect notification. - Fix: Incomplete loop collision box allowed overlapping track (original bug). - Technical: The required version of macOS has been lowered to 10.13 (High Sierra). diff --git a/src/openrct2/actions/RideDemolishAction.hpp b/src/openrct2/actions/RideDemolishAction.hpp index 8ccb3c9cf0..eed98f5f52 100644 --- a/src/openrct2/actions/RideDemolishAction.hpp +++ b/src/openrct2/actions/RideDemolishAction.hpp @@ -240,6 +240,8 @@ private: } } + MarketingCancelCampaignsForRide(_rideIndex); + auto res = std::make_unique(); res->Expenditure = ExpenditureType::RideConstruction; res->Cost = refundPrice; diff --git a/src/openrct2/management/Marketing.cpp b/src/openrct2/management/Marketing.cpp index 0e1c75261a..0bf0cba76e 100644 --- a/src/openrct2/management/Marketing.cpp +++ b/src/openrct2/management/Marketing.cpp @@ -237,3 +237,18 @@ void marketing_new_campaign(const MarketingCampaign& campaign) gMarketingCampaigns.push_back(campaign); } } + +void MarketingCancelCampaignsForRide(const ride_id_t rideId) +{ + auto isCampaignForRideFn = [&rideId](MarketingCampaign& campaign) { + if (campaign.Type == ADVERTISING_CAMPAIGN_RIDE_FREE || campaign.Type == ADVERTISING_CAMPAIGN_RIDE) + { + return campaign.RideId == rideId; + } + return false; + }; + + auto& v = gMarketingCampaigns; + auto removedIt = std::remove_if(v.begin(), v.end(), isCampaignForRideFn); + v.erase(removedIt, v.end()); +} diff --git a/src/openrct2/management/Marketing.h b/src/openrct2/management/Marketing.h index b19fb107ef..c74e51e6c3 100644 --- a/src/openrct2/management/Marketing.h +++ b/src/openrct2/management/Marketing.h @@ -67,3 +67,4 @@ void marketing_set_guest_campaign(Peep* peep, int32_t campaign); bool marketing_is_campaign_type_applicable(int32_t campaignType); MarketingCampaign* marketing_get_campaign(int32_t campaignType); void marketing_new_campaign(const MarketingCampaign& campaign); +void MarketingCancelCampaignsForRide(const ride_id_t rideId); diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 919195b38a..18e8a477ac 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -33,7 +33,7 @@ // This string specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "2" +#define NETWORK_STREAM_VERSION "3" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr;