Bazaar developer reference

CvPlayer::getBuildingClassPrereqBuilding(BuildingTypes, BuildingClassTypes, int) const

Defined in
CvPlayer.cpp, line 9014
Class
CvPlayer
Hook name
CivHooks::CvPlayer_getBuildingClassPrereqBuilding

Hooks

static bool BeforeCvPlayer_getBuildingClassPrereqBuilding(const CvPlayer* self, BuildingTypes eBuilding, BuildingClassTypes ePrereqBuildingClass, int iExtra, int& result);static void AfterCvPlayer_getBuildingClassPrereqBuilding(const CvPlayer* self, BuildingTypes eBuilding, BuildingClassTypes ePrereqBuildingClass, int iExtra, int& result);static int ReplaceCvPlayer_getBuildingClassPrereqBuilding(int (*original)(const CvPlayer*, BuildingTypes, BuildingClassTypes, int), const CvPlayer* self, BuildingTypes eBuilding, BuildingClassTypes ePrereqBuildingClass, int iExtra);CivRegisterBefore<CivHooks::CvPlayer_getBuildingClassPrereqBuilding>(host, &BeforeCvPlayer_getBuildingClassPrereqBuilding);CivRegisterAfter<CivHooks::CvPlayer_getBuildingClassPrereqBuilding>(host, &AfterCvPlayer_getBuildingClassPrereqBuilding);CivRegisterReplace<CivHooks::CvPlayer_getBuildingClassPrereqBuilding>(host, &ReplaceCvPlayer_getBuildingClassPrereqBuilding);

Code

9014int CvPlayer::getBuildingClassPrereqBuilding(BuildingTypes eBuilding, BuildingClassTypes ePrereqBuildingClass, int iExtra) const9015{9016	CvBuildingEntry* pkBuilding = GC.getBuildingInfo(eBuilding);9017	if(pkBuilding == NULL)9018	{9019		CvAssertMsg(pkBuilding, "Should never happen...");9020		return -1;9021	}90229023	int iPrereqs = pkBuilding->GetPrereqNumOfBuildingClass(ePrereqBuildingClass);90249025	// dont bother with the rest of the calcs if we have no prereqs9026	if(iPrereqs == 0)9027	{9028		return 0;9029	}9030	// -1 means Building is needed in all Cities9031	else if(iPrereqs == -1)9032	{9033#if defined(MOD_BUILDINGS_NW_EXCLUDE_RAZING)9034		BuildingTypes ePrereqBuilding = (BuildingTypes)getCivilizationInfo().getCivilizationBuildings(ePrereqBuildingClass);9035#endif9036		int iNonPuppetCities = 0;9037		int iLoop = 0;9038		const CvCity* pLoopCity = NULL;9039		for(pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))9040		{9041			if(pLoopCity && !pLoopCity->IsPuppet())9042			{9043#if defined(MOD_BUILDINGS_NW_EXCLUDE_RAZING)9044				// Don't count this city if it is being razed and doesn't already have the pre-req building9045				if (!(MOD_BUILDINGS_NW_EXCLUDE_RAZING && pLoopCity->IsRazing() && pLoopCity->GetCityBuildings()->GetNumBuilding(ePrereqBuilding) == 0))9046#endif9047				iNonPuppetCities++;9048			}9049		}90509051		return iNonPuppetCities;9052	}9053	else9054	{9055		iPrereqs *= std::max(0, GC.getMap().getWorldInfo().getBuildingClassPrereqModifier() + 100);9056		iPrereqs /= 100;9057	}90589059	if(!isLimitedWonderClass(pkBuilding->GetBuildingClassInfo()))9060	{9061		BuildingClassTypes eBuildingClass = (BuildingClassTypes)pkBuilding->GetBuildingClassType();9062		iPrereqs *= (getBuildingClassCount(eBuildingClass) + iExtra + 1);9063	}90649065	if(GC.getGame().isOption(GAMEOPTION_ONE_CITY_CHALLENGE) && isHuman())9066	{9067		iPrereqs = std::min(1, iPrereqs);9068	}90699070	return iPrereqs;9071}

Calls

Called by