Bazaar developer reference

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

Called by