@ -2446,14 +2446,14 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold)
}
static bool _town_rating_test = false ;
std : : map < const Town * , int > _town_test_ratings ;
void SetTownRatingTestMode ( bool mode )
{
static int ref_count = 0 ;
if ( mode ) {
if ( ref_count = = 0 ) {
Town * t ;
FOR_ALL_TOWNS ( t ) t - > test_rating = t - > ratings [ _current_player ] ;
_town_test_ratings . empty ( ) ;
}
ref_count + + ;
} else {
@ -2463,6 +2463,17 @@ void SetTownRatingTestMode(bool mode)
_town_rating_test = ! ( ref_count = = 0 ) ;
}
static int GetRating ( const Town * t )
{
if ( _town_rating_test ) {
std : : map < const Town * , int > : : iterator it = _town_test_ratings . find ( t ) ;
if ( it ! = _town_test_ratings . end ( ) ) {
return ( * it ) . second ;
}
}
return t - > ratings [ _current_player ] ;
}
void ChangeTownRating ( Town * t , int add , int max )
{
/* if magic_bulldozer cheat is active, town doesn't penaltize for removing stuff */
@ -2474,8 +2485,7 @@ void ChangeTownRating(Town *t, int add, int max)
SetBit ( t - > have_ratings , _current_player ) ;
int rating = _town_rating_test ? t - > test_rating : t - > ratings [ _current_player ] ;
int rating = GetRating ( t ) ;
if ( add < 0 ) {
if ( rating > max ) {
rating + = add ;
@ -2488,7 +2498,7 @@ void ChangeTownRating(Town *t, int add, int max)
}
}
if ( _town_rating_test ) {
t- > test_rating = rating ;
_town_test_ratings[ t ] = rating ;
} else {
t - > ratings [ _current_player ] = rating ;
}
@ -2514,7 +2524,7 @@ bool CheckforTownRating(uint32 flags, Town *t, byte type)
*/
int modemod = _default_rating_settings [ _opt . diff . town_council_tolerance ] [ type ] ;
if ( ( _town_rating_test ? t - > test_rating : t - > ratings [ _current_player ] ) < 16 + modemod & & ! ( flags & DC_NO_TOWN_RATING ) ) {
if ( GetRating ( t ) < 16 + modemod & & ! ( flags & DC_NO_TOWN_RATING ) ) {
SetDParam ( 0 , t - > index ) ;
_error_message = STR_2009_LOCAL_AUTHORITY_REFUSES ;
return false ;