forked from mirror/OpenTTD
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:
committed by
rubidium42
parent
d04aae8428
commit
bb988f940e
@@ -481,6 +481,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());
|
||||
@@ -498,14 +506,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);
|
||||
|
Reference in New Issue
Block a user