Bazaar developer reference

CvSiteEvaluatorForStart::PlotFoundValue(CvPlot *, CvPlayer *, YieldTypes, bool)

Defined in
CvSiteEvaluationClasses.cpp, line 1177
Class
CvSiteEvaluatorForStart
Hook name
CivHooks::CvSiteEvaluatorForStart_PlotFoundValue
Overrides
CvCitySiteEvaluator::PlotFoundValue(CvPlot *, CvPlayer *, YieldTypes, bool)

Hooks

static bool BeforeCvSiteEvaluatorForStart_PlotFoundValue(CvSiteEvaluatorForStart* self, CvPlot* pPlot, CvPlayer* pPlayer, YieldTypes arg2, bool arg3, int& result);static void AfterCvSiteEvaluatorForStart_PlotFoundValue(CvSiteEvaluatorForStart* self, CvPlot* pPlot, CvPlayer* pPlayer, YieldTypes arg2, bool arg3, int& result);static int ReplaceCvSiteEvaluatorForStart_PlotFoundValue(int (*original)(CvSiteEvaluatorForStart*, CvPlot*, CvPlayer*, YieldTypes, bool), CvSiteEvaluatorForStart* self, CvPlot* pPlot, CvPlayer* pPlayer, YieldTypes arg2, bool arg3);CivRegisterBefore<CivHooks::CvSiteEvaluatorForStart_PlotFoundValue>(host, &BeforeCvSiteEvaluatorForStart_PlotFoundValue);CivRegisterAfter<CivHooks::CvSiteEvaluatorForStart_PlotFoundValue>(host, &AfterCvSiteEvaluatorForStart_PlotFoundValue);CivRegisterReplace<CivHooks::CvSiteEvaluatorForStart_PlotFoundValue>(host, &ReplaceCvSiteEvaluatorForStart_PlotFoundValue);

Code

1176/// Value of this site for a civ starting location1177int CvSiteEvaluatorForStart::PlotFoundValue(CvPlot* pPlot, CvPlayer* pPlayer, YieldTypes, bool)1178{1179	int rtnValue = 0;1180	int iI;1181	CvPlot* pLoopPlot(NULL);1182	int iCelticForestCount = 0;11831184	CvAssert(pPlot);1185	if(!pPlot) return rtnValue;11861187	if(!CanFound(pPlot, pPlayer, false))1188	{1189		return rtnValue;1190	}11911192	// Is there any reason this site doesn't work for a start location?1193	//1194	// Not on top of a goody hut1195	if(pPlot->isGoody())1196	{1197		return 0;1198	}11991200	// We have our own special method of scoring, so don't call the base class for that (like settler version does)1201#if defined(MOD_GLOBAL_CITY_WORKING)1202	int iLimit = (pPlayer != NULL) ? pPlayer->GetNumWorkablePlots() : AVG_CITY_PLOTS;1203	for(iI = 0; iI < iLimit; iI++)1204#else1205	for(iI = 0; iI < NUM_CITY_PLOTS; iI++)1206#endif1207	{1208		pLoopPlot = plotCity(pPlot->getX(), pPlot->getY(), iI);12091210		// Too close to map edge?1211		if(pLoopPlot == NULL)1212		{1213			return 0;1214		}1215		else1216		{1217			int iDistance = plotDistance(pPlot->getX(), pPlot->getY(), pLoopPlot->getX(), pLoopPlot->getY());1218#if defined(MOD_GLOBAL_CITY_WORKING)1219			if (pPlayer != NULL) {1220				CvAssert(iDistance <= pPlayer->getWorkPlotDistance());1221				if(iDistance > pPlayer->getWorkPlotDistance()) continue;1222			} else {1223				CvAssert(iDistance <= AVG_CITY_RADIUS);1224				if(iDistance > AVG_CITY_RADIUS) continue;1225			}1226#else	1227			CvAssert(iDistance <= NUM_CITY_RINGS);1228			if(iDistance > NUM_CITY_RINGS) continue;1229#endif1230			int iRingModifier = m_iRingModifier[iDistance];12311232			// Skip the city plot itself for now1233			if(iDistance != 0)1234			{1235				rtnValue += iRingModifier * ComputeFoodValue(pLoopPlot, pPlayer) * /*6*/ GC.getSTART_AREA_FOOD_MULTIPLIER();1236				rtnValue += iRingModifier * ComputeHappinessValue(pLoopPlot, pPlayer) * /*12*/ GC.getSTART_AREA_HAPPINESS_MULTIPLIER();1237				rtnValue += iRingModifier * ComputeProductionValue(pLoopPlot, pPlayer) * /*8*/ GC.getSTART_AREA_PRODUCTION_MULTIPLIER();1238				rtnValue += iRingModifier * ComputeGoldValue(pLoopPlot, pPlayer) * /*2*/ GC.getSTART_AREA_GOLD_MULTIPLIER();1239				rtnValue += iRingModifier * ComputeScienceValue(pLoopPlot, pPlayer) * /*1*/ GC.getSTART_AREA_SCIENCE_MULTIPLIER();1240				rtnValue += iRingModifier * ComputeFaithValue(pLoopPlot, pPlayer) * /*1*/ GC.getSTART_AREA_FAITH_MULTIPLIER();1241				rtnValue += iRingModifier * ComputeTradeableResourceValue(pLoopPlot, pPlayer) * /*1*/ GC.getSTART_AREA_RESOURCE_MULTIPLIER();1242				rtnValue += iRingModifier * ComputeStrategicValue(pLoopPlot, pPlayer, iDistance) * /*1*/ GC.getSTART_AREA_STRATEGIC_MULTIPLIER();1243			}12441245			if (pPlayer)1246			{1247				if (iDistance == 1 && pLoopPlot->getFeatureType() == FEATURE_FOREST)1248				{1249					if (pLoopPlot->getImprovementType() == NO_IMPROVEMENT && pPlayer->GetPlayerTraits()->IsFaithFromUnimprovedForest())1250					{1251						iCelticForestCount += 1;1252					}1253				}1254			}1255		}1256	}12571258	if (iCelticForestCount >= 3)1259	{1260		rtnValue += 2 * 1000 * m_iFlavorMultiplier[YIELD_FAITH];1261	}1262	else if (iCelticForestCount >= 1)1263	{1264		rtnValue += 1 * 1000 * m_iFlavorMultiplier[YIELD_FAITH];1265	}12661267	if(rtnValue < 0) rtnValue = 0;12681269	// Finally, look at the city plot itself and use it as an overall multiplier1270	if(pPlot->getResourceType() != NO_RESOURCE)1271	{1272		rtnValue += rtnValue * GC.getBUILD_ON_RESOURCE_PERCENT() / 100;1273	}12741275	if(pPlot->isRiver())1276	{1277		rtnValue += rtnValue * GC.getBUILD_ON_RIVER_PERCENT() / 100;1278	}12791280	if(pPlot->isCoastalLand())1281	{1282		rtnValue += rtnValue * GC.getSTART_AREA_BUILD_ON_COAST_PERCENT() / 100;1283	}12841285	return rtnValue;1286}

Calls

Called by