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}