1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-20 06:12:57 +01:00

Fix #12506: Cannot advertise food if there are no rides in the park

This commit is contained in:
Michael Steenbeek
2020-07-29 10:44:38 +02:00
committed by GitHub
parent 1f3ea50915
commit bb1d81471d
3 changed files with 25 additions and 11 deletions

View File

@@ -55,6 +55,7 @@
- Fix: [#12312] Softlock when loading save file via command line fails. - Fix: [#12312] Softlock when loading save file via command line fails.
- Fix: [#12486] `set-rct2` has a broken g1.dat check. - Fix: [#12486] `set-rct2` has a broken g1.dat check.
- Fix: [#12505] Stores selling multiple items can only have the first product advertised. - Fix: [#12505] Stores selling multiple items can only have the first product advertised.
- Fix: [#12506] Cannot advertise food if there are no rides in the park.
- Fix: 'j' character has broken kerning (original bug). - Fix: 'j' character has broken kerning (original bug).
- Fix: RCT1 scenarios have more items in the object list than are present in the park or the research list. - Fix: RCT1 scenarios have more items in the object list than are present in the park or the research list.
- Improved: [#6530] Allow water and land height changes on park borders. - Improved: [#6530] Allow water and land height changes on park borders.

View File

@@ -154,7 +154,7 @@ rct_window* window_new_campaign_open(int16_t campaignType)
w->campaign.no_weeks = 2; w->campaign.no_weeks = 2;
// Currently selected ride // Currently selected ride
w->campaign.ride_id = SELECTED_RIDE_UNDEFINED; w->campaign.RideId = SELECTED_RIDE_UNDEFINED;
WindowCampaignRefreshRides(); WindowCampaignRefreshRides();
return w; return w;
@@ -207,7 +207,7 @@ static void window_new_campaign_mouseup(rct_window* w, rct_widgetindex widgetInd
break; break;
case WIDX_START_BUTTON: case WIDX_START_BUTTON:
{ {
auto gameAction = ParkMarketingAction(w->campaign.campaign_type, w->campaign.ride_id, w->campaign.no_weeks); auto gameAction = ParkMarketingAction(w->campaign.campaign_type, w->campaign.RideId, w->campaign.no_weeks);
gameAction.SetCallback([](const GameAction* ga, const GameActionResult* result) { gameAction.SetCallback([](const GameAction* ga, const GameActionResult* result) {
if (result->Error == GA_ERROR::OK) if (result->Error == GA_ERROR::OK)
{ {
@@ -306,16 +306,25 @@ static void window_new_campaign_dropdown(rct_window* w, rct_widgetindex widgetIn
if (widgetIndex != WIDX_RIDE_DROPDOWN_BUTTON) if (widgetIndex != WIDX_RIDE_DROPDOWN_BUTTON)
return; return;
if (dropdownIndex < 0 || static_cast<size_t>(dropdownIndex) >= window_new_campaign_rides.size()) if (dropdownIndex < 0)
return; return;
if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE) if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{ {
w->campaign.ride_id = window_new_campaign_shop_items[dropdownIndex]; if (static_cast<size_t>(dropdownIndex) >= std::size(window_new_campaign_shop_items))
return;
if (window_new_campaign_shop_items[dropdownIndex] == 255)
return;
w->campaign.ShopItemId = window_new_campaign_shop_items[dropdownIndex];
} }
else else
{ {
w->campaign.ride_id = window_new_campaign_rides[dropdownIndex]; if (static_cast<size_t>(dropdownIndex) >= window_new_campaign_rides.size())
return;
w->campaign.RideId = window_new_campaign_rides[dropdownIndex];
} }
w->Invalidate(); w->Invalidate();
@@ -339,9 +348,9 @@ static void window_new_campaign_invalidate(rct_window* w)
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN;
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON;
window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_RIDE; window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_RIDE;
if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED) if (w->campaign.RideId != SELECTED_RIDE_UNDEFINED)
{ {
auto ride = get_ride(w->campaign.ride_id); auto ride = get_ride(w->campaign.RideId);
if (ride != nullptr) if (ride != nullptr)
{ {
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = STR_STRINGID; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = STR_STRINGID;
@@ -356,9 +365,9 @@ static void window_new_campaign_invalidate(rct_window* w)
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN;
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON;
window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_ITEM; window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_ITEM;
if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED) if (w->campaign.ShopItemId != SELECTED_RIDE_UNDEFINED)
{ {
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = ShopItems[w->campaign.ride_id].Naming.Plural; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = ShopItems[w->campaign.ShopItemId].Naming.Plural;
} }
break; break;
} }
@@ -368,7 +377,7 @@ static void window_new_campaign_invalidate(rct_window* w)
// Enable / disable start button based on ride dropdown // Enable / disable start button based on ride dropdown
w->disabled_widgets &= ~(1 << WIDX_START_BUTTON); w->disabled_widgets &= ~(1 << WIDX_START_BUTTON);
if (window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type == WWT_DROPDOWN && w->campaign.ride_id == SELECTED_RIDE_UNDEFINED) if (window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type == WWT_DROPDOWN && w->campaign.RideId == SELECTED_RIDE_UNDEFINED)
w->disabled_widgets |= 1 << WIDX_START_BUTTON; w->disabled_widgets |= 1 << WIDX_START_BUTTON;
} }

View File

@@ -247,7 +247,11 @@ struct campaign_variables
{ {
int16_t campaign_type; int16_t campaign_type;
int16_t no_weeks; // 0x482 int16_t no_weeks; // 0x482
uint16_t ride_id; // 0x484 union
{
ride_id_t RideId; // 0x484
ObjectEntryIndex ShopItemId; // 0x484
};
uint32_t pad_486; uint32_t pad_486;
}; };