CvPlayer::getAdvancedStartBuildingCost(BuildingTypes, bool, CvCity *)
- Defined in
- CvPlayer.cpp, line 23087
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_getAdvancedStartBuildingCost
Hooks
static bool BeforeCvPlayer_getAdvancedStartBuildingCost(CvPlayer* self, BuildingTypes eBuilding, bool bAdd, CvCity* pCity, int& result);static void AfterCvPlayer_getAdvancedStartBuildingCost(CvPlayer* self, BuildingTypes eBuilding, bool bAdd, CvCity* pCity, int& result);static int ReplaceCvPlayer_getAdvancedStartBuildingCost(int (*original)(CvPlayer*, BuildingTypes, bool, CvCity*), CvPlayer* self, BuildingTypes eBuilding, bool bAdd, CvCity* pCity);CivRegisterBefore<CivHooks::CvPlayer_getAdvancedStartBuildingCost>(host, &BeforeCvPlayer_getAdvancedStartBuildingCost);CivRegisterAfter<CivHooks::CvPlayer_getAdvancedStartBuildingCost>(host, &AfterCvPlayer_getAdvancedStartBuildingCost);CivRegisterReplace<CivHooks::CvPlayer_getAdvancedStartBuildingCost>(host, &ReplaceCvPlayer_getAdvancedStartBuildingCost);
Code
23087int CvPlayer::getAdvancedStartBuildingCost(BuildingTypes eBuilding, bool bAdd, CvCity* pCity)23088{23089 if(0 == getNumCities())23090 {23091 return -1;23092 }2309323094 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);23095 if(pkBuildingInfo == NULL)23096 {23097 return -1;23098 }2309923100 int iCost = getProductionNeeded(eBuilding);2310123102 if(iCost < 0)23103 {23104 return -1;23105 }2310623107 if(pkBuildingInfo->GetFreeStartEra() != NO_ERA && GC.getGame().getStartEra() >= pkBuildingInfo->GetFreeStartEra())23108 {23109 // you get this building for free23110 return -1;23111 }2311223113 if(NULL == pCity)23114 {23115 if(bAdd)23116 {23117 bool bValid = false;23118 int iLoop;23119 for(CvCity* pLoopCity = firstCity(&iLoop); NULL != pLoopCity; pLoopCity = nextCity(&iLoop))23120 {23121 if(pLoopCity->canConstruct(eBuilding))23122 {23123 bValid = true;23124 break;23125 }23126 }2312723128 if(!bValid)23129 {23130 return -1;23131 }23132 }23133 }23134 if(NULL != pCity)23135 {23136 if(pCity->getOwner() != GetID())23137 {23138 return -1;23139 }2314023141 iCost *= 100;23142 iCost /= std::max(1, 100 + pCity->getProductionModifier(eBuilding));2314323144 if(bAdd)23145 {23146 if(!pCity->canConstruct(eBuilding, true, false, false))23147 {23148 return -1;23149 }23150 }23151 else23152 {23153 if(pCity->GetCityBuildings()->GetNumRealBuilding(eBuilding) <= 0)23154 {23155 return -1;23156 }2315723158 // Check other buildings in this city and make sure none of them require this one2315923160 // Loop through Buildings to see which are present23161 for(int iBuildingLoop = 0; iBuildingLoop < GC.getNumBuildingInfos(); iBuildingLoop++)23162 {23163 const BuildingTypes eBuildingLoop = static_cast<BuildingTypes>(iBuildingLoop);23164 CvBuildingEntry* pkBuildingLoopInfo = GC.getBuildingInfo(eBuildingLoop);23165 if(pkBuildingLoopInfo)23166 {23167 if(pCity->GetCityBuildings()->GetNumBuilding(eBuildingLoop) > 0)23168 {23169 // Loop through present Building's requirements23170 for(int iBuildingClassPrereqLoop = 0; iBuildingClassPrereqLoop < GC.getNumBuildingClassInfos(); iBuildingClassPrereqLoop++)23171 {23172 const BuildingClassTypes eBuildingClass = static_cast<BuildingClassTypes>(iBuildingClassPrereqLoop);23173 CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);23174 if(pkBuildingClassInfo)23175 {23176 if(pkBuildingLoopInfo->IsBuildingClassNeededInCity(iBuildingClassPrereqLoop))23177 {23178 if((BuildingTypes)(getCivilizationInfo().getCivilizationBuildings(iBuildingClassPrereqLoop)) == eBuilding)23179 {23180 return -1;23181 }23182 }23183 }23184 }23185 }23186 }23187 }23188 }23189 }2319023191 return iCost;23192}
Calls
- CvBuildingEntry::GetFreeStartEra() const
- CvBuildingEntry::IsBuildingClassNeededInCity(int) const
- CvCity::canConstruct(BuildingTypes, bool, bool, bool, bool, CvString *) const
- CvCity::GetCityBuildings() const
- CvCity::getOwner() const
- CvCity::getProductionModifier(BuildingTypes, CvString *) const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCityBuildings::GetNumRealBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGame::getStartEra() const
- CvGlobals::getBuildingClassInfo(BuildingClassTypes)
- CvGlobals::getBuildingInfo(BuildingTypes)
- CvGlobals::getGame()
- CvGlobals::getNumBuildingClassInfos()
- CvGlobals::getNumBuildingInfos()
- CvPlayer::firstCity(int *, bool)
- CvPlayer::getCivilizationInfo() const
- CvPlayer::GetID() const
- CvPlayer::getNumCities() const
- CvPlayer::getProductionNeeded(BuildingTypes) const
- CvPlayer::nextCity(int *, bool)
std::max