Bazaar developer reference

CvPlayerTraits::AddUniqueLuxuries(CvCity *)

Defined in
CvTraitClasses.cpp, line 2956
Class
CvPlayerTraits
Hook name
CivHooks::CvPlayerTraits_AddUniqueLuxuries
Lua events
GameEvents.AreaCanHaveAnyResource, GameEvents.PlaceResource

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}

Calls

Called by