void CvCity::changeNumBonuses(BonusTypes eIndex, int iChange)
{
bool bOldHasBonus;
FAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");
FAssertMsg(eIndex < GC.getNumBonusInfos(), "eIndex expected to be < GC.getNumBonusInfos()");
if (iChange != 0)
{
bOldHasBonus = hasBonus(eIndex);
// Smarter Orcs start - patch for number of bonuses.
if ((iChange > 0) && (m_paiFreeBonus[eIndex] < m_paiMaxFreeBonus[eIndex]))
{
m_paiFreeBonus[eIndex] += iChange;
}
else
{
m_paiNumBonuses[eIndex] = (m_paiNumBonuses[eIndex] + iChange);
}
if (m_paiNumBonuses[eIndex] < 0)
{
if (m_paiFreeBonus[eIndex] > 0)
{
m_paiFreeBonus[eIndex] += m_paiNumBonuses[eIndex];
m_paiNumBonuses[eIndex] = 0; // for breakpoint.
}
}
// Smarter Orcs end
if (bOldHasBonus != hasBonus(eIndex))
{
if (hasBonus(eIndex))
{
processBonus(eIndex, 1);
}
else
{
processBonus(eIndex, -1);
}
}
}
}
void CvCity::read(FDataStreamBase* pStream)
.
.
.
pStream->Read(GC.getNumBonusInfos(), m_paiMaxFreeBonus); // Smarter Orcs
void CvCity::write(FDataStreamBase* pStream)
.
.
.
pStream->Write(GC.getNumBonusInfos(), m_paiMaxFreeBonus); // Smarter Orcs
CvCity::CvCity()
.
.
.
m_paiMaxFreeBonus = NULL; // Smarter Orcs
void CvCity::uninit()
.
.
.
SAFE_DELETE_ARRAY(m_paiMaxFreeBonus); // Smarter Orcs
void CvCity::reset(int iID, PlayerTypes eOwner, int iX, int iY, bool bConstructorCall)
.
.
.
if (!bConstructorCall)
{
FAssertMsg((0 < GC.getNumBonusInfos()), "GC.getNumBonusInfos() is not greater than zero but an array is being allocated in CvCity::reset");
m_paiFreeBonus = new int[GC.getNumBonusInfos()];
m_paiMaxFreeBonus = new int[GC.getNumBonusInfos()]; // Smarter Orcs
m_paiNumBonuses = new int[GC.getNumBonusInfos()];
void CvCity::changeFreeBonus(BonusTypes eIndex, int iChange)
{
FAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");
FAssertMsg(eIndex < GC.getNumBonusInfos(), "eIndex expected to be < GC.getNumBonusInfos()");
if (iChange != 0)
{
plot()->updatePlotGroupBonus(false);
m_paiFreeBonus[eIndex] = (m_paiFreeBonus[eIndex] + iChange);
m_paiMaxFreeBonus[eIndex] += iChange; // Smarter Orcs
FAssert(getFreeBonus(eIndex) >= 0);
plot()->updatePlotGroupBonus(true);
}
}
In CvCity.h:
int* m_paiMaxFreeBonus; // Smarter Orcs