|
@@ -97,27 +97,27 @@ CommandCost CmdStartStopVehicle(TileInde
|
|
|
* return 0xFF if it can. */
|
|
|
uint16 callback = GetVehicleCallback(CBID_VEHICLE_START_STOP_CHECK, 0, 0, v->engine_type, v);
|
|
|
if (callback != CALLBACK_FAILED && GB(callback, 0, 8) != 0xFF && HasBit(p2, 0)) {
|
|
|
StringID error = GetGRFStringID(GetEngineGRFID(v->engine_type), 0xD000 + callback);
|
|
|
return_cmd_error(error);
|
|
|
}
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
if (v->IsStoppedInDepot() && (flags & DC_AUTOREPLACE) == 0) DeleteVehicleNews(p1, STR_NEWS_TRAIN_IS_WAITING + v->type);
|
|
|
|
|
|
v->vehstatus ^= VS_STOPPED;
|
|
|
if (v->type != VEH_TRAIN) v->cur_speed = 0; // trains can stop 'slowly'
|
|
|
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
|
|
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
|
|
InvalidateWindowClasses(GetWindowClassForVehicleType(v->type));
|
|
|
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
|
|
SetWindowDirty(WC_VEHICLE_DEPOT, v->tile);
|
|
|
SetWindowClassesDirty(GetWindowClassForVehicleType(v->type));
|
|
|
}
|
|
|
return CommandCost();
|
|
|
}
|
|
|
|
|
|
/** Starts or stops a lot of vehicles
|
|
|
* @param tile Tile of the depot where the vehicles are started/stopped (only used for depots)
|
|
|
* @param flags type of operation
|
|
|
* @param p1 Station/Order/Depot ID (only used for vehicle list windows)
|
|
|
* @param p2 bitmask
|
|
|
* - bit 0-4 Vehicle type
|
|
|
* - bit 5 false = start vehicles, true = stop vehicles
|
|
|
* - bit 6 if set, then it's a vehicle list window, not a depot and Tile is ignored in this case
|
|
@@ -558,17 +558,17 @@ CommandCost CmdRenameVehicle(TileIndex t
|
|
|
* @param p2 new service interval
|
|
|
*/
|
|
|
CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
|
|
{
|
|
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
|
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
|
|
|
|
uint16 serv_int = GetServiceIntervalClamped(p2, v->owner); // Double check the service interval from the user-input
|
|
|
if (serv_int != p2) return CMD_ERROR;
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
v->service_interval = serv_int;
|
|
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
|
|
SetWindowDirty(WC_VEHICLE_DETAILS, v->index);
|
|
|
}
|
|
|
|
|
|
return CommandCost();
|
|
|
}
|