Bazaar developer reference

CvMinorCivAI::GetNearbyResourceForQuest(PlayerTypes)

Defined in
CvMinorCivAI.cpp, line 5578
Class
CvMinorCivAI
Hook name
CivHooks::CvMinorCivAI_GetNearbyResourceForQuest

Hooks

static bool BeforeCvMinorCivAI_GetNearbyResourceForQuest(CvMinorCivAI* self, PlayerTypes ePlayer, ResourceTypes& result);static void AfterCvMinorCivAI_GetNearbyResourceForQuest(CvMinorCivAI* self, PlayerTypes ePlayer, ResourceTypes& result);static ResourceTypes ReplaceCvMinorCivAI_GetNearbyResourceForQuest(ResourceTypes (*original)(CvMinorCivAI*, PlayerTypes), CvMinorCivAI* self, PlayerTypes ePlayer);CivRegisterBefore<CivHooks::CvMinorCivAI_GetNearbyResourceForQuest>(host, &BeforeCvMinorCivAI_GetNearbyResourceForQuest);CivRegisterAfter<CivHooks::CvMinorCivAI_GetNearbyResourceForQuest>(host, &AfterCvMinorCivAI_GetNearbyResourceForQuest);CivRegisterReplace<CivHooks::CvMinorCivAI_GetNearbyResourceForQuest>(host, &ReplaceCvMinorCivAI_GetNearbyResourceForQuest);

Code

5577/// Find a Resource that a Minor would want a major to connect5578ResourceTypes CvMinorCivAI::GetNearbyResourceForQuest(PlayerTypes ePlayer)5579{5580	ResourceTypes eBestResource = NO_RESOURCE;55815582	TeamTypes eTeam = GET_PLAYER(ePlayer).getTeam();55835584	if(GET_PLAYER(ePlayer).getStartingPlot() != NULL)5585	{5586		CvArea* pPlayerArea = GC.getMap().getArea(GET_PLAYER(ePlayer).getStartingPlot()->getArea());55875588		FStaticVector<ResourceTypes, 64, true, c_eCiv5GameplayDLL, 0> veValidResources; // 64 resources should be way more than enough5589		TechTypes eRevealTech;5590		TechTypes eConnectTech;55915592		// Loop through all Resources and see if they're useful5593		ResourceTypes eResource;5594		for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)5595		{5596			eResource = (ResourceTypes) iResourceLoop;55975598			const CvResourceInfo* pkResourceInfo = GC.getResourceInfo(eResource);5599			// Must not be a plain ol' bonus resource5600			if(pkResourceInfo == NULL || pkResourceInfo->getResourceUsage() == RESOURCEUSAGE_BONUS)5601			{5602				continue;5603			}56045605			// Minor can't already have this Resource5606			if(GetPlayer()->getNumResourceTotal(eResource, /*bIncludeImport*/ true) > 0)5607			{5608				continue;5609			}56105611			// Player can't already have this Resource5612			if(GET_PLAYER(ePlayer).getNumResourceTotal(eResource, /*bIncludeImport*/ true) > 0)5613			{5614				continue;5615			}56165617			// Player has to be able to see it5618			eRevealTech = (TechTypes) pkResourceInfo->getTechReveal();5619			if(!GET_TEAM(eTeam).GetTeamTechs()->HasTech(eRevealTech))5620			{5621				continue;5622			}5623			int iRevealPolicy = pkResourceInfo->getPolicyReveal();5624			if (iRevealPolicy != NO_POLICY && !(GET_PLAYER(ePlayer).GetPlayerPolicies()->HasPolicy((PolicyTypes)iRevealPolicy)))5625			{5626				continue;5627			}56285629			// Player has to be able to use it5630			eConnectTech = (TechTypes) pkResourceInfo->getTechCityTrade();5631			if(!GET_TEAM(eTeam).GetTeamTechs()->HasTech(eConnectTech))5632			{5633				continue;5634			}56355636			// Must be this Resource on the player's area5637			if(pPlayerArea->getNumResources(eResource) == 0)5638			{5639				continue;5640			}56415642			veValidResources.push_back(eResource);5643		}56445645		// Didn't find any valid Resources5646		if(veValidResources.size() == 0)5647		{5648			return NO_RESOURCE;5649		}56505651		int iRandIndex = GC.getGame().getJonRandNum(veValidResources.size(), "Finding random Resource for Minor to give out a quest to connect.");5652		eBestResource = veValidResources[iRandIndex];5653	}56545655	return eBestResource;5656}

Calls

Called by