Hooks
static bool BeforeCvCityCitizens_DoRemoveWorstCitizen(CvCityCitizens* self, bool bRemoveForcedStatus, SpecialistTypes eDontChangeSpecialist, int iCurrentCityPopulation, bool& result);static void AfterCvCityCitizens_DoRemoveWorstCitizen(CvCityCitizens* self, bool bRemoveForcedStatus, SpecialistTypes eDontChangeSpecialist, int iCurrentCityPopulation, bool& result);static bool ReplaceCvCityCitizens_DoRemoveWorstCitizen(bool (*original)(CvCityCitizens*, bool, SpecialistTypes, int), CvCityCitizens* self, bool bRemoveForcedStatus, SpecialistTypes eDontChangeSpecialist, int iCurrentCityPopulation);CivRegisterBefore<CivHooks::CvCityCitizens_DoRemoveWorstCitizen>(host, &BeforeCvCityCitizens_DoRemoveWorstCitizen);CivRegisterAfter<CivHooks::CvCityCitizens_DoRemoveWorstCitizen>(host, &AfterCvCityCitizens_DoRemoveWorstCitizen);CivRegisterReplace<CivHooks::CvCityCitizens_DoRemoveWorstCitizen>(host, &ReplaceCvCityCitizens_DoRemoveWorstCitizen);
Code
1418/// Pick the worst Plot to stop working1419bool CvCityCitizens::DoRemoveWorstCitizen(bool bRemoveForcedStatus, SpecialistTypes eDontChangeSpecialist, int iCurrentCityPopulation)1420{1421 if (iCurrentCityPopulation == -1)1422 {1423#if defined(MOD_GLOBAL_CITY_AUTOMATON_WORKERS)1424 iCurrentCityPopulation = GetCity()->getPopulation(true);1425#else1426 iCurrentCityPopulation = GetCity()->getPopulation();1427#endif1428 }14291430 // Are all of our guys already not working Plots?1431#if defined(MOD_GLOBAL_CITY_AUTOMATON_WORKERS)1432 if(GetNumUnassignedCitizens() == GetCity()->getPopulation(true))1433#else1434 if(GetNumUnassignedCitizens() == GetCity()->getPopulation())1435#endif1436 {1437 return false;1438 }14391440 // Find default Specialist to pull off, if there is one1441 if(GetNumDefaultSpecialists() > 0)1442 {1443 // Do we either have unforced default specialists we can remove?1444 if(GetNumDefaultSpecialists() > GetNumForcedDefaultSpecialists())1445 {1446 ChangeNumDefaultSpecialists(-1);1447 return true;1448 }1449 if(GetNumDefaultSpecialists() > iCurrentCityPopulation)1450 {1451 ChangeNumForcedDefaultSpecialists(-1);1452 ChangeNumDefaultSpecialists(-1);1453 return true;1454 }1455 }14561457 // No Default Specialists, remove a working Pop, if there is one1458 int iWorstPlotValue = 0;1459 CvPlot* pWorstPlot = GetBestCityPlotWithValue(iWorstPlotValue, /*bBest*/ false, /*bWorked*/ true);14601461 if(pWorstPlot != NULL)1462 {1463 SetWorkingPlot(pWorstPlot, false);14641465 // If we were force-working this Plot, turn it off1466 if(bRemoveForcedStatus)1467 {1468 if(IsForcedWorkingPlot(pWorstPlot))1469 {1470 SetForcedWorkingPlot(pWorstPlot, false);1471 }1472 }14731474 return true;1475 }1476 // Have to resort to pulling away a good Specialist1477 else1478 {1479 if(DoRemoveWorstSpecialist(eDontChangeSpecialist))1480 {1481 return true;1482 }1483 }14841485 return false;1486}