(svn r19433) -Codechange: Limit rail clearance earnings to 3/4s of rail build cost, to avoid money making loophole when rail build cost is less than rail removal earnings.

This commit is contained in:
peter1138
2010-03-16 06:30:31 +00:00
parent f30297fdbb
commit 369975964a
2 changed files with 22 additions and 2 deletions

View File

@@ -269,6 +269,22 @@ static inline Money RailBuildCost(RailType railtype)
return (_price[PR_BUILD_RAIL] * GetRailTypeInfo(railtype)->cost_multiplier) >> 3;
}
/**
* Returns the 'cost' of clearing the specified railtype.
* @param railtype The railtype being removed.
* @return The cost.
*/
static inline Money RailClearCost(RailType railtype)
{
/* Clearing rail in fact earns money, but if the build cost is set
* very low then a loophole exists where money can be made.
* In this case we limit the removal earnings to 3/4s of the build
* cost.
*/
assert(railtype < RAILTYPE_END);
return max(_price[PR_CLEAR_RAIL], -RailBuildCost(railtype) * 3 / 4);
}
/**
* Calculates the cost of rail conversion
* @param from The railtype we are converting from
@@ -296,7 +312,7 @@ static inline Money RailConvertCost(RailType from, RailType to)
}
/* make the price the same as remove + build new type */
return RailBuildCost(to) + _price[PR_CLEAR_RAIL];
return RailBuildCost(to) + RailClearCost(from);
}
void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);