Fix #12118: When adding an unbunching order, properly check for unsafe conditions (#12136)

This commit is contained in:
Tyler Trahan
2024-03-09 08:28:05 -05:00
committed by GitHub
parent 6e0f58f700
commit ab315d0dc9
4 changed files with 61 additions and 12 deletions

View File

@@ -399,16 +399,32 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
(_settings_client.gui.new_nonstop && v->IsGroundVehicle()) ? ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS : ONSF_STOP_EVERYWHERE);
if (_ctrl_pressed) {
/* Don't allow a new unbunching order if we already have one. */
if (v->HasUnbunchingOrder()) {
/* Check to see if we are allowed to make this an unbunching order. */
bool failed = false;
if (v->HasFullLoadOrder()) {
/* We don't allow unbunching if the vehicle has a full load order. */
ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD, WL_ERROR);
failed = true;
} else if (v->HasUnbunchingOrder()) {
/* Don't allow a new unbunching order if we already have one. */
ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED, WL_ERROR);
/* Return an empty order to bail out. */
failed = true;
} else if (v->HasConditionalOrder()) {
/* We don't allow unbunching if the vehicle has a conditional order. */
ShowErrorMessage(STR_ERROR_CAN_T_INSERT_NEW_ORDER, STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL, WL_ERROR);
failed = true;
}
/* Return an empty order to bail out. */
if (failed) {
order.Free();
return order;
} else {
order.SetDepotActionType(ODATFB_UNBUNCH);
}
/* Now we are allowed to set the action type. */
order.SetDepotActionType(ODATFB_UNBUNCH);
}
return order;
}