mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-04 05:15:21 +00:00
(svn r13836) -Fix [FS#2074]: Automatically recalculate inflation if NewGRFs are changed and cargo types are added, so that cargo payment rates are correct.
This commit is contained in:
parent
49c971c8eb
commit
ea7ed286a6
@ -621,7 +621,7 @@ static void AddSingleInflation(Money *value, uint16 *frac, int32 amt)
|
||||
}
|
||||
}
|
||||
|
||||
static void AddInflation()
|
||||
static void AddInflation(bool check_year = true)
|
||||
{
|
||||
/* The cargo payment inflation differs from the normal inflation, so the
|
||||
* relative amount of money you make with a transport decreases slowly over
|
||||
@ -638,7 +638,7 @@ static void AddInflation()
|
||||
* inflation doesn't add anything after that either; it even makes playing
|
||||
* it impossible due to the diverging cost and income rates.
|
||||
*/
|
||||
if ((_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
|
||||
if (check_year && (_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
|
||||
|
||||
/* Approximation for (100 + infl_amount)% ** (1 / 12) - 100%
|
||||
* scaled by 65536
|
||||
@ -818,6 +818,35 @@ void StartupEconomy()
|
||||
_economy.fluct = GB(Random(), 0, 8) + 168;
|
||||
}
|
||||
|
||||
void ResetEconomy()
|
||||
{
|
||||
/* Test if resetting the economy is needed. */
|
||||
bool needed = false;
|
||||
|
||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||
const CargoSpec *cs = GetCargo(c);
|
||||
if (!cs->IsValid()) continue;
|
||||
if (_cargo_payment_rates[c] == 0) {
|
||||
needed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!needed) return;
|
||||
|
||||
/* Remember old unrounded maximum loan value. NewGRF has the ability
|
||||
* to change all the other inflation affected base costs. */
|
||||
Money old_value = _economy.max_loan_unround;
|
||||
|
||||
/* Reset the economy */
|
||||
StartupEconomy();
|
||||
InitializeLandscapeVariables(false);
|
||||
|
||||
/* Reapply inflation, ignoring the year */
|
||||
while (old_value > _economy.max_loan_unround) {
|
||||
AddInflation(false);
|
||||
}
|
||||
}
|
||||
|
||||
Money GetPriceByIndex(uint8 index)
|
||||
{
|
||||
@ -1718,8 +1747,7 @@ void LoadUnloadStation(Station *st)
|
||||
void PlayersMonthlyLoop()
|
||||
{
|
||||
PlayersGenStatistics();
|
||||
if (_settings_game.economy.inflation && _cur_year < MAX_YEAR)
|
||||
AddInflation();
|
||||
if (_settings_game.economy.inflation) AddInflation();
|
||||
PlayersPayInterest();
|
||||
/* Reset the _current_player flag */
|
||||
_current_player = OWNER_NONE;
|
||||
|
@ -19,6 +19,7 @@ struct Player;
|
||||
|
||||
void ResetPriceBaseMultipliers();
|
||||
void SetPriceBaseMultiplier(uint price, byte factor);
|
||||
void ResetEconomy();
|
||||
|
||||
extern const ScoreInfo _score_info[];
|
||||
extern int _score_part[MAX_PLAYERS][SCORE_END];
|
||||
|
@ -2454,6 +2454,7 @@ void ReloadNewGRFData()
|
||||
/* reload grf data */
|
||||
GfxLoadSprites();
|
||||
LoadStringWidthTable();
|
||||
ResetEconomy();
|
||||
/* reload vehicles */
|
||||
ResetVehiclePosHash();
|
||||
AfterLoadVehicles(false);
|
||||
|
Loading…
Reference in New Issue
Block a user