mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 18:40:29 +00:00
Change: Don't set vehicle on time if timetable not started (#11359)
This commit is contained in:
parent
bb50cbb772
commit
89480f3531
@ -5189,6 +5189,7 @@ STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't ti
|
||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations
|
||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station
|
||||
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... timetable is incomplete
|
||||
STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... timetable has not started yet
|
||||
|
||||
# Sign related errors
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... too many signs
|
||||
|
@ -221,6 +221,10 @@ CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_t
|
||||
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||
if (v == nullptr || !v->IsPrimaryVehicle() || v->orders == nullptr) return CMD_ERROR;
|
||||
|
||||
/* A vehicle can't be late if its timetable hasn't started.
|
||||
* If we're setting all vehicles in the group, we handle that below. */
|
||||
if (!apply_to_group && !HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) return CommandCost(STR_ERROR_TIMETABLE_NOT_STARTED);
|
||||
|
||||
CommandCost ret = CheckOwnership(v->owner);
|
||||
if (ret.Failed()) return ret;
|
||||
|
||||
@ -228,12 +232,18 @@ CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_t
|
||||
if (apply_to_group) {
|
||||
int32_t most_late = 0;
|
||||
for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) {
|
||||
/* A vehicle can't be late if its timetable hasn't started. */
|
||||
if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) continue;
|
||||
|
||||
if (u->lateness_counter > most_late) {
|
||||
most_late = u->lateness_counter;
|
||||
}
|
||||
}
|
||||
if (most_late > 0) {
|
||||
for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) {
|
||||
/* A vehicle can't be late if its timetable hasn't started. */
|
||||
if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) continue;
|
||||
|
||||
u->lateness_counter -= most_late;
|
||||
SetWindowDirty(WC_VEHICLE_TIMETABLE, u->index);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user