Fix desync caused by "train too heavy" advice message.

_current_company was changed in an unsafe and non-deterministic way.
This commit is contained in:
Jonathan G Rennison
2015-12-15 00:01:32 +00:00
parent eed722c777
commit 3ee8c76fa8

View File

@@ -914,15 +914,14 @@ void CallVehicleTicks()
case VEH_TRAIN: case VEH_TRAIN:
if (HasBit(Train::From(v)->flags, VRF_TOO_HEAVY)) { if (HasBit(Train::From(v)->flags, VRF_TOO_HEAVY)) {
_current_company = v->owner; if (v->owner == _local_company) {
if (IsLocalCompany()) {
SetDParam(0, v->index); SetDParam(0, v->index);
SetDParam(1, STR_ERROR_TRAIN_TOO_HEAVY); SetDParam(1, STR_ERROR_TRAIN_TOO_HEAVY);
AddVehicleNewsItem(STR_ERROR_TRAIN_TOO_HEAVY, NT_ADVICE, v->index); AddVehicleNewsItem(STR_ERROR_TRAIN_TOO_HEAVY, NT_ADVICE, v->index);
ClrBit(Train::From(v)->flags, VRF_TOO_HEAVY);
} }
_current_company = OWNER_NONE; ClrBit(Train::From(v)->flags, VRF_TOO_HEAVY);
} }
/* FALL THROUGH */
case VEH_ROAD: case VEH_ROAD:
case VEH_AIRCRAFT: case VEH_AIRCRAFT:
case VEH_SHIP: { case VEH_SHIP: {