1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Fix #9826: NRE in ride_construct

This commit is contained in:
Ted John
2019-08-09 18:29:34 +01:00
parent 9954f0b725
commit 60060480c2
2 changed files with 35 additions and 25 deletions

View File

@@ -458,7 +458,13 @@ int32_t viewport_interaction_right_click(int32_t x, int32_t y)
case VIEWPORT_INTERACTION_ITEM_SPRITE:
if (info.sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
ride_construct(get_ride(info.sprite->vehicle.ride));
{
auto ride = get_ride(info.sprite->vehicle.ride);
if (ride != nullptr)
{
ride_construct(ride);
}
}
break;
case VIEWPORT_INTERACTION_ITEM_RIDE:
tileElement.x = info.x;

View File

@@ -2011,9 +2011,6 @@ static void window_ride_rename(rct_window* w)
*/
static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex)
{
ride_id_t rideIndex;
int32_t status;
switch (widgetIndex)
{
case WIDX_CLOSE:
@@ -2032,13 +2029,18 @@ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex)
window_ride_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_CONSTRUCTION:
rideIndex = (uint8_t)w->number;
ride_construct(get_ride(rideIndex));
if (window_find_by_number(WC_RIDE_CONSTRUCTION, rideIndex) != nullptr)
{
auto ride = get_ride(w->number);
if (ride != nullptr)
{
window_close(w);
ride_construct(ride);
if (window_find_by_number(WC_RIDE_CONSTRUCTION, ride->id) != nullptr)
{
window_close(w);
}
}
break;
}
case WIDX_RENAME:
window_ride_rename(w);
break;
@@ -2052,29 +2054,31 @@ static void window_ride_main_mouseup(rct_window* w, rct_widgetindex widgetIndex)
case WIDX_SIMULATE_LIGHT:
case WIDX_TEST_LIGHT:
case WIDX_OPEN_LIGHT:
switch (widgetIndex)
{
default:
case WIDX_CLOSE_LIGHT:
status = RIDE_STATUS_CLOSED;
break;
case WIDX_SIMULATE_LIGHT:
status = RIDE_STATUS_SIMULATING;
break;
case WIDX_TEST_LIGHT:
status = RIDE_STATUS_TESTING;
break;
case WIDX_OPEN_LIGHT:
status = RIDE_STATUS_OPEN;
break;
}
{
auto ride = get_ride(w->number);
if (ride != nullptr)
{
int32_t status;
switch (widgetIndex)
{
default:
case WIDX_CLOSE_LIGHT:
status = RIDE_STATUS_CLOSED;
break;
case WIDX_SIMULATE_LIGHT:
status = RIDE_STATUS_SIMULATING;
break;
case WIDX_TEST_LIGHT:
status = RIDE_STATUS_TESTING;
break;
case WIDX_OPEN_LIGHT:
status = RIDE_STATUS_OPEN;
break;
}
ride_set_status(ride, status);
}
break;
}
}
}