Пытался разобраться с этой функцией. Во первых она наглая, во вторых не должна она так часто вызываться, она же только для переговоров.
Немного изменил её, дабы calculateGoldRate() высчитывался лишь один раз.
Скрытый текст
Код:
int CvPlayerAI::AI_maxGoldPerTurnTrade(PlayerTypes ePlayer) const
{
int iMaxGoldPerTurn;
int GoldRate = calculateGoldRate();//Cansei 1.09.2013
FAssert(ePlayer != getID());
if (isHuman() || (GET_PLAYER(ePlayer).getTeam() == getTeam()))
{
// iMaxGoldPerTurn = (calculateGoldRate() + (getGold() / GC.getDefineINT("PEACE_TREATY_LENGTH")));//Cansei 1.09.2013
iMaxGoldPerTurn = (GoldRate + (getGold() / 10));
}
else
{
iMaxGoldPerTurn = getTotalPopulation();
iMaxGoldPerTurn *= GC.getLeaderHeadInfo(getPersonalityType()).getMaxGoldPerTurnTradePercent();
iMaxGoldPerTurn /= 100;
iMaxGoldPerTurn += std::min(0, getGoldPerTurnByPlayer(ePlayer));
}
// return std::max(0, std::min(iMaxGoldPerTurn, calculateGoldRate()));//Cansei 1.09.2013
return std::max(0, std::min(iMaxGoldPerTurn, GoldRate));
}
Функция немного присмирела, но все равно остается неприлично прожорливой. Буду смотреть дальше, вглубь calculateGoldRate().
Код:
0x2eb90a0 CvPlayerAI::AI_maxGoldPerTurnTrade 2.25
Код:
0x2eb90a0 CvPlayerAI::AI_maxGoldPerTurnTrade 2.80
Код:
0x2eb90a0 CvPlayerAI::AI_maxGoldPerTurnTrade 1.96