1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

calculate income

This commit is contained in:
Laserlicht
2024-07-25 02:51:00 +02:00
parent 63b8ac1a58
commit bfd1e8a7c8
8 changed files with 33 additions and 19 deletions

View File

@@ -760,6 +760,8 @@ void CGameHandler::onNewTurn()
continue;
assert(elem.first.isValidPlayer());//illegal player number!
auto playerSettings = gameState()->scenarioOps->getIthPlayersSettings(elem.first);
std::pair<PlayerColor, si32> playerGold(elem.first, elem.second.resources[EGameResID::GOLD]);
hadGold.insert(playerGold);
@@ -773,8 +775,8 @@ void CGameHandler::onNewTurn()
{
for (GameResID k = GameResID::WOOD; k < GameResID::COUNT; k++)
{
n.res[elem.first][k] += elem.second.valOfBonuses(BonusType::RESOURCES_CONSTANT_BOOST, BonusSubtypeID(k));
n.res[elem.first][k] += elem.second.valOfBonuses(BonusType::RESOURCES_TOWN_MULTIPLYING_BOOST, BonusSubtypeID(k)) * elem.second.towns.size();
n.res[elem.first][k] += elem.second.valOfBonuses(BonusType::RESOURCES_CONSTANT_BOOST, BonusSubtypeID(k)) * playerSettings.handicap.percentIncome / 100;
n.res[elem.first][k] += elem.second.valOfBonuses(BonusType::RESOURCES_TOWN_MULTIPLYING_BOOST, BonusSubtypeID(k)) * elem.second.towns.size() * playerSettings.handicap.percentIncome / 100;
}
if(newWeek) //weekly crystal generation if 1 or more crystal dragons in any hero army or town garrison
@@ -806,7 +808,7 @@ void CGameHandler::onNewTurn()
}
}
if(hasCrystalGenCreature)
n.res[elem.first][EGameResID::CRYSTAL] += 3;
n.res[elem.first][EGameResID::CRYSTAL] += 3 * playerSettings.handicap.percentIncome / 100;
}
}
@@ -828,7 +830,7 @@ void CGameHandler::onNewTurn()
{
for (GameResID k = GameResID::WOOD; k < GameResID::COUNT; k++)
{
n.res[elem.first][k] += h->valOfBonuses(BonusType::GENERATE_RESOURCE, BonusSubtypeID(k));
n.res[elem.first][k] += h->valOfBonuses(BonusType::GENERATE_RESOURCE, BonusSubtypeID(k)) * playerSettings.handicap.percentIncome / 100;
}
}
}
@@ -1428,10 +1430,8 @@ void CGameHandler::giveResource(PlayerColor player, GameResID which, int val) //
{
if (!val) return; //don't waste time on empty call
auto * playerSettings = gs->scenarioOps->getPlayersSettings(player);
TResources resources;
resources[which] = val * playerSettings->handicap.percentIncome / 100;
resources[which] = val;
giveResources(player, resources);
}