Hooks
static bool BeforeCvCityCitizens_DoRemoveSpecialistFromBuilding(CvCityCitizens* self, BuildingTypes eBuilding, bool bForced, bool bEliminatePopulation);static void AfterCvCityCitizens_DoRemoveSpecialistFromBuilding(CvCityCitizens* self, BuildingTypes eBuilding, bool bForced, bool bEliminatePopulation);static void ReplaceCvCityCitizens_DoRemoveSpecialistFromBuilding(void (*original)(CvCityCitizens*, BuildingTypes, bool, bool), CvCityCitizens* self, BuildingTypes eBuilding, bool bForced, bool bEliminatePopulation);CivRegisterBefore<CivHooks::CvCityCitizens_DoRemoveSpecialistFromBuilding>(host, &BeforeCvCityCitizens_DoRemoveSpecialistFromBuilding);CivRegisterAfter<CivHooks::CvCityCitizens_DoRemoveSpecialistFromBuilding>(host, &AfterCvCityCitizens_DoRemoveSpecialistFromBuilding);CivRegisterReplace<CivHooks::CvCityCitizens_DoRemoveSpecialistFromBuilding>(host, &ReplaceCvCityCitizens_DoRemoveSpecialistFromBuilding);
Code
2398/// Removes and uninitializes a Specialist for this building2399void CvCityCitizens::DoRemoveSpecialistFromBuilding(BuildingTypes eBuilding, bool bForced, bool bEliminatePopulation)2400{2401 CvAssert(eBuilding > -1);2402 CvAssert(eBuilding < GC.getNumBuildingInfos());24032404 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);2405 if(pkBuildingInfo == NULL)2406 {2407 return;2408 }24092410 SpecialistTypes eSpecialist = (SpecialistTypes) pkBuildingInfo->GetSpecialistType();24112412 int iNumSpecialistsAssigned = GetNumSpecialistsInBuilding(eBuilding);24132414 // Need at least 1 assigned to remove2415 if(iNumSpecialistsAssigned > 0)2416 {2417 // Decrease count for the whole city2418 m_aiSpecialistCounts[eSpecialist]--;2419 m_aiNumSpecialistsInBuilding[eBuilding]--;24202421 if(bForced)2422 {2423 m_aiNumForcedSpecialistsInBuilding[eBuilding]--;2424 }24252426 GetCity()->processSpecialist(eSpecialist, -1);2427 GetCity()->UpdateReligion(GetCity()->GetCityReligions()->GetReligiousMajority());24282429 // Do we kill this population or reassign him?2430 if(bEliminatePopulation)2431 {2432 GetCity()->changePopulation(-1, /*bReassignPop*/ false);2433 }2434 else2435 {2436 ChangeNumUnassignedCitizens(1);2437 }24382439 GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);2440 GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);2441 //GC.GetEngineUserInterface()->setDirty(InfoPane_DIRTY_BIT, true );2442 GC.GetEngineUserInterface()->setDirty(CityScreen_DIRTY_BIT, true);2443 GC.GetEngineUserInterface()->setDirty(ColoredPlots_DIRTY_BIT, true);24442445 auto_ptr<ICvCity1> pCity = GC.WrapCityPointer(GetCity());24462447 GC.GetEngineUserInterface()->SetSpecificCityInfoDirty(pCity.get(), CITY_UPDATE_TYPE_SPECIALISTS);2448 }2449}