{
CRAZY_MACRO_GO_AWAY_1(0x4FEEDA, Unit);
int nParentCountryIndex = HouseTypeClass::FindIndex(pThis->Type->ParentCountry);
DWORD flagsOwner = 1 << nParentCountryIndex;
UnitTypeClass* pHarvester = NULL;
for(int i = 0; i < RulesClass::Instance->HarvesterUnit.Count; i++) {
UnitTypeClass* pCurrent = RulesClass::Instance->HarvesterUnit[i];
if(pCurrent->OwnerFlags & flagsOwner) {
pHarvester = pCurrent;
break;
}
}
if(pHarvester) {
int nHarvesters = pThis->CountResourceGatherers;
int mMaxHarvesters =
RulesClass::Instance->HarvestersPerRefinery[AIDiff]
* pThis->CountResourceDestinations;
if(!pThis->FirstBuildableFromArray(&RulesClass::Instance->BuildRefinery)) {
mMaxHarvesters =
RulesClass::Instance->AISlaveMinerNumber[AIDiff];
}
if(pThis->IQLevel2 >= RulesClass::Instance->Harvester && !pThis->unknown_bool_242) {
bool bPlayerControl;
if(SessionClass::Instance->GameMode == GameMode::Campaign) {
bPlayerControl = pThis->CurrentPlayer || pThis->PlayerControl;
} else {
bPlayerControl = pThis->CurrentPlayer;
}
if(!bPlayerControl && nHarvesters < mMaxHarvesters && pThis->TechLevel >= pHarvester->TechLevel) {
pThis->ProducingUnitTypeIndex = pHarvester->ArrayIndex;
return ret();
}
}
} else {
int mMaxHarvesters = RulesClass::Instance->AISlaveMinerNumber[AIDiff];
if(pThis->CountResourceGatherers < mMaxHarvesters) {
if(BuildingTypeClass* pBT = pThis->FirstBuildableFromArray(&RulesClass::Instance->BuildRefinery)) {
if(UnitTypeClass* pSlaveMiner = pBT->UndeploysInto) {
pThis->ProducingUnitTypeIndex = pSlaveMiner->ArrayIndex;
return ret();
}
}
}
}
CRAZY_MACRO_GO_AWAY_2(Unit);
}