Bazaar developer reference

CityStrategyAIHelpers::IsTestCityStrategy_KeyScienceCity(CvCity *)

Defined in
CvCityStrategyAI.cpp, line 3169
Hook name
CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity

Hooks

static bool BeforeCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity(CvCity* pCity, bool& result);static void AfterCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity(CvCity* pCity, bool& result);static bool ReplaceCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity(bool (*original)(CvCity*), CvCity* pCity);CivRegisterBefore<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity>(host, &BeforeCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity);CivRegisterAfter<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity>(host, &AfterCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity);CivRegisterReplace<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity>(host, &ReplaceCityStrategyAIHelpers_IsTestCityStrategy_KeyScienceCity);

Code

3169bool CityStrategyAIHelpers::IsTestCityStrategy_KeyScienceCity(CvCity* pCity)3170{3171	if (GET_PLAYER(pCity->getOwner()).GetEspionageAI()->m_iTurnEspionageStarted == -1)3172	{3173		return false;3174	}31753176	PlayerTypes ePlayer = pCity->getOwner();3177	CvCity* pLoopCity = NULL;3178	int iLoop = 0;3179	int iNumBetterScienceCities = 0;3180	int iNumOtherCities = 0;3181	int iCityScienceOutput = pCity->getYieldRateTimes100(YIELD_SCIENCE, false);31823183	for(pLoopCity = GET_PLAYER(ePlayer).firstCity(&iLoop); pLoopCity != NULL; pLoopCity = GET_PLAYER(ePlayer).nextCity(&iLoop))3184	{3185		iNumOtherCities++;3186		// don't evaluate ourselves3187		if (pLoopCity == pCity)3188		{3189			continue;3190		}31913192		if (pLoopCity->getYieldRateTimes100(YIELD_SCIENCE, false) > iCityScienceOutput)3193		{3194			iNumBetterScienceCities++;3195		}3196	}31973198	if (iNumOtherCities > 0)3199	{3200		FlavorTypes eFlavorEspionage = NO_FLAVOR;3201		for (int iFlavor = 0; iFlavor < GC.getNumFlavorTypes(); iFlavor++)3202		{3203			FlavorTypes eFlavor = (FlavorTypes)iFlavor;3204			if (GC.getFlavorTypes(eFlavor) == "FLAVOR_ESPIONAGE")3205			{3206				eFlavorEspionage = eFlavor;3207			}3208		}3209		CvAssertMsg(eFlavorEspionage != NO_FLAVOR, "Could not find espionage flavor!");32103211		float fRatio = iNumBetterScienceCities / (float)iNumOtherCities;3212		float fCutOff = (0.05f * GET_PLAYER(ePlayer).GetFlavorManager()->GetPersonalityIndividualFlavor(eFlavorEspionage));32133214		if (fRatio < fCutOff)3215		{3216			return true;3217		}3218		else3219		{3220			return false;3221		}3222	}3223	else3224	{3225		return false;3226	}3227}

Calls

Called by