Bazaar developer reference

CvCity::CheckForAchievementBuilding(BuildingTypes)

Defined in
CvCity.cpp, line 16488
Class
CvCity
Hook name
CivHooks::CvCity_CheckForAchievementBuilding

Hooks

static bool BeforeCvCity_CheckForAchievementBuilding(CvCity* self, BuildingTypes eBuilding);static void AfterCvCity_CheckForAchievementBuilding(CvCity* self, BuildingTypes eBuilding);static void ReplaceCvCity_CheckForAchievementBuilding(void (*original)(CvCity*, BuildingTypes), CvCity* self, BuildingTypes eBuilding);CivRegisterBefore<CivHooks::CvCity_CheckForAchievementBuilding>(host, &BeforeCvCity_CheckForAchievementBuilding);CivRegisterAfter<CivHooks::CvCity_CheckForAchievementBuilding>(host, &AfterCvCity_CheckForAchievementBuilding);CivRegisterReplace<CivHooks::CvCity_CheckForAchievementBuilding>(host, &ReplaceCvCity_CheckForAchievementBuilding);

Code

16488void CvCity::CheckForAchievementBuilding(BuildingTypes eBuilding)16489{16490	CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);16491	if(pkBuildingInfo == NULL)16492		return;1649316494#if !defined(NO_ACHIEVEMENTS)16495	const char* szBuildingTypeChar = pkBuildingInfo->GetType();16496	CvString szBuilding = szBuildingTypeChar;1649716498	if(szBuilding == "BUILDING_LONGHOUSE")16499	{16500		CvPlot* pLoopPlot;16501		int nForests = 0;16502#if defined(MOD_GLOBAL_CITY_WORKING)16503		for(int iI = 0; iI < GetNumWorkablePlots(); iI++)16504#else16505		for(int iI = 0; iI < NUM_CITY_PLOTS; iI++)16506#endif16507		{16508			pLoopPlot = plotCity(getX(), getY(), iI);1650916510			if(pLoopPlot != NULL)16511			{16512				if(pLoopPlot->getOwner() == getOwner())16513				{16514					if(pLoopPlot->getFeatureType() == FEATURE_FOREST)16515					{16516						nForests++;16517					}16518				}16519			}16520		}16521		if(nForests >=4)16522		{16523			gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_LONGHOUSE);16524		}16525	}16526	if(szBuilding == "BUILDING_FLOATING_GARDENS")16527	{16528		int iCityX = getX();16529		int iCityY = getY();16530		PlayerTypes eCityOwner = getOwner();16531#if defined(MOD_GLOBAL_CITY_WORKING)16532		for(int iI = 0; iI < GetNumWorkablePlots(); iI++)16533#else16534		for(int iI = 0; iI < NUM_CITY_PLOTS; iI++)16535#endif16536		{16537			CvPlot* pLoopPlot = plotCity(iCityX, iCityY, iI);1653816539			if(pLoopPlot != NULL && pLoopPlot->getOwner() == eCityOwner && pLoopPlot->isLake())16540			{16541				gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_GARDENS);16542				break;16543			}16544		}16545	}16546	//DLC_06 achievement: Build Statue of Zeus and Temple of Artemis in same city16547	if(szBuilding == "BUILDING_STATUE_ZEUS" || szBuilding == "BUILDING_TEMPLE_ARTEMIS")16548	{16549		CvString szOtherWonder = "";16550		if(szBuilding == "BUILDING_STATUE_ZEUS")16551		{16552			szOtherWonder = "BUILDING_TEMPLE_ARTEMIS";16553		}16554		else16555		{16556			szOtherWonder = "BUILDING_STATUE_ZEUS";16557		}16558		BuildingTypes eOtherWonder = (BuildingTypes)GC.getInfoTypeForString(szOtherWonder, true);16559		if(eOtherWonder != NO_BUILDING)16560		{16561			PlayerTypes eCityOwner = getOwner();16562			if(GetCityBuildings()->GetNumBuilding(eOtherWonder) > 0)16563			{16564				if(GetCityBuildings()->GetBuildingOriginalOwner(eOtherWonder) == eCityOwner)16565				{16566					gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_ZEUS_AND_ARTEMIS);16567				}16568			}16569		}16570	}16571#endif16572}

Calls