Fix send vehicle to specific depot allowing incompatible road/tram types

See: #302
This commit is contained in:
Jonathan G Rennison
2021-07-23 18:06:15 +01:00
parent 6a009686c9
commit 382955396f
2 changed files with 4 additions and 1 deletions

View File

@@ -3574,6 +3574,9 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command, Tile
IsInfraTileUsageAllowed(this->type, this->owner, specific_depot))) { IsInfraTileUsageAllowed(this->type, this->owner, specific_depot))) {
return_cmd_error(no_depot[this->type]); return_cmd_error(no_depot[this->type]);
} }
if (this->type == VEH_ROAD && (GetPresentRoadTypes(tile) & RoadVehicle::From(this)->compatible_roadtypes) == 0) {
return_cmd_error(no_depot[this->type]);
}
location = specific_depot; location = specific_depot;
destination = (this->type == VEH_AIRCRAFT) ? GetStationIndex(specific_depot) : GetDepotIndex(specific_depot); destination = (this->type == VEH_AIRCRAFT) ? GetStationIndex(specific_depot) : GetDepotIndex(specific_depot);
reverse = false; reverse = false;

View File

@@ -3863,7 +3863,7 @@ public:
{ {
const Vehicle *v = Vehicle::Get(this->window_number); const Vehicle *v = Vehicle::Get(this->window_number);
if (IsDepotTile(tile) && GetDepotVehicleType(tile) == v->type && IsInfraTileUsageAllowed(v->type, v->owner, tile)) { if (IsDepotTile(tile) && GetDepotVehicleType(tile) == v->type && IsInfraTileUsageAllowed(v->type, v->owner, tile)) {
if (v->type == VEH_ROAD && (GetRoadTypes(tile) & RoadVehicle::From(v)->compatible_roadtypes) == 0) return; if (v->type == VEH_ROAD && (GetPresentRoadTypes(tile) & RoadVehicle::From(v)->compatible_roadtypes) == 0) return;
DoCommandP(v->tile, v->index | (this->depot_select_ctrl_pressed ? DEPOT_SERVICE : 0U) | DEPOT_SPECIFIC, tile, GetCmdSendToDepot(v)); DoCommandP(v->tile, v->index | (this->depot_select_ctrl_pressed ? DEPOT_SERVICE : 0U) | DEPOT_SPECIFIC, tile, GetCmdSendToDepot(v));
ResetObjectToPlace(); ResetObjectToPlace();
this->RaiseButtons(); this->RaiseButtons();