CvPlayer::getAdvancedStartImprovementCost(ImprovementTypes, bool, CvPlot *)
- Defined in
- CvPlayer.cpp, line 23287
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_getAdvancedStartImprovementCost
Hooks
static bool BeforeCvPlayer_getAdvancedStartImprovementCost(CvPlayer* self, ImprovementTypes eImprovement, bool bAdd, CvPlot* pPlot, int& result);static void AfterCvPlayer_getAdvancedStartImprovementCost(CvPlayer* self, ImprovementTypes eImprovement, bool bAdd, CvPlot* pPlot, int& result);static int ReplaceCvPlayer_getAdvancedStartImprovementCost(int (*original)(CvPlayer*, ImprovementTypes, bool, CvPlot*), CvPlayer* self, ImprovementTypes eImprovement, bool bAdd, CvPlot* pPlot);CivRegisterBefore<CivHooks::CvPlayer_getAdvancedStartImprovementCost>(host, &BeforeCvPlayer_getAdvancedStartImprovementCost);CivRegisterAfter<CivHooks::CvPlayer_getAdvancedStartImprovementCost>(host, &AfterCvPlayer_getAdvancedStartImprovementCost);CivRegisterReplace<CivHooks::CvPlayer_getAdvancedStartImprovementCost>(host, &ReplaceCvPlayer_getAdvancedStartImprovementCost);
Code
23287int CvPlayer::getAdvancedStartImprovementCost(ImprovementTypes eImprovement, bool bAdd, CvPlot* pPlot)23288{23289 if(eImprovement == NO_IMPROVEMENT)23290 {23291 return -1;23292 }2329323294 if(0 == getNumCities())23295 {23296 return -1;23297 }2329823299 int iCost = 0;//GC.getImprovementInfo(eImprovement)->GetAdvancedStartCost();2330023301 // This denotes cities may not be purchased through Advanced Start23302 if(iCost < 0)23303 {23304 return -1;23305 }2330623307 iCost *= GC.getGame().getGameSpeedInfo().getBuildPercent();23308 iCost /= 100;2330923310 // Can this Improvement be on our plot?23311 if(pPlot != NULL)23312 {23313 if(bAdd)23314 {23315 // Valid Plot23316 if(!pPlot->canHaveImprovement(eImprovement, getTeam(), false))23317 {23318 return -1;23319 }2332023321 bool bValid = false;2332223323 for(int iI = 0; iI < GC.getNumBuildInfos(); ++iI)23324 {23325 CvBuildInfo* pkBuildInfo = GC.getBuildInfo((BuildTypes) iI);23326 if(!pkBuildInfo)23327 {23328 continue;23329 }23330 ImprovementTypes eLoopImprovement = ((ImprovementTypes)(pkBuildInfo->getImprovement()));2333123332 if(eImprovement == eLoopImprovement && canBuild(pPlot, (BuildTypes)iI))23333 {23334 bValid = true;2333523336 FeatureTypes eFeature = pPlot->getFeatureType();23337 if(NO_FEATURE != eFeature && pkBuildInfo->isFeatureRemove(eFeature))23338 {23339 iCost += GC.getFeatureInfo(eFeature)->getAdvancedStartRemoveCost();23340 }2334123342 break;23343 }23344 }2334523346 if(!bValid)23347 {23348 return -1;23349 }2335023351 // Can't place twice23352 if(pPlot->getImprovementType() == eImprovement)23353 {23354 return -1;23355 }23356 }23357 else23358 {23359 // Need this improvement in order to remove it23360 if(pPlot->getImprovementType() != eImprovement)23361 {23362 return -1;23363 }23364 }2336523366 // Must be owned by me23367 if(pPlot->getOwner() != GetID())23368 {23369 return -1;23370 }23371 }2337223373 // Tech requirement23374 for(int iBuildLoop = 0; iBuildLoop < GC.getNumBuildInfos(); iBuildLoop++)23375 {23376 CvBuildInfo* pkBuildInfo = GC.getBuildInfo((BuildTypes) iBuildLoop);23377 if(!pkBuildInfo)23378 {23379 continue;23380 }2338123382 if(pkBuildInfo->getImprovement() == eImprovement)23383 {23384 if(!(GET_TEAM(getTeam()).GetTeamTechs()->HasTech((TechTypes)pkBuildInfo->getTechPrereq())))23385 {23386 return -1;23387 }23388 }23389 }2339023391 return iCost;23392}
Calls
- CvBuildInfo::getImprovement() const
- CvBuildInfo::getTechPrereq() const
- CvBuildInfo::isFeatureRemove(int) const
- CvFeatureInfo::getAdvancedStartRemoveCost() const
- CvGame::getGameSpeedInfo() const
- CvGameSpeedInfo::getBuildPercent() const
- CvGlobals::getBuildInfo(BuildTypes)
- CvGlobals::getFeatureInfo(FeatureTypes)
- CvGlobals::getGame()
- CvGlobals::getNumBuildInfos()
- CvPlayer::canBuild(const CvPlot *, BuildTypes, bool, bool, bool, bool) const
- CvPlayer::GetID() const
- CvPlayer::getNumCities() const
- CvPlayer::getTeam() const
- CvPlot::canHaveImprovement(ImprovementTypes, TeamTypes, bool) const
- CvPlot::getFeatureType() const
- CvPlot::getImprovementType() const
- CvPlot::getOwner() const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const