diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index e3045be0a4..fa16ab26bf 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -451,7 +451,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) RebuildVehicleLists(); InvalidateWindow(WC_COMPANY, v->owner); if (IsLocalPlayer()) - InvalidateAutoreplaceWindow(VEH_AIRCRAFT); //updates the replace Aircraft window + InvalidateAutoreplaceWindow(VEH_AIRCRAFT, v->group_id); //updates the replace Aircraft window GetPlayer(_current_player)->num_engines[p1]++; } diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index f77428ddaa..159c218249 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -38,17 +38,19 @@ void InitializeVehiclesGuiList() /** Rebuild the left autoreplace list if an engine is removed or added * @param e Engine to check if it is removed or added + * @param id_g The group the engine belongs to * Note: this function only works if it is called either * - when a new vehicle is build, but before it's counted in num_engines * - when a vehicle is deleted and after it's substracted from num_engines * - when not changing the count (used when changing replace orders) */ -void InvalidateAutoreplaceWindow(EngineID e) +void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g) { Player *p = GetPlayer(_local_player); byte type = GetEngine(e)->type; + uint num_engines = IsDefaultGroupID(id_g) ? p->num_engines[e] : GetGroup(id_g)->num_engines[e]; - if (p->num_engines[e] == 0) { + if (num_engines == 0 || p->num_engines[e] == 0) { /* We don't have any of this engine type. * Either we just sold the last one, we build a new one or we stopped replacing it. * In all cases, we need to update the left list */ diff --git a/src/players.cpp b/src/players.cpp index 109f5c71d3..1d529872a3 100644 --- a/src/players.cpp +++ b/src/players.cpp @@ -736,7 +736,7 @@ CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2 cost = RemoveEngineReplacementForPlayer(p, old_engine_type,id_g, flags); } - if (IsLocalPlayer()) InvalidateAutoreplaceWindow(old_engine_type); + if (IsLocalPlayer()) InvalidateAutoreplaceWindow(old_engine_type, id_g); return cost; } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 3ca03686a8..9fa95b8e0d 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -269,7 +269,7 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) RebuildVehicleLists(); InvalidateWindow(WC_COMPANY, v->owner); if (IsLocalPlayer()) - InvalidateAutoreplaceWindow(VEH_ROAD); // updates the replace Road window + InvalidateAutoreplaceWindow(VEH_ROAD, v->group_id); // updates the replace Road window GetPlayer(_current_player)->num_engines[p1]++; } diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 2a76c8d8c7..f98fde1445 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -894,7 +894,7 @@ CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) RebuildVehicleLists(); InvalidateWindow(WC_COMPANY, v->owner); if (IsLocalPlayer()) - InvalidateAutoreplaceWindow(VEH_SHIP); // updates the replace Ship window + InvalidateAutoreplaceWindow(VEH_SHIP, v->group_id); // updates the replace Ship window GetPlayer(_current_player)->num_engines[p1]++; } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index cbd3548f4b..ad71a7f397 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -587,7 +587,7 @@ static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 fla InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); if (IsLocalPlayer()) { - InvalidateAutoreplaceWindow(VEH_TRAIN); // updates the replace Train window + InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window } GetPlayer(_current_player)->num_engines[engine]++; } @@ -771,7 +771,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 RebuildVehicleLists(); InvalidateWindow(WC_COMPANY, v->owner); if (IsLocalPlayer()) - InvalidateAutoreplaceWindow(VEH_TRAIN); // updates the replace Train window + InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window GetPlayer(_current_player)->num_engines[p1]++; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 79e10a1e05..e7080e1a52 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -677,7 +677,7 @@ void DestroyVehicle(Vehicle *v) if (IsEngineCountable(v)) { GetPlayer(v->owner)->num_engines[v->engine_type]--; - if (v->owner == _local_player) InvalidateAutoreplaceWindow(v->engine_type); + if (v->owner == _local_player) InvalidateAutoreplaceWindow(v->engine_type, v->group_id); if (IsValidGroupID(v->group_id)) GetGroup(v->group_id)->num_engines[v->engine_type]--; if (v->IsPrimaryVehicle()) DecreaseGroupNumVehicle(v->group_id); diff --git a/src/vehicle.h b/src/vehicle.h index c51b49f058..df587b84b1 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -567,7 +567,7 @@ CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, bool IsVehicleInDepot(const Vehicle *v); void VehicleEnterDepot(Vehicle *v); -void InvalidateAutoreplaceWindow(EngineID e); +void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g); CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs); bool CanBuildVehicleInfrastructure(VehicleType type);