CvPlayer::calculateResearchModifier(TechTypes)
- Defined in
- CvPlayer.cpp, line 9807
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_calculateResearchModifier
Hooks
static bool BeforeCvPlayer_calculateResearchModifier(CvPlayer* self, TechTypes eTech, int& result);static void AfterCvPlayer_calculateResearchModifier(CvPlayer* self, TechTypes eTech, int& result);static int ReplaceCvPlayer_calculateResearchModifier(int (*original)(CvPlayer*, TechTypes), CvPlayer* self, TechTypes eTech);CivRegisterBefore<CivHooks::CvPlayer_calculateResearchModifier>(host, &BeforeCvPlayer_calculateResearchModifier);CivRegisterAfter<CivHooks::CvPlayer_calculateResearchModifier>(host, &AfterCvPlayer_calculateResearchModifier);CivRegisterReplace<CivHooks::CvPlayer_calculateResearchModifier>(host, &ReplaceCvPlayer_calculateResearchModifier);
Code
9807int CvPlayer::calculateResearchModifier(TechTypes eTech)9808{9809 int iModifier = 100;98109811 if(NO_TECH == eTech)9812 {9813 return iModifier;9814 }98159816 int iKnownCount = 0;9817 int iPossibleKnownCount = 0;9818 for(int iI = 0; iI < MAX_CIV_TEAMS; iI++)9819 {9820 CvTeam& kLoopTeam = GET_TEAM((TeamTypes)iI);9821 if(kLoopTeam.isAlive() && !kLoopTeam.isMinorCiv())9822 {9823#if defined(MOD_DIPLOMACY_TECH_BONUSES)9824 bool bCouldBorrowTech;9825 9826 if (MOD_DIPLOMACY_TECH_BONUSES)9827 {9828#if defined(MOD_API_EXTENSIONS)9829 if (GetEspionage()->GetNumSpies() > 0)9830 {9831 // We've got spies! So we need one in a capital of a player in the other team9832 bCouldBorrowTech = GET_TEAM(getTeam()).HasSpyAtTeam((TeamTypes)iI);9833 }9834 else9835#endif9836 {9837 // No spies yet, so use embassy status9838 bCouldBorrowTech = GET_TEAM(getTeam()).HasEmbassyAtTeam((TeamTypes)iI);9839 }9840 }9841 else9842 {9843 bCouldBorrowTech = GET_TEAM(getTeam()).isHasMet((TeamTypes)iI);9844 }9845 9846 if(bCouldBorrowTech)9847#else9848 if(GET_TEAM(getTeam()).isHasMet((TeamTypes)iI))9849#endif9850 {9851 if(kLoopTeam.GetTeamTechs()->HasTech(eTech))9852 {9853 iKnownCount++;9854 }9855 }9856 iPossibleKnownCount++;9857 }9858 }9859 if(iPossibleKnownCount > 0)9860 {9861 iModifier += (GC.getTECH_COST_TOTAL_KNOWN_TEAM_MODIFIER() * iKnownCount) / iPossibleKnownCount;9862 }98639864 int iPossiblePaths = 0;9865 int iUnknownPaths = 0;9866 for(int iI = 0; iI < GC.getNUM_OR_TECH_PREREQS(); iI++)9867 {9868 if(GC.getTechInfo(eTech)->GetPrereqOrTechs(iI) != NO_TECH)9869 {9870 if(!(GET_TEAM(getTeam()).GetTeamTechs()->HasTech((TechTypes)(GC.getTechInfo(eTech)->GetPrereqOrTechs(iI)))))9871 {9872 iUnknownPaths++;9873 }98749875 iPossiblePaths++;9876 }9877 }9878 CvAssertMsg(iPossiblePaths >= iUnknownPaths, "The number of possible paths is expected to match or exceed the number of unknown ones");9879 iModifier += (iPossiblePaths - iUnknownPaths) * GC.getTECH_COST_KNOWN_PREREQ_MODIFIER();98809881 // Leagues mod9882 int iLeaguesMod = GC.getGame().GetGameLeagues()->GetResearchMod(GetID(), eTech);9883 if (iLeaguesMod != 0)9884 {9885 iModifier *= (100 + iLeaguesMod);9886 iModifier /= 100;9887 }98889889 return iModifier;9890}
Calls
- CustomMods::isDIPLOMACY_TECH_BONUSES()
- CvGame::GetGameLeagues()
- CvGameLeagues::GetResearchMod(PlayerTypes, TechTypes)
- CvGlobals::getGame()
- CvGlobals::getNUM_OR_TECH_PREREQS()
- CvGlobals::getTECH_COST_KNOWN_PREREQ_MODIFIER()
- CvGlobals::getTECH_COST_TOTAL_KNOWN_TEAM_MODIFIER()
- CvGlobals::getTechInfo(TechTypes)
- CvPlayer::GetEspionage() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayerEspionage::GetNumSpies()
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeam::HasEmbassyAtTeam(TeamTypes) const
- CvTeam::HasSpyAtTeam(TeamTypes) const
- CvTeam::isAlive() const
- CvTeam::isHasMet(TeamTypes) const
- CvTeam::isMinorCiv() const
- CvTeamTechs::HasTech(TechTypes) const
- CvTechEntry::GetPrereqOrTechs(int) const