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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user