Hooks
static bool BeforeCvCity_getProductionModifier_with_BuildingTypes_CvString_const(const CvCity* self, BuildingTypes eBuilding, CvString* toolTipSink, int& result);static void AfterCvCity_getProductionModifier_with_BuildingTypes_CvString_const(const CvCity* self, BuildingTypes eBuilding, CvString* toolTipSink, int& result);static int ReplaceCvCity_getProductionModifier_with_BuildingTypes_CvString_const(int (*original)(const CvCity*, BuildingTypes, CvString*), const CvCity* self, BuildingTypes eBuilding, CvString* toolTipSink);CivRegisterBefore<CivHooks::CvCity_getProductionModifier_with_BuildingTypes_CvString_const>(host, &BeforeCvCity_getProductionModifier_with_BuildingTypes_CvString_const);CivRegisterAfter<CivHooks::CvCity_getProductionModifier_with_BuildingTypes_CvString_const>(host, &AfterCvCity_getProductionModifier_with_BuildingTypes_CvString_const);CivRegisterReplace<CivHooks::CvCity_getProductionModifier_with_BuildingTypes_CvString_const>(host, &ReplaceCvCity_getProductionModifier_with_BuildingTypes_CvString_const);
Code
5636int CvCity::getProductionModifier(BuildingTypes eBuilding, CvString* toolTipSink) const5637{5638 VALIDATE_OBJECT5639 int iMultiplier = getGeneralProductionModifiers(toolTipSink);5640 iMultiplier += GET_PLAYER(getOwner()).getProductionModifier(eBuilding, toolTipSink);56415642 CvBuildingEntry* thisBuildingEntry = GC.getBuildingInfo(eBuilding);5643 if(thisBuildingEntry == NULL) //should never happen5644 return -1;56455646 const CvBuildingClassInfo& kBuildingClassInfo = thisBuildingEntry->GetBuildingClassInfo();56475648 int iTempMod;56495650 // Wonder bonus5651 if(::isWorldWonderClass(kBuildingClassInfo) ||5652 ::isTeamWonderClass(kBuildingClassInfo) ||5653 ::isNationalWonderClass(kBuildingClassInfo))5654 {5655 iTempMod = GetWonderProductionModifier();5656 iMultiplier += iTempMod;5657 if(toolTipSink && iTempMod)5658 {5659 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_CITY", iTempMod);5660 }56615662 iTempMod = GET_PLAYER(getOwner()).getWonderProductionModifier();5663 iMultiplier += iTempMod;5664 if(toolTipSink && iTempMod)5665 {5666 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_PLAYER", iTempMod);5667 }56685669 iTempMod = GetLocalResourceWonderProductionMod(eBuilding, toolTipSink);5670 iMultiplier += iTempMod;56715672 ReligionTypes eMajority = GetCityReligions()->GetReligiousMajority();5673 if(eMajority != NO_RELIGION)5674 {5675 const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, getOwner());5676 if(pReligion)5677 {5678 // Depends on era of wonder5679 EraTypes eEra;5680 TechTypes eTech = (TechTypes)thisBuildingEntry->GetPrereqAndTech();5681 if(eTech != NO_TECH)5682 {5683 CvTechEntry* pEntry = GC.GetGameTechs()->GetEntry(eTech);5684 if(pEntry)5685 {5686 eEra = (EraTypes)pEntry->GetEra();5687 if(eEra != NO_ERA)5688 {5689 iTempMod = pReligion->m_Beliefs.GetWonderProductionModifier(eEra);5690 BeliefTypes eSecondaryPantheon = GetCityReligions()->GetSecondaryReligionPantheonBelief();5691 if (eSecondaryPantheon != NO_BELIEF)5692 {5693 if((int)eEra < GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetObsoleteEra())5694 {5695 iTempMod += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetWonderProductionModifier();5696 }5697 }5698 iMultiplier += iTempMod;5699 if(toolTipSink && iTempMod)5700 {5701 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_RELIGION", iTempMod);5702 }5703 }5704 }5705 }5706 }5707 }5708 }5709 // Not-wonder bonus5710 else5711 {5712 iTempMod = m_pCityBuildings->GetBuildingProductionModifier();5713 iMultiplier += iTempMod;5714 if(toolTipSink && iTempMod)5715 {5716 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_BUILDING_CITY", iTempMod);5717 }5718 }57195720 // From policies5721 iTempMod = GET_PLAYER(getOwner()).GetPlayerPolicies()->GetBuildingClassProductionModifier((BuildingClassTypes)kBuildingClassInfo.GetID());5722 if(iTempMod != 0)5723 {5724 iMultiplier += iTempMod;5725 if(toolTipSink && iTempMod)5726 {5727 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_BUILDING_POLICY", iTempMod);5728 }5729 }57305731 // From traits5732 iTempMod = GET_PLAYER(getOwner()).GetPlayerTraits()->GetCapitalBuildingDiscount(eBuilding);5733 if(iTempMod != 0)5734 {5735 iMultiplier += iTempMod;5736 if(toolTipSink && iTempMod)5737 {5738 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_CAPITAL_BUILDING_TRAIT", iTempMod);5739 }5740 }57415742 return iMultiplier;5743}