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
BaseVector::operator[]BaseVector::size- CvArea::getNumResources(ResourceTypes) const
- CvGame::getJonRandNum(int, const char *)
- CvGlobals::getGame()
- CvGlobals::getMap()
- CvGlobals::getNumResourceInfos()
- CvGlobals::getResourceInfo(ResourceTypes)
- CvMap::getArea(int)
- CvMinorCivAI::GetPlayer()
- CvPlayer::getNumResourceTotal(ResourceTypes, bool) const
- CvPlayer::GetPlayerPolicies() const
- CvPlayer::getStartingPlot() const
- CvPlayer::getTeam() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerPolicies::HasPolicy(PolicyTypes) const
- CvPlot::getArea() const
- CvResourceInfo::getPolicyReveal() const
- CvResourceInfo::getResourceUsage() const
- CvResourceInfo::getTechCityTrade() const
- CvResourceInfo::getTechReveal() const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const
FStaticVector::FStaticVectorFStaticVector::push_back