Hooks
static bool BeforeCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const(const CvPlayer* self, BuildingTypes eBuilding, CvString* toolTipSink, int& result);static void AfterCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const(const CvPlayer* self, BuildingTypes eBuilding, CvString* toolTipSink, int& result);static int ReplaceCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const(int (*original)(const CvPlayer*, BuildingTypes, CvString*), const CvPlayer* self, BuildingTypes eBuilding, CvString* toolTipSink);CivRegisterBefore<CivHooks::CvPlayer_getProductionModifier_with_BuildingTypes_CvString_const>(host, &BeforeCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const);CivRegisterAfter<CivHooks::CvPlayer_getProductionModifier_with_BuildingTypes_CvString_const>(host, &AfterCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const);CivRegisterReplace<CivHooks::CvPlayer_getProductionModifier_with_BuildingTypes_CvString_const>(host, &ReplaceCvPlayer_getProductionModifier_with_BuildingTypes_CvString_const);
Code
8898int CvPlayer::getProductionModifier(BuildingTypes eBuilding, CvString* toolTipSink) const8899{8900 int iMultiplier = getProductionModifier(toolTipSink);8901 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);8902 if(pkBuildingInfo == NULL)8903 {8904 return iMultiplier;8905 }89068907 CvGame& kGame = GC.getGame();8908 const CvBuildingClassInfo& kBuildingClassInfo = pkBuildingInfo->GetBuildingClassInfo();89098910 int iTempMod;89118912 int iNumTraits = GC.getNumTraitInfos();8913 CvPlayerTraits* pPlayerTraits = GetPlayerTraits();8914 for(int iI = 0; iI < iNumTraits; iI++)8915 {8916 if(pPlayerTraits->HasTrait((TraitTypes)iI))8917 {8918 iTempMod = pkBuildingInfo->GetProductionTraits(iI);8919 iMultiplier += iTempMod;8920 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_BUILDING_TRAIT", iTempMod);8921 }8922 }89238924 // World Wonder8925 if(::isWorldWonderClass(kBuildingClassInfo))8926 {8927 iTempMod = getMaxGlobalBuildingProductionModifier();8928 iMultiplier += iTempMod;8929 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WORLD_WONDER_PLAYER", iTempMod);8930 iTempMod = m_pPlayerPolicies->GetNumericModifier(POLICYMOD_WONDER_PRODUCTION_MODIFIER);8931 iMultiplier += iTempMod;8932 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_POLICY", iTempMod);8933 }89348935 // Team Wonder8936 else if(::isTeamWonderClass(kBuildingClassInfo))8937 {8938 iTempMod = getMaxTeamBuildingProductionModifier();8939 iMultiplier += iTempMod;8940 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_TEAM_WONDER_PLAYER", iTempMod);8941 iTempMod = m_pPlayerPolicies->GetNumericModifier(POLICYMOD_WONDER_PRODUCTION_MODIFIER);8942 iMultiplier += iTempMod;8943 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_POLICY", iTempMod);8944 }89458946 // National Wonder8947 else if(::isNationalWonderClass(kBuildingClassInfo))8948 {8949 iTempMod = getMaxPlayerBuildingProductionModifier();8950 iMultiplier += iTempMod;8951 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_NATIONAL_WONDER_PLAYER", iTempMod);8952 iTempMod = m_pPlayerPolicies->GetNumericModifier(POLICYMOD_WONDER_PRODUCTION_MODIFIER);8953 iMultiplier += iTempMod;8954 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_WONDER_POLICY", iTempMod);8955 }89568957 // Normal Building8958 else8959 {8960 iTempMod = m_pPlayerPolicies->GetNumericModifier(POLICYMOD_BUILDING_PRODUCTION_MODIFIER);8961 iMultiplier += iTempMod;8962 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_BUILDING_POLICY_PLAYER", iTempMod);8963 }89648965 // Religion8966 if(pkBuildingInfo->IsReligious())8967 {8968 iTempMod = m_pPlayerPolicies->GetNumericModifier(POLICYMOD_RELIGION_PRODUCTION_MODIFIER);8969 iMultiplier += iTempMod;8970 kGame.BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_RELIGION_PLAYER", iTempMod);8971 }89728973 return iMultiplier;8974}