summaryrefslogtreecommitdiff
path: root/src/town_cmd.cpp
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2008-01-09 17:47:05 +0000
committerglx <glx@openttd.org>2008-01-09 17:47:05 +0000
commit8ee8d1b964f523df5e8264828bf17fb4f8c17dee (patch)
tree1d841ecd272ea4bb508f03002e59308992257cbf /src/town_cmd.cpp
parent55d8f7ed724b8916ec3c953aded671076ceaa3e2 (diff)
downloadopenttd-8ee8d1b964f523df5e8264828bf17fb4f8c17dee.tar.xz
(svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
Diffstat (limited to 'src/town_cmd.cpp')
-rw-r--r--src/town_cmd.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index 1f9dbfdc4..ec7ca4e02 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -522,8 +522,8 @@ static CommandCost ClearTile_Town(TileIndex tile, byte flags)
}
}
+ ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM);
if (flags & DC_EXEC) {
- ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM);
ClearTownHouse(t, tile);
}
@@ -2256,6 +2256,23 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold)
}
}
+static bool _town_rating_test = false;
+
+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];
+ }
+ ref_count++;
+ } else {
+ assert(ref_count > 0);
+ ref_count--;
+ }
+ _town_rating_test = !(ref_count == 0);
+}
void ChangeTownRating(Town *t, int add, int max)
{
@@ -2270,7 +2287,7 @@ void ChangeTownRating(Town *t, int add, int max)
SetBit(t->have_ratings, _current_player);
- rating = t->ratings[_current_player];
+ rating = _town_rating_test ? t->test_rating : t->ratings[_current_player];
if (add < 0) {
if (rating > max) {
@@ -2283,7 +2300,11 @@ void ChangeTownRating(Town *t, int add, int max)
if (rating > max) rating = max;
}
}
- t->ratings[_current_player] = rating;
+ if (_town_rating_test) {
+ t->test_rating = rating;
+ } else {
+ t->ratings[_current_player] = rating;
+ }
}
/* penalty for removing town-owned stuff */
@@ -2308,7 +2329,7 @@ bool CheckforTownRating(uint32 flags, Town *t, byte type)
*/
modemod = _default_rating_settings[_opt.diff.town_council_tolerance][type];
- if (t->ratings[_current_player] < 16 + modemod && !(flags & DC_NO_TOWN_RATING)) {
+ if ((_town_rating_test ? t->test_rating : t->ratings[_current_player]) < 16 + modemod && !(flags & DC_NO_TOWN_RATING)) {
SetDParam(0, t->index);
_error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
return false;