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}