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
- CvBuildingEntry::GetBuildingClassType() const
- CvCity::getOwner() const
- CvCityBuildings::GetNumRealBuilding(BuildingTypes) const
- CvCityBuildings::SetNumRealBuilding(BuildingTypes, int)
- CvGlobals::getBuildingInfo(BuildingTypes)
- CvPlayer::isBuildingClassMaxedOut(BuildingClassTypes, int) const
- CvPlayer::removeBuildingClass(BuildingClassTypes)
- CvPlayerAI::getPlayer(PlayerTypes)