There was found a bug in int CvCity::getProductionModifier(UnitTypes eUnit). It appears when you're running a civic which gives you negative military unit production bonus. It simply ingnores it and gives you assert failure if running a debug dll.
A simple fix: we change the function to return the iMultiplier.
A simple fix: we change the function to return the iMultiplier.
Code:
int CvCity::getProductionModifier(UnitTypes eUnit) const
{
int iI;
int iMultiplier = GET_PLAYER(getOwnerINLINE()).getProductionModifier(eUnit);
iMultiplier += getDomainProductionModifier((DomainTypes)(GC.getUnitInfo(eUnit).getDomainType()));
if (GC.getUnitInfo(eUnit).isMilitaryProduction())
{
iMultiplier += getMilitaryProductionModifier();
}
for (iI = 0; iI < GC.getNumBonusInfos(); iI++)
{
if (hasBonus((BonusTypes)iI))
{
iMultiplier += GC.getUnitInfo(eUnit).getBonusProductionModifier(iI);
}
}
if (GET_PLAYER(getOwnerINLINE()).getStateReligion() != NO_RELIGION)
{
if (isHasReligion(GET_PLAYER(getOwnerINLINE()).getStateReligion()))
{
iMultiplier += GET_PLAYER(getOwnerINLINE()).getStateReligionUnitProductionModifier();
}
}
/*************************************************************************************************/
/**BugFixForNegativeUnitProductionBonus 01/04/10 NotSoGood **/
/** **/
/** **/
/*************************************************************************************************/
/**Original code start
[COLOR="Blue"]return std::max(0, iMultiplier);[/COLOR]
/**Original code end**/
[COLOR="Red"]return iMultiplier;[/COLOR]
/*************************************************************************************************/
/**BugFixForNegativeUnitProductionBonus END **/
/*************************************************************************************************/
}