Bazaar developer reference

CvCity::CreateBuilding(BuildingTypes)

Defined in
CvCity.cpp, line 13636
Class
CvCity
Hook name
CivHooks::CvCity_CreateBuilding

Hooks

static bool BeforeCvCity_CreateBuilding(CvCity* self, BuildingTypes eBuildingType, bool& result);static void AfterCvCity_CreateBuilding(CvCity* self, BuildingTypes eBuildingType, bool& result);static bool ReplaceCvCity_CreateBuilding(bool (*original)(CvCity*, BuildingTypes), CvCity* self, BuildingTypes eBuildingType);CivRegisterBefore<CivHooks::CvCity_CreateBuilding>(host, &BeforeCvCity_CreateBuilding);CivRegisterAfter<CivHooks::CvCity_CreateBuilding>(host, &AfterCvCity_CreateBuilding);CivRegisterReplace<CivHooks::CvCity_CreateBuilding>(host, &ReplaceCvCity_CreateBuilding);

Code

13636bool CvCity::CreateBuilding(BuildingTypes eBuildingType)13637{13638	VALIDATE_OBJECT1363913640	CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuildingType);13641	if(pkBuildingInfo == NULL)13642		return false;1364313644	const BuildingClassTypes eBuildingClass = (BuildingClassTypes)pkBuildingInfo->GetBuildingClassType();1364513646	CvPlayerAI& kPlayer = GET_PLAYER(getOwner());1364713648	if(kPlayer.isBuildingClassMaxedOut(eBuildingClass, 0))13649	{13650		kPlayer.removeBuildingClass(eBuildingClass);13651	}1365213653	m_pCityBuildings->SetNumRealBuilding(eBuildingType, m_pCityBuildings->GetNumRealBuilding(eBuildingType) + 1);1365413655#if !defined(NO_ACHIEVEMENTS)13656	//Achievements13657	if(kPlayer.isHuman() && !GC.getGame().isGameMultiPlayer())13658	{13659		CvBuildingClassInfo* pBuildingClass = GC.getBuildingClassInfo(eBuildingClass);13660		if(pBuildingClass && ::isWorldWonderClass(*pBuildingClass))13661		{13662			int iCount = 0;13663			CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();13664			for (uint ui = 0; ui < pGameTrade->m_aTradeConnections.size(); ui++)13665			{13666				if (pGameTrade->IsTradeRouteIndexEmpty(ui))13667				{13668					continue;13669				}1367013671				if (pGameTrade->m_aTradeConnections[ui].m_eConnectionType == TRADE_CONNECTION_PRODUCTION)13672				{13673					CvCity* pDestCity = CvGameTrade::GetDestCity(pGameTrade->m_aTradeConnections[ui]);13674					if (pDestCity->getX() == getX() && pDestCity->getY() == getY())13675					{13676						iCount++;13677					}13678				}13679			}1368013681			if (iCount >= 3) 13682			{13683				gDLL->UnlockAchievement(ACHIEVEMENT_XP2_31);13684			}13685		}1368613687		CheckForAchievementBuilding(eBuildingType);13688	}13689#endif1369013691	return true;13692}

Calls

Called by