| Old revision #pv8ckd8ru | New revision #pun0ehlix | ||
|---|---|---|---|
| 42 | if (!IsWaterTile(tile + delta)) c->infrastructure.water++; | 42 | if (!IsWaterTile(tile + delta)) c->infrastructure.water++; |
| 43 | /* Count for the lock itself. */ | 43 | /* Count for the lock itself. */ |
| 44 | c->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock is three tiles. | 44 | c->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock is three tiles. |
| 45 | @@ -348,6 +353,9 @@ | 45 | @@ -324,6 +329,8 @@ |
| 46 | */ | ||
| 47 | static CommandCost RemoveLock(TileIndex tile, DoCommandFlag flags) | ||
| 48 | { | ||
| 49 | + CommandCost cost(EXPENSES_CONSTRUCTION); | ||
| 50 | + | ||
| 51 | if (GetTileOwner(tile) != OWNER_NONE) { | ||
| 52 | CommandCost ret = CheckTileOwnership(tile); | ||
| 53 | if (ret.Failed()) return ret; | ||
| 54 | @@ -336,7 +343,7 @@ | ||
| 55 | if (ret.Succeeded()) ret = EnsureNoVehicleOnGround(tile + delta); | ||
| 56 | if (ret.Succeeded()) ret = EnsureNoVehicleOnGround(tile - delta); | ||
| 57 | if (ret.Failed()) return ret; | ||
| 58 | - | ||
| 59 | + if (GetWaterClass(tile) != WATER_CLASS_RIVER) cost.AddCost(_price[PR_CLEAR_CANAL]); | ||
| 60 | if (flags & DC_EXEC) { | ||
| 61 | /* Remove middle part from company infrastructure count. */ | ||
| 62 | Company *c = Company::GetIfValid(GetTileOwner(tile)); | ||
| 63 | @@ -348,6 +355,9 @@ | ||
| 46 | if (GetWaterClass(tile) == WATER_CLASS_RIVER) { | 64 | if (GetWaterClass(tile) == WATER_CLASS_RIVER) { |
| 47 | MakeRiver(tile, Random()); | 65 | MakeRiver(tile, Random()); |
| 48 | } else { | 66 | } else { | … | … |
| 52 | DoClearSquare(tile); | 70 | DoClearSquare(tile); |
| 53 | } | 71 | } |
| 54 | MakeWaterKeepingClass(tile + delta, GetTileOwner(tile + delta)); | 72 | MakeWaterKeepingClass(tile + delta, GetTileOwner(tile + delta)); |
| 55 | @@ -1276,8 +1284,14 @@ | 73 | @@ -357,7 +367,9 @@ |
| 74 | MarkCanalsAndRiversAroundDirty(tile + delta); | ||
| 75 | } | ||
| 76 | |||
| 77 | - return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_LOCK]); | ||
| 78 | + cost.AddCost(_price[PR_CLEAR_LOCK]); | ||
| 79 | + return cost; | ||
| 80 | + | ||
| 81 | } | ||
| 82 | |||
| 83 | /** | ||
| 84 | @@ -1275,9 +1287,15 @@ | ||
| 85 | bool is_lock_middle = IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE; | ||
| 56 | 86 | ||
| 57 | /* No need to dirty company windows here, we'll redraw the whole screen anyway. */ | 87 | /* No need to dirty company windows here, we'll redraw the whole screen anyway. */ |
| 58 | if (is_lock_middle) Company::Get(old_owner)->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. | 88 | - if (is_lock_middle) Company::Get(old_owner)->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. |
| 59 | + if (GetWaterClass(tile) == WATER_CLASS_CANAL && is_lock_middle) { | 89 | + if (is_lock_middle) { |
| 60 | + Company::Get(old_owner)->infrastructure.water--; | 90 | + Company::Get(old_owner)->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. |
| 91 | + if (GetWaterClass(tile) == WATER_CLASS_CANAL) Company::Get(old_owner)->infrastructure.water--; | ||
| 61 | + } | 92 | + } |
| 62 | if (new_owner != INVALID_OWNER) { | 93 | if (new_owner != INVALID_OWNER) { |
| 63 | if (is_lock_middle) Company::Get(new_owner)->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. | 94 | - if (is_lock_middle) Company::Get(new_owner)->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. |
| 64 | + if (GetWaterClass(tile) == WATER_CLASS_CANAL && is_lock_middle) { | 95 | + if (is_lock_middle) { |
| 65 | + Company::Get(new_owner)->infrastructure.water++; | 96 | + Company::Get(new_owner)->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts. |
| 97 | + if (GetWaterClass(tile) == WATER_CLASS_CANAL) Company::Get(new_owner)->infrastructure.water++; | ||
| 66 | + } | 98 | + } |
| 67 | /* Only subtract from the old owner here if the new owner is valid, | 99 | /* Only subtract from the old owner here if the new owner is valid, |
| 68 | * otherwise we clear ship depots and canal water below. */ | 100 | * otherwise we clear ship depots and canal water below. */ |