Bazaar developer reference

CityStrategyAIHelpers::IsTestCityStrategy_GoodGPCity(CvCity *)

Defined in
CvCityStrategyAI.cpp, line 3230
Hook name
CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity

Hooks

static bool BeforeCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity(CvCity* pCity, bool& result);static void AfterCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity(CvCity* pCity, bool& result);static bool ReplaceCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity(bool (*original)(CvCity*), CvCity* pCity);CivRegisterBefore<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity>(host, &BeforeCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity);CivRegisterAfter<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity>(host, &AfterCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity);CivRegisterReplace<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity>(host, &ReplaceCityStrategyAIHelpers_IsTestCityStrategy_GoodGPCity);

Code

3230bool CityStrategyAIHelpers::IsTestCityStrategy_GoodGPCity(CvCity* pCity)3231{3232	// if this city is producing at least 8 GP points a turn (since most GP mod buildings increase by 25% this will yield 2 extra GP points a turn)32333234	int iTotalGPPChange = 0;32353236	for (int iSpecialistLoop = 0; iSpecialistLoop < GC.getNumSpecialistInfos(); iSpecialistLoop++)3237	{3238		const SpecialistTypes eSpecialist = static_cast<SpecialistTypes>(iSpecialistLoop);3239		CvSpecialistInfo* pkSpecialistInfo = GC.getSpecialistInfo(eSpecialist);3240		if(pkSpecialistInfo)3241		{3242			// Does this Specialist spawn a GP?3243			if (pkSpecialistInfo->getGreatPeopleUnitClass() != NO_UNITCLASS)3244			{3245				int iCount = pCity->GetCityCitizens()->GetSpecialistCount(eSpecialist);32463247				// GPP from Specialists3248				int iGPPChange = pkSpecialistInfo->getGreatPeopleRateChange() * iCount * 100;32493250				// GPP from Buildings3251				iGPPChange += pCity->GetCityCitizens()->GetBuildingGreatPeopleRateChanges(eSpecialist) * 100;32523253				if (iGPPChange > 0)3254				{3255					int iMod = 0;32563257					// City mod3258					iMod += pCity->getGreatPeopleRateModifier();32593260					// Player mod3261					iMod += pCity->GetPlayer()->getGreatPeopleRateModifier();32623263					// Trait mod to this specific class3264					if ((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_SCIENTIST"))3265					{3266						iMod += pCity->GetPlayer()->GetPlayerTraits()->GetGreatScientistRateModifier();3267						iMod += pCity->GetPlayer()->getGreatScientistRateModifier();3268					}3269					else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_WRITER"))3270					{3271						iMod += pCity->GetPlayer()->getGreatWriterRateModifier();3272					}					3273					else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_ARTIST"))3274					{3275						iMod += pCity->GetPlayer()->getGreatArtistRateModifier();3276					}					3277					else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_MUSICIAN"))3278					{3279						iMod += pCity->GetPlayer()->getGreatMusicianRateModifier();3280					}3281					else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_MERCHANT"))3282					{3283						iMod += pCity->GetPlayer()->getGreatMerchantRateModifier();3284					}3285					else if((UnitClassTypes)pkSpecialistInfo->getGreatPeopleUnitClass() == GC.getInfoTypeForString("UNITCLASS_ENGINEER"))3286					{3287						iMod += pCity->GetPlayer()->getGreatEngineerRateModifier();3288					}32893290					iGPPChange *= (100 + iMod);3291					iGPPChange /= 100;32923293					iTotalGPPChange += iGPPChange;3294				}3295			}3296		}3297	}32983299	if (iTotalGPPChange >= 800)3300	{3301		return true;3302	}33033304	return false;3305}

Calls

Called by