Hooks
static bool BeforeCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const(const CvCity* self, YieldTypes eIndex, SpecialistTypes eSpecialist, int& result);static void AfterCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const(const CvCity* self, YieldTypes eIndex, SpecialistTypes eSpecialist, int& result);static int ReplaceCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const(int (*original)(const CvCity*, YieldTypes, SpecialistTypes), const CvCity* self, YieldTypes eIndex, SpecialistTypes eSpecialist);CivRegisterBefore<CivHooks::CvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const>(host, &BeforeCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const);CivRegisterAfter<CivHooks::CvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const>(host, &AfterCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const);CivRegisterReplace<CivHooks::CvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const>(host, &ReplaceCvCity_getExtraSpecialistYield_with_YieldTypes_SpecialistTypes_const);
Code
10999int CvCity::getExtraSpecialistYield(YieldTypes eIndex, SpecialistTypes eSpecialist) const11000{11001 VALIDATE_OBJECT11002 CvAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");11003 CvAssertMsg(eIndex < NUM_YIELD_TYPES, "eIndex expected to be < NUM_YIELD_TYPES");11004 CvAssertMsg(eSpecialist >= 0, "eSpecialist expected to be >= 0");11005 CvAssertMsg(eSpecialist < GC.getNumSpecialistInfos(), "GC.getNumSpecialistInfos expected to be >= 0");1100611007 if (eSpecialist == GC.getDEFAULT_SPECIALIST())11008 {11009 return 0;11010 }1101111012 int iYieldMultiplier = GET_PLAYER(getOwner()).getSpecialistExtraYield(eSpecialist, eIndex) +11013 GET_PLAYER(getOwner()).getSpecialistExtraYield(eIndex) +11014 GET_PLAYER(getOwner()).GetPlayerTraits()->GetSpecialistYieldChange(eSpecialist, eIndex);11015#if defined(MOD_API_UNIFIED_YIELDS)11016 iYieldMultiplier += GET_PLAYER(getOwner()).getSpecialistYieldChange(eSpecialist, eIndex);1101711018 ReligionTypes eMajority = GetCityReligions()->GetReligiousMajority();11019 if(eMajority >= RELIGION_PANTHEON)11020 {11021 const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, getOwner());11022 if(pReligion)11023 {11024 iYieldMultiplier += pReligion->m_Beliefs.GetSpecialistYieldChange(eSpecialist, eIndex);11025 BeliefTypes eSecondaryPantheon = GetCityReligions()->GetSecondaryReligionPantheonBelief();11026 if (eSecondaryPantheon != NO_BELIEF)11027 {11028 iYieldMultiplier += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetSpecialistYieldChange(eSpecialist, eIndex);11029 }11030 }11031 }11032#endif11033 int iExtraYield = GetCityCitizens()->GetSpecialistCount(eSpecialist) * iYieldMultiplier;1103411035 return iExtraYield;11036}