(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:
18
src/rail.h
18
src/rail.h
@@ -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);
|
||||
|
Reference in New Issue
Block a user