CvCivilizationInfo& kCivilizationInfo = GC.getCivilizationInfo(kParent.getCivilizationType());
int iNumFreeUnits = kCivilizationInfo.getNumCivilizationFreeUnits();
std::vector<int> aiUnitWeights(iNumFreeUnits, 100);
for (int i = 0; i < iNumFreeUnits; ++i)
{
int iUnitClass = kCivilizationInfo.getCivilizationFreeUnitsClass(i);
UnitTypes eUnit = (UnitTypes) kCivilizationInfo.getCivilizationUnits(iUnitClass);
if (eUnit == NO_UNIT)
{
aiUnitWeights[i] = 0;
}
else
{
if (GC.getUnitInfo(eUnit).getDomainType() == DOMAIN_SEA)
{
aiUnitWeights[i] += std::max(-100, GC.getDefineINT("REVOLUTION_EUROPE_UNIT_SHIP_MODIFIER"));
}
}
}
if (iNumFreeUnits > 0)
{
int iIndex = GC.getGameINLINE().getSorenRand().pickValue(aiUnitWeights, "Pick Expeditionary force unit");
int iUnitClass = kCivilizationInfo.getCivilizationFreeUnitsClass(iIndex);
ProfessionTypes eUnitProfession = (ProfessionTypes) kCivilizationInfo.getCivilizationFreeUnitsProfession(iIndex);
UnitTypes eUnit = (UnitTypes)kCivilizationInfo.getCivilizationUnits(iUnitClass);
FAssert(eUnit != NO_UNIT);
int iNumUnits = std::max(1, getRevolutionEuropeUnitThresholdMultiplier() / 100);
for (int i = 0; i < iNumUnits; ++i)
{
addRevolutionEuropeUnit(eUnit, eUnitProfession);
}
const wchar* szUnitName;
if (eUnitProfession != NO_PROFESSION)
{
szUnitName = GC.getProfessionInfo(eUnitProfession).getTextKeyWide();
}
else
{
szUnitName = GC.getUnitInfo(eUnit).getTextKeyWide();
}
CvWString szBuffer = gDLL->getText("TXT_KEY_NEW_EUROPE_ARMY", kParent.getCivilizationShortDescriptionKey(), getCivilizationShortDescriptionKey(), szUnitName, kParent.getCivilizationAdjectiveKey());
gDLL->getInterfaceIFace()->addMessage(getID(), true, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_UNIT_GREATPEOPLE", MESSAGE_TYPE_INFO, GC.getUnitInfo(eUnit).getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_UNIT_TEXT"));
}