Bazaar developer reference

CvCityCitizens::DoAddSpecialistToBuilding(BuildingTypes, bool)

Defined in
CvCityCitizens.cpp, line 2333
Class
CvCityCitizens
Hook name
CivHooks::CvCityCitizens_DoAddSpecialistToBuilding

Hooks

static bool BeforeCvCityCitizens_DoAddSpecialistToBuilding(CvCityCitizens* self, BuildingTypes eBuilding, bool bForced);static void AfterCvCityCitizens_DoAddSpecialistToBuilding(CvCityCitizens* self, BuildingTypes eBuilding, bool bForced);static void ReplaceCvCityCitizens_DoAddSpecialistToBuilding(void (*original)(CvCityCitizens*, BuildingTypes, bool), CvCityCitizens* self, BuildingTypes eBuilding, bool bForced);CivRegisterBefore<CivHooks::CvCityCitizens_DoAddSpecialistToBuilding>(host, &BeforeCvCityCitizens_DoAddSpecialistToBuilding);CivRegisterAfter<CivHooks::CvCityCitizens_DoAddSpecialistToBuilding>(host, &AfterCvCityCitizens_DoAddSpecialistToBuilding);CivRegisterReplace<CivHooks::CvCityCitizens_DoAddSpecialistToBuilding>(host, &ReplaceCvCityCitizens_DoAddSpecialistToBuilding);

Code

2332/// Adds and initializes a Specialist for this building2333void CvCityCitizens::DoAddSpecialistToBuilding(BuildingTypes eBuilding, bool bForced)2334{2335	CvAssert(eBuilding > -1);2336	CvAssert(eBuilding < GC.getNumBuildingInfos());23372338	CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);2339	if(pkBuildingInfo == NULL)2340	{2341		return;2342	}23432344	SpecialistTypes eSpecialist = (SpecialistTypes) pkBuildingInfo->GetSpecialistType();23452346	// Can't add more than the max2347	if(IsCanAddSpecialistToBuilding(eBuilding))2348	{2349		// If we're force-assigning a specialist, then we can reduce the count on forced default specialists2350		if(bForced)2351		{2352			if(GetNumForcedDefaultSpecialists() > 0)2353				ChangeNumForcedDefaultSpecialists(-1);2354		}23552356		// If we don't already have an Unassigned Citizen to turn into a Specialist, find one from somewhere2357		if(GetNumUnassignedCitizens() == 0)2358		{2359			DoRemoveWorstCitizen(true, /*Don't remove this type*/ eSpecialist);2360			if(GetNumUnassignedCitizens() == 0)2361			{2362				// Still nobody, all the citizens may be assigned to the eSpecialist we are looking for, try again2363				if(!DoRemoveWorstSpecialist(NO_SPECIALIST, eBuilding))2364				{2365					return; // For some reason we can't do this, we must exit, else we will be going over the population count2366				}2367			}2368		}23692370		// Increase count for the whole city2371		m_aiSpecialistCounts[eSpecialist]++;2372		m_aiNumSpecialistsInBuilding[eBuilding]++;23732374		if(bForced)2375		{2376			m_aiNumForcedSpecialistsInBuilding[eBuilding]++;2377		}23782379		GetCity()->processSpecialist(eSpecialist, 1);2380		GetCity()->UpdateReligion(GetCity()->GetCityReligions()->GetReligiousMajority());23812382		ChangeNumUnassignedCitizens(-1);23832384		ICvUserInterface2* pkIFace = GC.GetEngineUserInterface();2385		pkIFace->setDirty(GameData_DIRTY_BIT, true);2386		pkIFace->setDirty(CityInfo_DIRTY_BIT, true);2387		//pkIFace->setDirty(InfoPane_DIRTY_BIT, true );2388		pkIFace->setDirty(CityScreen_DIRTY_BIT, true);2389		pkIFace->setDirty(ColoredPlots_DIRTY_BIT, true);23902391		CvCity* pkCity = GetCity();2392		auto_ptr<ICvCity1> pCity = GC.WrapCityPointer(pkCity);23932394		pkIFace->SetSpecificCityInfoDirty(pCity.get(), CITY_UPDATE_TYPE_SPECIALISTS);2395	}2396}

Calls

Called by