Hooks
static bool BeforeCvCity_getBaseYieldRateModifier(const CvCity* self, YieldTypes eIndex, int iExtra, CvString* toolTipSink, int& result);static void AfterCvCity_getBaseYieldRateModifier(const CvCity* self, YieldTypes eIndex, int iExtra, CvString* toolTipSink, int& result);static int ReplaceCvCity_getBaseYieldRateModifier(int (*original)(const CvCity*, YieldTypes, int, CvString*), const CvCity* self, YieldTypes eIndex, int iExtra, CvString* toolTipSink);CivRegisterBefore<CivHooks::CvCity_getBaseYieldRateModifier>(host, &BeforeCvCity_getBaseYieldRateModifier);CivRegisterAfter<CivHooks::CvCity_getBaseYieldRateModifier>(host, &AfterCvCity_getBaseYieldRateModifier);CivRegisterReplace<CivHooks::CvCity_getBaseYieldRateModifier>(host, &ReplaceCvCity_getBaseYieldRateModifier);
Code
10421int CvCity::getBaseYieldRateModifier(YieldTypes eIndex, int iExtra, CvString* toolTipSink) const10422{10423 VALIDATE_OBJECT10424 int iModifier = 0;10425 int iTempMod;1042610427 // Yield Rate Modifier10428 iTempMod = getYieldRateModifier(eIndex);10429 iModifier += iTempMod;10430 if(toolTipSink)10431 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD", iTempMod);1043210433 // Resource Yield Rate Modifier10434 iTempMod = getResourceYieldRateModifier(eIndex);10435 iModifier += iTempMod;10436 if(toolTipSink)10437 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_RESOURCES", iTempMod);1043810439 // Happiness Yield Rate Modifier10440 iTempMod = getHappinessModifier(eIndex);10441 iModifier += iTempMod;10442 if(toolTipSink)10443 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_HAPPINESS", iTempMod);1044410445 // Area Yield Rate Modifier10446 if(area() != NULL)10447 {10448 iTempMod = area()->getYieldRateModifier(getOwner(), eIndex);10449 iModifier += iTempMod;10450 if(toolTipSink)10451 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_AREA", iTempMod);10452 }1045310454 // Player Yield Rate Modifier10455 iTempMod = GET_PLAYER(getOwner()).getYieldRateModifier(eIndex);10456 iModifier += iTempMod;10457 if(toolTipSink)10458 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_PLAYER", iTempMod);1045910460 // Player Capital Yield Rate Modifier10461 if(isCapital())10462 {10463 iTempMod = GET_PLAYER(getOwner()).getCapitalYieldRateModifier(eIndex);10464 iModifier += iTempMod;10465 if(toolTipSink)10466 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_CAPITAL", iTempMod);10467 }1046810469 // Golden Age Yield Modifier10470 if(GET_PLAYER(getOwner()).isGoldenAge())10471 {10472 CvYieldInfo* pYield = GC.getYieldInfo(eIndex);10473 if(pYield)10474 {10475 iTempMod = pYield->getGoldenAgeYieldMod();10476 iModifier += iTempMod;10477 if(toolTipSink)10478 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_GOLDEN_AGE", iTempMod);10479 }10480 }1048110482 // Religion Yield Rate Modifier10483 ReligionTypes eMajority = GetCityReligions()->GetReligiousMajority();10484 const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, getOwner());10485 if(pReligion)10486 {10487 int iReligionYieldMaxFollowers = pReligion->m_Beliefs.GetMaxYieldModifierPerFollower(eIndex);10488 if (iReligionYieldMaxFollowers > 0)10489 {10490 int iFollowers = GetCityReligions()->GetNumFollowers(eMajority);10491 iTempMod = min(iFollowers, iReligionYieldMaxFollowers);10492 iModifier += iTempMod;10493 if(toolTipSink)10494 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_BELIEF", iTempMod);10495 }10496 }1049710498 // Production Yield Rate Modifier from City States10499 if(eIndex == YIELD_PRODUCTION && GetCityBuildings()->GetCityStateTradeRouteProductionModifier() > 0 )10500 { 10501 iTempMod = GetCityBuildings()->GetCityStateTradeRouteProductionModifier();10502 iModifier += iTempMod;10503 if(toolTipSink){10504 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_YIELD_HANSE", iTempMod);10505 }10506 }1050710508 // Puppet10509 if(IsPuppet())10510 {10511 switch(eIndex)10512 {10513 case YIELD_SCIENCE:10514 iTempMod = GC.getPUPPET_SCIENCE_MODIFIER();10515 iModifier += iTempMod;10516 if(iTempMod != 0 && toolTipSink)10517 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_PUPPET", iTempMod);10518#if defined(MOD_BUGFIX_MINOR)10519 break;10520#endif10521 case YIELD_GOLD:10522 iTempMod = GC.getPUPPET_GOLD_MODIFIER();10523 iModifier += iTempMod;10524 if(iTempMod != 0 && toolTipSink)10525 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_PUPPET", iTempMod);10526#if defined(MOD_BUGFIX_MINOR)10527 break;10528#endif10529#if defined(MOD_API_UNIFIED_YIELDS_TOURISM)10530 case YIELD_TOURISM:10531 iTempMod = GC.getPUPPET_TOURISM_MODIFIER();10532 iModifier += iTempMod;10533 if(iTempMod != 0 && toolTipSink)10534 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_PUPPET", iTempMod);10535 break;10536#endif10537#if defined(MOD_API_UNIFIED_YIELDS_GOLDEN_AGE)10538 case YIELD_GOLDEN_AGE_POINTS:10539 iTempMod = GC.getPUPPET_GOLDEN_AGE_MODIFIER();10540 iModifier += iTempMod;10541 if(iTempMod != 0 && toolTipSink)10542 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_PUPPET", iTempMod);10543 break;10544#endif10545 }10546 }1054710548 iModifier += iExtra;1054910550 // note: player->invalidateYieldRankCache() must be called for anything that is checked here10551 // so if any extra checked things are added here, the cache needs to be invalidated1055210553 return std::max(0, (iModifier + 100));10554}