CvReligionAI::ScoreBeliefAtCity(CvBeliefEntry *, CvCity *)
- Defined in
- CvReligionClasses.cpp, line 6252
- Class
- CvReligionAI
- Hook name
CivHooks::CvReligionAI_ScoreBeliefAtCity
Hooks
static bool BeforeCvReligionAI_ScoreBeliefAtCity(CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity, int& result);static void AfterCvReligionAI_ScoreBeliefAtCity(CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity, int& result);static int ReplaceCvReligionAI_ScoreBeliefAtCity(int (*original)(CvReligionAI*, CvBeliefEntry*, CvCity*), CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity);CivRegisterBefore<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &BeforeCvReligionAI_ScoreBeliefAtCity);CivRegisterAfter<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &AfterCvReligionAI_ScoreBeliefAtCity);CivRegisterReplace<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &ReplaceCvReligionAI_ScoreBeliefAtCity);
Code
6251/// AI's evaluation of this belief's usefulness at this one plot6252int CvReligionAI::ScoreBeliefAtCity(CvBeliefEntry* pEntry, CvCity* pCity)6253{6254 int iRtnValue = 0;6255 int iTempValue;6256 int iMinPop;6257 int iMinFollowers;6258 int iHappinessMultiplier = 2;62596260 CvFlavorManager* pFlavorManager = m_pPlayer->GetFlavorManager();6261 int iFlavorOffense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_OFFENSE"));6262 int iFlavorDefense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_DEFENSE"));6263 int iFlavorCityDefense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_CITY_DEFENSE"));6264 int iFlavorHappiness = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_HAPPINESS"));62656266 int iHappinessNeedFactor = iFlavorOffense * 2 + iFlavorHappiness - iFlavorDefense;6267 if (iHappinessNeedFactor > 15)6268 {6269 iHappinessMultiplier = 3;6270 }6271 else if (iHappinessNeedFactor < 6)6272 {6273 iHappinessMultiplier = 1;6274 }62756276 iMinPop = pEntry->GetMinPopulation();6277 iMinFollowers = pEntry->GetMinFollowers();62786279 // Simple ones6280 iRtnValue += pEntry->GetCityGrowthModifier() / 3;6281 if(pEntry->RequiresPeace())6282 {6283 iRtnValue /= 2;6284 }6285 iRtnValue += (-pEntry->GetPlotCultureCostModifier() * 2) / 10;6286 iRtnValue += (pEntry->GetCityRangeStrikeModifier() / 10) * MAX(iFlavorDefense,iFlavorCityDefense);6287 iRtnValue += pEntry->GetFriendlyHealChange() / 10;62886289 // Wonder production multiplier6290 if(pEntry->GetObsoleteEra() > 0)6291 { 6292 if (pEntry->GetObsoleteEra() > GC.getGame().getCurrentEra())6293 {6294 iRtnValue += (pEntry->GetWonderProductionModifier() * pEntry->GetObsoleteEra()) / 10;6295 }6296 }6297 else6298 {6299 iRtnValue += pEntry->GetWonderProductionModifier() / 3;6300 }63016302 // River happiness6303 iTempValue = pEntry->GetRiverHappiness() * iHappinessMultiplier;6304 if(iMinPop > 0)6305 {6306 if(pCity->getPopulation() >= iMinPop)6307 {6308 iTempValue *= 2;6309 }6310 }6311 iRtnValue += iTempValue;63126313 // Happiness per city6314 iTempValue = pEntry->GetHappinessPerCity() * iHappinessMultiplier;6315 if(iMinPop > 0)6316 {6317 if(pCity->getPopulation() >= iMinPop)6318 {6319 iTempValue *= 2;6320 }6321 }6322 iRtnValue += iTempValue;63236324 // Building class happiness6325 for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)6326 {6327 iTempValue = pEntry->GetBuildingClassHappiness(jJ) * iHappinessMultiplier;6328 if(iMinFollowers > 0)6329 {6330 if(pCity->getPopulation() >= iMinFollowers)6331 {6332 iTempValue *= 2;6333 }6334 }6335 iRtnValue += iTempValue;6336 }63376338 for(int iI = 0; iI < NUM_YIELD_TYPES; iI++)6339 {6340 // City yield change6341 iTempValue = pEntry->GetCityYieldChange(iI);6342 if(iMinPop > 0)6343 {6344 if(pCity->getPopulation() >= iMinPop)6345 {6346 iTempValue *= 2;6347 }6348 }6349 iRtnValue += iTempValue;63506351#if defined(MOD_API_UNIFIED_YIELDS)6352 if (pCity->isCapital()) {6353 iTempValue = pEntry->GetCapitalYieldChange(iI);6354 if(iMinPop > 0)6355 {6356 if(pCity->getPopulation() >= iMinPop)6357 {6358 iTempValue *= 2;6359 }6360 }6361 iRtnValue += iTempValue;6362 }63636364 if (pCity->isCoastal()) {6365 iTempValue = pEntry->GetCoastalCityYieldChange(iI);6366 if(iMinPop > 0)6367 {6368 if(pCity->getPopulation() >= iMinPop)6369 {6370 iTempValue *= 2;6371 }6372 }6373 iRtnValue += iTempValue;6374 }6375#endif63766377 // Trade route yield change6378 iTempValue = pEntry->GetYieldChangeTradeRoute(iI);6379 if(iMinPop > 0)6380 {6381 if(pCity->getPopulation() >= iMinPop)6382 {6383 iTempValue *= 2;6384 }6385 }6386 if(pCity->IsRouteToCapitalConnected())6387 {6388 iTempValue *= 2;6389 }6390 iRtnValue += iTempValue;63916392 // Specialist yield change6393 iTempValue = pEntry->GetYieldChangeAnySpecialist(iI);6394 if(pCity->getPopulation() >= 8) // Like it more with large cities6395 {6396 iTempValue *= 3;6397 }6398 iRtnValue += iTempValue;63996400 // Building class yield change6401 for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)6402 {6403 CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo((BuildingClassTypes)jJ);6404 if(!pkBuildingClassInfo)6405 {6406 continue;6407 }64086409 iTempValue = pEntry->GetBuildingClassYieldChange(jJ, iI);6410 if(iMinFollowers > 0)6411 {6412 if(pCity->getPopulation() < iMinFollowers)6413 {6414 iTempValue /= 2;6415 }6416 }64176418 BuildingTypes eBuilding = (BuildingTypes)m_pPlayer->getCivilizationInfo().getCivilizationBuildings(jJ);6419 if (eBuilding != NO_BUILDING)6420 {6421 if(pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)6422 {6423 iTempValue *= 2;6424 }6425 }64266427 if(pkBuildingClassInfo->getMaxPlayerInstances() == 1)6428 {6429 iTempValue /= 2;6430 }64316432 iRtnValue += iTempValue;6433 }64346435 // World wonder change6436 iRtnValue += pEntry->GetYieldChangeWorldWonder(iI) * 3 / 2;64376438 // Production per follower6439 if (pEntry->GetMaxYieldModifierPerFollower(iI) > 0)6440 {6441 iTempValue = min(pEntry->GetMaxYieldModifierPerFollower(iI), pCity->getPopulation());6442 iTempValue /= 2;6443 iRtnValue += iTempValue;6444 }6445 }64466447 return iRtnValue;6448}
Calls
- CvBeliefEntry::GetBuildingClassHappiness(int) const
- CvBeliefEntry::GetBuildingClassYieldChange(int, int) const
- CvBeliefEntry::GetCapitalYieldChange(int) const
- CvBeliefEntry::GetCityGrowthModifier() const
- CvBeliefEntry::GetCityRangeStrikeModifier() const
- CvBeliefEntry::GetCityYieldChange(int) const
- CvBeliefEntry::GetCoastalCityYieldChange(int) const
- CvBeliefEntry::GetFriendlyHealChange() const
- CvBeliefEntry::GetHappinessPerCity() const
- CvBeliefEntry::GetMaxYieldModifierPerFollower(int) const
- CvBeliefEntry::GetMinFollowers() const
- CvBeliefEntry::GetMinPopulation() const
- CvBeliefEntry::GetObsoleteEra() const
- CvBeliefEntry::GetPlotCultureCostModifier() const
- CvBeliefEntry::GetRiverHappiness() const
- CvBeliefEntry::GetWonderProductionModifier() const
- CvBeliefEntry::GetYieldChangeAnySpecialist(int) const
- CvBeliefEntry::GetYieldChangeTradeRoute(int) const
- CvBeliefEntry::GetYieldChangeWorldWonder(int) const
- CvBeliefEntry::RequiresPeace() const
- CvBuildingClassInfo::getMaxPlayerInstances() const
- CvCity::GetCityBuildings() const
- CvCity::getPopulation(bool) const
- CvCity::isCapital() const
- CvCity::isCoastal(int) const
- CvCity::IsRouteToCapitalConnected() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvFlavorManager::GetPersonalityIndividualFlavor(FlavorTypes)
- CvGame::getCurrentEra() const
- CvGlobals::getBuildingClassInfo(BuildingClassTypes)
- CvGlobals::getGame()
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvGlobals::getNumBuildingClassInfos()
- CvPlayer::getCivilizationInfo() const
- CvPlayer::GetFlavorManager() const
std::maxstd::min