Bazaar developer reference

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

Called by