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
- CvCity::getOwner() const
- CvCity::getYieldRateTimes100(YieldTypes, bool) const
- CvFlavorManager::GetPersonalityIndividualFlavor(FlavorTypes)
- CvGlobals::getFlavorTypes(FlavorTypes)
- CvGlobals::getNumFlavorTypes()
- CvPlayer::firstCity(int *, bool)
- CvPlayer::GetEspionageAI() const
- CvPlayer::GetFlavorManager() const
- CvPlayer::nextCity(int *, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
std::operator==