(svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
authorsmatz
Fri, 04 Apr 2008 15:10:54 +0000
changeset 9311 15b1f9932b27
parent 9310 08b3b745d299
child 9312 d30aee0a6055
(svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
src/town_cmd.cpp
--- a/src/town_cmd.cpp	Fri Apr 04 14:53:06 2008 +0000
+++ b/src/town_cmd.cpp	Fri Apr 04 15:10:54 2008 +0000
@@ -2261,16 +2261,23 @@
 			if (st->time_since_load <= 20 || st->time_since_unload <= 20) {
 				n++;
 				if (IsValidPlayer(st->owner)) {
-					t->ratings[st->owner] = min((int)RATING_MAXIMUM, t->ratings[st->owner] + RATING_STATION_UP_STEP);
+					int new_rating = t->ratings[st->owner] + RATING_STATION_UP_STEP;
+					t->ratings[st->owner] = min(new_rating, INT16_MAX); // do not let it overflow
 				}
 			} else {
 				if (IsValidPlayer(st->owner)) {
-					t->ratings[st->owner] = max((int)RATING_MINIMUM, t->ratings[st->owner] + RATING_STATION_DOWN_STEP);
+					int new_rating = t->ratings[st->owner] + RATING_STATION_DOWN_STEP;
+					t->ratings[st->owner] = max(new_rating, INT16_MIN);
 				}
 			}
 		}
 	}
 
+	/* clamp all ratings to valid values */
+	for (uint i = 0; i < MAX_PLAYERS; i++) {
+		t->ratings[i] = Clamp(t->ratings[i], RATING_MINIMUM, RATING_MAXIMUM);
+	}
+
 	ClrBit(t->flags12, TOWN_IS_FUNDED);
 	if (_patches.town_growth_rate == 0 && t->fund_buildings_months == 0) return;