Hooks
static bool BeforeCvPlayerTraits_AddUniqueLuxuries(CvPlayerTraits* self, CvCity * pCity);static void AfterCvPlayerTraits_AddUniqueLuxuries(CvPlayerTraits* self, CvCity * pCity);static void ReplaceCvPlayerTraits_AddUniqueLuxuries(void (*original)(CvPlayerTraits*, CvCity *), CvPlayerTraits* self, CvCity * pCity);CivRegisterBefore<CivHooks::CvPlayerTraits_AddUniqueLuxuries>(host, &BeforeCvPlayerTraits_AddUniqueLuxuries);CivRegisterAfter<CivHooks::CvPlayerTraits_AddUniqueLuxuries>(host, &AfterCvPlayerTraits_AddUniqueLuxuries);CivRegisterReplace<CivHooks::CvPlayerTraits_AddUniqueLuxuries>(host, &ReplaceCvPlayerTraits_AddUniqueLuxuries);
Code
2955/// Should unique luxuries appear beneath this tile?2956void CvPlayerTraits::AddUniqueLuxuries(CvCity *pCity)2957{2958 // Still have more of these cities to award?2959 if (m_iUniqueLuxuryCities > m_iUniqueLuxuryCitiesPlaced)2960 {2961 int iArea = pCity->getArea();29622963 // If we have to be in a new area, check to see if this area is okay2964 if (m_bUniqueLuxuryRequiresNewArea)2965 {2966 // Can't be the capital itself of the area where the capital was founded2967 if (m_pPlayer->GetNumCitiesFounded() == 1)2968 {2969 return;2970 }29712972 CvPlot *pOriginalCapitalPlot = GC.getMap().plot(m_pPlayer->GetOriginalCapitalX(), m_pPlayer->GetOriginalCapitalY());2973 if (pOriginalCapitalPlot)2974 {2975 if (pOriginalCapitalPlot->getArea() == iArea)2976 {2977 return;2978 }2979 }29802981 // Already in the list?2982 if (std::find (m_aUniqueLuxuryAreas.begin(), m_aUniqueLuxuryAreas.end(), iArea) != m_aUniqueLuxuryAreas.end())2983 {2984 return;2985 }2986 2987#if defined(MOD_EVENTS_AREA_RESOURCES)2988 if (MOD_EVENTS_AREA_RESOURCES) {2989 if (GAMEEVENTINVOKE_TESTALL(GAMEEVENT_AreaCanHaveAnyResource, m_pPlayer->GetID(), iArea) == GAMEEVENTRETURN_FALSE) {2990 return;2991 }2992 }2993#endif2994 }29952996 m_aUniqueLuxuryAreas.push_back(iArea); // Store area2997 int iNumUniqueResourcesGiven = m_aUniqueLuxuryAreas.size();2998 m_iUniqueLuxuryCitiesPlaced++; // One less to give out29993000 // Loop through all resources and see if we can find this many unique ones3001 ResourceTypes eResourceToGive = NO_RESOURCE;3002 int iNumUniquesFound = 0;3003 for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)3004 {3005 ResourceTypes eResource = (ResourceTypes) iResourceLoop;3006 CvResourceInfo* pkResource = GC.getResourceInfo(eResource);3007 if (pkResource != NULL && pkResource->GetRequiredCivilization() == m_pPlayer->getCivilizationType())3008 {3009 iNumUniquesFound++;3010 if (iNumUniquesFound == iNumUniqueResourcesGiven)3011 {3012 eResourceToGive = eResource;3013 break;3014 }3015 }3016 }30173018 if (eResourceToGive != NO_RESOURCE)3019 {3020#if defined(MOD_EVENTS_AREA_RESOURCES)3021 if (MOD_EVENTS_AREA_RESOURCES) {3022 GAMEEVENTINVOKE_HOOK(GAMEEVENT_PlaceResource, m_pPlayer->GetID(), eResourceToGive, m_iUniqueLuxuryQuantity, pCity->getX(), pCity->getY());3023 } else {3024#endif3025 pCity->plot()->setResourceType(NO_RESOURCE, 0, true);3026 pCity->plot()->setResourceType(eResourceToGive, m_iUniqueLuxuryQuantity, true);3027#if defined(MOD_EVENTS_AREA_RESOURCES)3028 }3029#endif3030 }3031 }3032}