1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-28 00:49:11 +00:00

Fix #10638: Incorrect water infra total when building canal over object

In the case where the object is on an unowned canal tile and
the new canal tile is owned
This commit is contained in:
Jonathan G Rennison
2023-04-12 00:18:32 +01:00
committed by Loïc Guilloux
parent da20e0f6e6
commit 08a5637f98

View File

@@ -475,6 +475,14 @@ CommandCost CmdBuildCanal(DoCommandFlag flags, TileIndex tile, TileIndex start_t
if (!water) cost.AddCost(ret);
if (flags & DC_EXEC) {
if (IsTileType(current_tile, MP_WATER) && IsCanal(current_tile)) {
Owner owner = GetTileOwner(current_tile);
if (Company::IsValidID(owner)) {
Company::Get(owner)->infrastructure.water--;
DirtyCompanyInfrastructureWindows(owner);
}
}
switch (wc) {
case WATER_CLASS_RIVER:
MakeRiver(current_tile, Random());
@@ -492,14 +500,11 @@ CommandCost CmdBuildCanal(DoCommandFlag flags, TileIndex tile, TileIndex start_t
FALLTHROUGH;
default:
/* If we overbuild a water object with a canal, don't update the infrastructure total. */
bool is_existing_canal = IsTileType(current_tile, MP_WATER) && IsCanal(current_tile);
if (Company::IsValidID(_current_company) && !is_existing_canal) {
MakeCanal(current_tile, _current_company, Random());
if (Company::IsValidID(_current_company)) {
Company::Get(_current_company)->infrastructure.water++;
DirtyCompanyInfrastructureWindows(_current_company);
}
MakeCanal(current_tile, _current_company, Random());
break;
}
MarkTileDirtyByTile(current_tile);