diff options
author | frosch <frosch@openttd.org> | 2013-08-06 21:01:14 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2013-08-06 21:01:14 +0000 |
commit | fbe6b92b1da1f2586738f1cc9b268a2783966321 (patch) | |
tree | 2e57895dbdf71d9e8b7fc2f804f2e9b1acdb04f3 | |
parent | 8f95bab00174fe3038bbdb14ea5077c11b10f0bb (diff) | |
download | openttd-fbe6b92b1da1f2586738f1cc9b268a2783966321.tar.xz |
(svn r25698) -Fix [FS#5700]: Autoreplace/renew also refits free wagons.
-rw-r--r-- | src/train_cmd.cpp | 2 | ||||
-rw-r--r-- | src/vehicle_cmd.cpp | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 0b0c0b328..b61a9116c 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -418,7 +418,7 @@ int Train::GetCurrentMaxSpeed() const /** Update acceleration of the train from the cached power and weight. */ void Train::UpdateAcceleration() { - assert(this->IsFrontEngine()); + assert(this->IsFrontEngine() || this->IsFreeWagon()); uint power = this->gcache.cached_power; uint weight = this->gcache.cached_weight; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 8bd6f1b9f..68e6fff1a 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -447,11 +447,12 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (ret.Failed()) return ret; bool auto_refit = HasBit(p2, 6); + bool free_wagon = v->type == VEH_TRAIN && Train::From(front)->IsFreeWagon(); // used by autoreplace/renew /* Don't allow shadows and such to be refitted. */ if (v != front && (v->type == VEH_SHIP || v->type == VEH_AIRCRAFT)) return CMD_ERROR; /* Allow auto-refitting only during loading and normal refitting only in a depot. */ - if ((!auto_refit || !front->current_order.IsType(OT_LOADING)) && !front->IsStoppedInDepot()) return_cmd_error(STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT + front->type); + if (!free_wagon && (!auto_refit || !front->current_order.IsType(OT_LOADING)) && !front->IsStoppedInDepot()) return_cmd_error(STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT + front->type); if (front->vehstatus & VS_CRASHED) return_cmd_error(STR_ERROR_VEHICLE_IS_DESTROYED); /* Check cargo */ @@ -490,9 +491,11 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } front->MarkDirty(); - InvalidateWindowData(WC_VEHICLE_DETAILS, front->index); + if (!free_wagon) { + InvalidateWindowData(WC_VEHICLE_DETAILS, front->index); + InvalidateWindowClassesData(GetWindowClassForVehicleType(v->type), 0); + } SetWindowDirty(WC_VEHICLE_DEPOT, front->tile); - InvalidateWindowClassesData(GetWindowClassForVehicleType(v->type), 0); } else { /* Always invalidate the cache; querycost might have filled it. */ v->InvalidateNewGRFCacheOfChain(); |