/// Player spending too much cash?
void CvPlayer:
oDeficit()
{
int iNumMilitaryUnits = 0;
CvUnit* pLoopUnit;
int iLoop;
for (pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))
{
if (pLoopUnit->IsCombatUnit())
iNumMilitaryUnits++;
}
// If the player has more units than cities, start disbanding things
if (iNumMilitaryUnits > getNumCities())
{
if (GC.getGame().getJonRandNum(100, "Disband rand") < 50)
{
UnitHandle pLandUnit;
UnitHandle pNavalUnit;
int iLandScore = MAX_INT;
int iNavalScore = MAX_INT;
// Look for obsolete land units if in deficit or have sufficient units
if (GetMilitaryAI()->GetLandDefenseState() <= DEFENSE_STATE_NEUTRAL)
{
pLandUnit = GetMilitaryAI()->FindBestUnitToScrap(true /*bLand*/, true /*bDeficitForcedDisband*/, iLandScore);
}
// Look for obsolete naval units if in deficit or have sufficient units
if (GetMilitaryAI()->GetNavalDefenseState() <= DEFENSE_STATE_NEUTRAL)
{
pNavalUnit = GetMilitaryAI()->FindBestUnitToScrap(false/*bNaval*/, true /*bDeficitForcedDisband*/, iNavalScore);
}
if (iLandScore < MAX_INT && (GetMilitaryAI()->GetLandDefenseState() <= GetMilitaryAI()->GetNavalDefenseState() || iLandScore <= iNavalScore))
{
if (pLandUnit)
{
CvNotifications* pNotifications = GetNotifications();
if (pNotifications)
{
Localization::String locString = Localization::Lookup("TXT_KEY_NTFN_UNIT_DISBANDED");
Localization::String locSummary = Localization::Lookup("TXT_KEY_NTFN_UNIT_DISBANDED_S");
pNotifications->Add(NOTIFICATION_UNIT_DIED, locString.toUTF8(), locSummary.toUTF8(), pLandUnit->getX(), pLandUnit->getY(), pLandUnit->getUnitType(), GetID());
}
pLandUnit->scrap();
GetMilitaryAI()->LogDeficitScrapUnit(pLandUnit);
}
}
else if (iNavalScore < MAX_INT)
{
if (pNavalUnit)
{
CvNotifications* pNotifications = GetNotifications();
if (pNotifications)
{
Localization::String locString = Localization::Lookup("TXT_KEY_NTFN_UNIT_DISBANDED");
Localization::String locSummary = Localization::Lookup("TXT_KEY_NTFN_UNIT_DISBANDED_S");
pNotifications->Add(NOTIFICATION_UNIT_DIED, locString.toUTF8(), locSummary.toUTF8(), pNavalUnit->getX(), pNavalUnit->getY(), pNavalUnit->getUnitType(), GetID());
}
pNavalUnit->scrap();
GetMilitaryAI()->LogDeficitScrapUnit(pNavalUnit);
}
}
}
}
}