Bazaar developer reference

CvPlayerCulture::GetArchaeologyChoice(CvPlot *)

Defined in
CvCultureClasses.cpp, line 2131
Class
CvPlayerCulture
Hook name
CivHooks::CvPlayerCulture_GetArchaeologyChoice

Hooks

static bool BeforeCvPlayerCulture_GetArchaeologyChoice(CvPlayerCulture* self, CvPlot * pPlot, ArchaeologyChoiceType& result);static void AfterCvPlayerCulture_GetArchaeologyChoice(CvPlayerCulture* self, CvPlot * pPlot, ArchaeologyChoiceType& result);static ArchaeologyChoiceType ReplaceCvPlayerCulture_GetArchaeologyChoice(ArchaeologyChoiceType (*original)(CvPlayerCulture*, CvPlot *), CvPlayerCulture* self, CvPlot * pPlot);CivRegisterBefore<CivHooks::CvPlayerCulture_GetArchaeologyChoice>(host, &BeforeCvPlayerCulture_GetArchaeologyChoice);CivRegisterAfter<CivHooks::CvPlayerCulture_GetArchaeologyChoice>(host, &AfterCvPlayerCulture_GetArchaeologyChoice);CivRegisterReplace<CivHooks::CvPlayerCulture_GetArchaeologyChoice>(host, &ReplaceCvPlayerCulture_GetArchaeologyChoice);

Code

2130/// AI routine - choose what to do with a completed dig site2131ArchaeologyChoiceType CvPlayerCulture::GetArchaeologyChoice(CvPlot *pPlot)2132{2133	ArchaeologyChoiceType eRtnValue = ARCHAEOLOGY_DO_NOTHING;21342135	GreatWorkSlotType eArtArtifactSlot = CvTypes::getGREAT_WORK_SLOT_ART_ARTIFACT();21362137	if (pPlot->HasWrittenArtifact())2138	{2139		eRtnValue = ARCHAEOLOGY_ARTIFACT_WRITING;2140	}2141	2142	// No slots? Definitely go for Landmark or Cultural Renaissance2143	if (!HasAvailableGreatWorkSlot(eArtArtifactSlot))2144	{2145		if (pPlot->HasWrittenArtifact())2146		{2147			eRtnValue = ARCHAEOLOGY_CULTURE_BOOST;2148		}2149		else2150		{2151			eRtnValue = ARCHAEOLOGY_LANDMARK;2152		}2153	}21542155	// Outside territory? Go for artifact ...2156	else if (pPlot->getOwner() != m_pPlayer->GetID())2157	{2158		eRtnValue = ARCHAEOLOGY_ARTIFACT_PLAYER1;21592160		// ... unless this is a city state we want to influence to help with diplo victory2161		if (pPlot->getOwner() != NO_PLAYER && GET_PLAYER(pPlot->getOwner()).isMinorCiv())2162		{2163			if (m_pPlayer->GetGrandStrategyAI()->GetActiveGrandStrategy() == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_UNITED_NATIONS"))2164			{2165				if (m_pPlayer->GetDiplomacyAI()->GetMinorCivApproach(pPlot->getOwner()) != MINOR_CIV_APPROACH_CONQUEST)2166				{2167					eRtnValue = ARCHAEOLOGY_LANDMARK;2168				}2169			}2170		}2171	}21722173	// Not a tile a city can work?  Go for artifact2174	else if (pPlot->getWorkingCity() == NULL)2175	{2176		eRtnValue = ARCHAEOLOGY_ARTIFACT_PLAYER1;2177	}21782179	// Otherwise go for Landmark if from Ancient Era, or if have enough other Archaeologists and Antiquity sites to fill all slots2180	else if (pPlot->GetArchaeologicalRecord().m_eEra == 0)2181	{2182		eRtnValue = ARCHAEOLOGY_LANDMARK;2183	}21842185	else2186	{2187		int iNumArchaeologists = m_pPlayer->GetNumUnitsWithUnitAI(UNITAI_ARCHAEOLOGIST, true) - 1 /* For this one that just completed work */;2188		int iNumSites = m_pPlayer->GetEconomicAI()->GetVisibleAntiquitySites() - 1 /* For this one then just was completed */;2189		int iNumGreatWorkSlots = m_pPlayer->GetCulture()->GetNumAvailableGreatWorkSlots(eArtArtifactSlot);2190		int iLimitingFactor = min(iNumArchaeologists, iNumSites);21912192		if (iNumGreatWorkSlots <= iLimitingFactor)2193		{2194			if (pPlot->HasWrittenArtifact())2195			{2196				eRtnValue = ARCHAEOLOGY_CULTURE_BOOST;2197			}2198			else2199			{2200				eRtnValue = ARCHAEOLOGY_LANDMARK;2201			}2202		}2203		else2204		{2205			eRtnValue = ARCHAEOLOGY_ARTIFACT_PLAYER1;2206		}2207	}22082209	// If chose an artifact, would player 2's be better?2210	if (eRtnValue == ARCHAEOLOGY_ARTIFACT_PLAYER1)2211	{2212		if (pPlot->GetArchaeologicalRecord().m_ePlayer2 == m_pPlayer->GetID())2213		{2214			// For now have AI player try to collect their own artifacts2215			eRtnValue = ARCHAEOLOGY_ARTIFACT_PLAYER2;2216		}2217	}22182219	return eRtnValue;2220}

Calls

Called by