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
- CustomMods::isBUILDINGS_NW_EXCLUDE_RAZING()
- CvBuildingEntry::GetBuildingClassInfo() const
- CvBuildingEntry::GetBuildingClassType() const
- CvBuildingEntry::GetPrereqNumOfBuildingClass(int) const
- CvCity::GetCityBuildings() const
- CvCity::IsPuppet() const
- CvCity::IsRazing() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGame::isOption(GameOptionTypes) const
- CvGlobals::getBuildingInfo(BuildingTypes)
- CvGlobals::getGame()
- CvGlobals::getMap()
- CvMap::getWorldInfo() const
- CvPlayer::firstCity(int *, bool) const
- CvPlayer::getBuildingClassCount(BuildingClassTypes) const
- CvPlayer::getCivilizationInfo() const
- CvPlayer::isHuman() const
- CvPlayer::nextCity(int *, bool) const
- CvWorldInfo::getBuildingClassPrereqModifier() const
- isLimitedWonderClass(const CvBuildingClassInfo &)
std::maxstd::min