Bazaar developer reference

CvCitySpecializationAI::PlotValueForSpecificYield(CvPlot *, YieldTypes)

Defined in
CvCitySpecializationAI.cpp, line 1215
Class
CvCitySpecializationAI
Hook name
CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield

Hooks

static bool BeforeCvCitySpecializationAI_PlotValueForSpecificYield(CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield, int& result);static void AfterCvCitySpecializationAI_PlotValueForSpecificYield(CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield, int& result);static int ReplaceCvCitySpecializationAI_PlotValueForSpecificYield(int (*original)(CvCitySpecializationAI*, CvPlot*, YieldTypes), CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield);CivRegisterBefore<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &BeforeCvCitySpecializationAI_PlotValueForSpecificYield);CivRegisterAfter<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &AfterCvCitySpecializationAI_PlotValueForSpecificYield);CivRegisterReplace<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &ReplaceCvCitySpecializationAI_PlotValueForSpecificYield);

Code

1214/// Evaluate strength of an existing city for providing a specific type of yield (except Science!)1215int CvCitySpecializationAI::PlotValueForSpecificYield(CvPlot* pPlot, YieldTypes eYield)1216{1217	int iTotalPotentialYield = 0;1218	int iMultiplier = 0;1219	int iPotentialYield = 0;1220	int iFirstRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_FIRST_RING();1221	int iSecondRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_SECOND_RING();1222	int iThirdRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_THIRD_RING();12231224	// Evaluate potential from plots not currently being worked1225	for(int iI = 0; iI < GC.getAI_CITY_SPECIALIZATION_YIELD_NUM_TILES_CONSIDERED(); iI++)1226	{1227		if(iI != CITY_HOME_PLOT)1228		{1229			CvPlot* pLoopPlot = plotCity(pPlot->getX(), pPlot->getY(), iI);1230			if(pLoopPlot != NULL)1231			{1232				iPotentialYield = pLoopPlot->getYield(eYield);12331234				// If owned by someone else, not worth anything1235				if(pLoopPlot->isOwned() && pLoopPlot->getOwner() != m_pPlayer->GetID())1236				{1237					iMultiplier = 0;1238				}1239				else1240				{1241					int iDistance = plotDistance(pLoopPlot->getX(), pLoopPlot->getY(), pPlot->getX(), pPlot->getY());1242					if(iDistance == 1)1243					{1244						iMultiplier = iFirstRingMultiplier;1245					}1246					else if(iDistance == 2)1247					{1248						iMultiplier = iSecondRingMultiplier;1249					}1250					else if(iDistance == 3)1251					{1252						iMultiplier = iThirdRingMultiplier;1253					}1254				}1255				iTotalPotentialYield += iPotentialYield * iMultiplier;1256			}1257		}1258	}12591260	return iTotalPotentialYield;1261}

Calls

Called by