From 478fcadd21936412332717b0f1eab564e8e88eaa Mon Sep 17 00:00:00 2001 From: fonsinchen Date: Fri, 7 Jun 2013 22:22:52 +0000 Subject: (svn r25330) -Fix [FS#5583]: return some reserved cargo if vehicle is overloaded by station stopping acceptance for cargo scheduled to be delivered --- src/economy.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/economy.cpp b/src/economy.cpp index aa7d94ce3..7ae5daccb 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1299,6 +1299,7 @@ static void ReserveConsist(Station *st, Vehicle *u, CargoArray *consist_capleft) continue; } + assert(v->cargo_cap >= v->cargo.RemainingCount()); uint cap = v->cargo_cap - v->cargo.RemainingCount(); /* Nothing to do if the vehicle is full */ @@ -1398,6 +1399,12 @@ static void LoadUnloadVehicle(Vehicle *front) v->cargo.Reassign(v->cargo.ActionCount(VehicleCargoList::MTA_DELIVER), VehicleCargoList::MTA_DELIVER, VehicleCargoList::MTA_TRANSFER); } else { + uint new_remaining = v->cargo.RemainingCount() + v->cargo.ActionCount(VehicleCargoList::MTA_DELIVER); + if (v->cargo_cap < new_remaining) { + /* Return some of the reserved cargo to not overload the vehicle. */ + v->cargo.Return(new_remaining - v->cargo_cap, &ge->cargo); + } + /* Keep instead of delivering. This may lead to no cargo being unloaded, so ...*/ v->cargo.Reassign(v->cargo.ActionCount(VehicleCargoList::MTA_DELIVER), VehicleCargoList::MTA_DELIVER, VehicleCargoList::MTA_KEEP); -- cgit v1.2.3-54-g00ecf