Bazaar developer reference

CvCityCitizens::IsBetterThanDefaultSpecialist(SpecialistTypes)

Defined in
CvCityCitizens.cpp, line 1246
Class
CvCityCitizens
Hook name
CivHooks::CvCityCitizens_IsBetterThanDefaultSpecialist

Hooks

static bool BeforeCvCityCitizens_IsBetterThanDefaultSpecialist(CvCityCitizens* self, SpecialistTypes eSpecialist, bool& result);static void AfterCvCityCitizens_IsBetterThanDefaultSpecialist(CvCityCitizens* self, SpecialistTypes eSpecialist, bool& result);static bool ReplaceCvCityCitizens_IsBetterThanDefaultSpecialist(bool (*original)(CvCityCitizens*, SpecialistTypes), CvCityCitizens* self, SpecialistTypes eSpecialist);CivRegisterBefore<CivHooks::CvCityCitizens_IsBetterThanDefaultSpecialist>(host, &BeforeCvCityCitizens_IsBetterThanDefaultSpecialist);CivRegisterAfter<CivHooks::CvCityCitizens_IsBetterThanDefaultSpecialist>(host, &AfterCvCityCitizens_IsBetterThanDefaultSpecialist);CivRegisterReplace<CivHooks::CvCityCitizens_IsBetterThanDefaultSpecialist>(host, &ReplaceCvCityCitizens_IsBetterThanDefaultSpecialist);

Code

1245/// Determine if eSpecialist is preferable to a default specialist, based on our focus1246bool CvCityCitizens::IsBetterThanDefaultSpecialist(SpecialistTypes eSpecialist)1247{1248	CvSpecialistInfo* pSpecialistInfo = GC.getSpecialistInfo(eSpecialist);1249	CvAssertMsg(pSpecialistInfo, "Invalid specialist type when assigning citizens. Please send Anton your save file and version.");1250	if(!pSpecialistInfo) return false; // Assumes that default specialist will work out12511252	SpecialistTypes eDefaultSpecialist = (SpecialistTypes) GC.getDEFAULT_SPECIALIST();1253	CvSpecialistInfo* pDefaultSpecialistInfo = GC.getSpecialistInfo(eDefaultSpecialist);1254	CvAssertMsg(pDefaultSpecialistInfo, "Invalid default specialist type when assigning citizens. Please send Anton your save file and version.");1255	if(!pDefaultSpecialistInfo) return false;12561257	//antonjs: consider: deficient yield12581259	CityAIFocusTypes eFocus = GetFocusType();1260	YieldTypes eYield = NO_YIELD;1261	switch (eFocus)1262	{1263	case CITY_AI_FOCUS_TYPE_FOOD:1264		eYield = YIELD_FOOD;1265		break;1266	case CITY_AI_FOCUS_TYPE_PRODUCTION:1267		eYield = YIELD_PRODUCTION;1268		break;1269	case CITY_AI_FOCUS_TYPE_GOLD:1270		eYield = YIELD_GOLD;1271		break;1272	case CITY_AI_FOCUS_TYPE_GREAT_PEOPLE:1273		eYield = NO_YIELD;1274		break;1275	case CITY_AI_FOCUS_TYPE_SCIENCE:1276		eYield = YIELD_SCIENCE;1277		break;1278	case CITY_AI_FOCUS_TYPE_CULTURE:1279		eYield = YIELD_CULTURE;1280		break;1281	case CITY_AI_FOCUS_TYPE_PROD_GROWTH:1282	case CITY_AI_FOCUS_TYPE_GOLD_GROWTH:1283		eYield = YIELD_FOOD;1284		break;1285	case CITY_AI_FOCUS_TYPE_FAITH:1286		eYield = YIELD_FAITH;1287		break;1288	default:1289		eYield = NO_YIELD;1290		break;1291	}12921293	if (eYield == NO_YIELD)1294		return true;12951296	int iSpecialistYield = pSpecialistInfo->getYieldChange(eYield);1297	int iDefaultSpecialistYield = pDefaultSpecialistInfo->getYieldChange(eYield);12981299	if (m_pCity->GetPlayer()->isHalfSpecialistUnhappiness() || m_pCity->GetPlayer()->isHalfSpecialistFood())1300	{1301		iSpecialistYield *= 2;1302	}13031304	return (iSpecialistYield >= iDefaultSpecialistYield); // Unless default Specialist has strictly more, this Specialist is better1305}

Calls

Called by