Bazaar developer reference

CvPlayerCulture::DoArchaeologyChoice(ArchaeologyChoiceType)

Defined in
CvCultureClasses.cpp, line 2223
Class
CvPlayerCulture
Hook name
CivHooks::CvPlayerCulture_DoArchaeologyChoice

Hooks

static bool BeforeCvPlayerCulture_DoArchaeologyChoice(CvPlayerCulture* self, ArchaeologyChoiceType eChoice);static void AfterCvPlayerCulture_DoArchaeologyChoice(CvPlayerCulture* self, ArchaeologyChoiceType eChoice);static void ReplaceCvPlayerCulture_DoArchaeologyChoice(void (*original)(CvPlayerCulture*, ArchaeologyChoiceType), CvPlayerCulture* self, ArchaeologyChoiceType eChoice);CivRegisterBefore<CivHooks::CvPlayerCulture_DoArchaeologyChoice>(host, &BeforeCvPlayerCulture_DoArchaeologyChoice);CivRegisterAfter<CivHooks::CvPlayerCulture_DoArchaeologyChoice>(host, &AfterCvPlayerCulture_DoArchaeologyChoice);CivRegisterReplace<CivHooks::CvPlayerCulture_DoArchaeologyChoice>(host, &ReplaceCvPlayerCulture_DoArchaeologyChoice);

Code

2222/// Make things happen at an archaeology dig2223void CvPlayerCulture::DoArchaeologyChoice (ArchaeologyChoiceType eChoice)2224{2225	CvGameCulture *pCulture = GC.getGame().GetGameCulture();2226	BuildingClassTypes eBuildingToHouse;2227	int iSlot;2228	CvCity *pHousingCity;2229	CvPlot *pPlot;2230	CvUnit *pUnit = GetNextDigCompleteArchaeologist(&pPlot);2231	if (pUnit)2232	{2233		GreatWorkSlotType eArtArtifactSlot = CvTypes::getGREAT_WORK_SLOT_ART_ARTIFACT();2234		GreatWorkSlotType eWritingSlot = CvTypes::getGREAT_WORK_SLOT_LITERATURE();2235		GreatWorkType eGreatArtifact = CultureHelpers::GetArtifact(pPlot);2236		GreatWorkClass eClass = (GreatWorkClass)GC.getInfoTypeForString("GREAT_WORK_ARTIFACT");22372238		switch (eChoice)2239		{2240		case ARCHAEOLOGY_DO_NOTHING:2241			break;2242		case ARCHAEOLOGY_LANDMARK:2243			{2244				ImprovementTypes eLandmarkImprovement = (ImprovementTypes)GC.getInfoTypeForString("IMPROVEMENT_LANDMARK");2245				if (eLandmarkImprovement != NO_IMPROVEMENT)2246				{2247					pPlot->setImprovementType(eLandmarkImprovement, m_pPlayer->GetID());2248#if defined(MOD_BUGFIX_MINOR)2249					// Clear the pillage state just in case something weird happened on this plot before the dig site was revealed2250#if defined(MOD_EVENTS_TILE_IMPROVEMENTS)2251					pPlot->SetImprovementPillaged(false, false);2252#else2253					pPlot->SetImprovementPillaged(false);2254#endif2255#endif2256					pUnit->kill(true);22572258					if (pPlot->getOwner() != NO_PLAYER)2259					{2260						CvPlayer &kOwner = GET_PLAYER(pPlot->getOwner());22612262						// City-state owned territory?2263						if (kOwner.isMinorCiv())2264						{2265							int iFriendship = GC.getLANDMARK_MINOR_FRIENDSHIP_CHANGE();2266							kOwner.GetMinorCivAI()->ChangeFriendshipWithMajor(m_pPlayer->GetID(), iFriendship);2267						}22682269						// AI major civ owned territory?2270						else if (!kOwner.isHuman())2271						{2272							kOwner.GetDiplomacyAI()->ChangeNumLandmarksBuiltForMe(m_pPlayer->GetID(), 1);2273						}2274					}2275				}2276			}2277			break;2278		case ARCHAEOLOGY_ARTIFACT_PLAYER1:2279			{2280				if (pPlot->getOwner() != pUnit->getOwner() && pPlot->getOwner() != NO_PLAYER)2281				{2282					GET_PLAYER(pPlot->getOwner()).GetDiplomacyAI()->ChangeNegativeArchaeologyPoints(pUnit->getOwner(), 10);2283				}2284				pHousingCity = m_pPlayer->GetCulture()->GetClosestAvailableGreatWorkSlot(pUnit->getX(),pUnit->getY(), eArtArtifactSlot, &eBuildingToHouse, &iSlot);2285				int iGWindex = 	pCulture->CreateGreatWork(eGreatArtifact, eClass, pPlot->GetArchaeologicalRecord().m_ePlayer1, pPlot->GetArchaeologicalRecord().m_eEra, "");2286				pHousingCity->GetCityBuildings()->SetBuildingGreatWork(eBuildingToHouse, iSlot, iGWindex);2287				pPlot->setImprovementType(NO_IMPROVEMENT);2288				pUnit->kill(true);2289			}2290			break;2291		case ARCHAEOLOGY_ARTIFACT_PLAYER2:2292			{2293				if (pPlot->getOwner() != pUnit->getOwner() && pPlot->getOwner() != NO_PLAYER)2294				{2295					GET_PLAYER(pPlot->getOwner()).GetDiplomacyAI()->ChangeNegativeArchaeologyPoints(pUnit->getOwner(), 10);2296				}2297				pHousingCity = m_pPlayer->GetCulture()->GetClosestAvailableGreatWorkSlot(pUnit->getX(),pUnit->getY(), eArtArtifactSlot, &eBuildingToHouse, &iSlot);2298				int iGWindex = 	pCulture->CreateGreatWork(eGreatArtifact, eClass, pPlot->GetArchaeologicalRecord().m_ePlayer2, pPlot->GetArchaeologicalRecord().m_eEra, "");2299				pHousingCity->GetCityBuildings()->SetBuildingGreatWork(eBuildingToHouse, iSlot, iGWindex);2300				pPlot->setImprovementType(NO_IMPROVEMENT);2301				pUnit->kill(true);2302			}2303			break;23042305		case ARCHAEOLOGY_ARTIFACT_WRITING:2306			{2307				if (pPlot->getOwner() != pUnit->getOwner() && pPlot->getOwner() != NO_PLAYER)2308				{2309					GET_PLAYER(pPlot->getOwner()).GetDiplomacyAI()->ChangeNegativeArchaeologyPoints(pUnit->getOwner(), 10);2310				}2311				pHousingCity = m_pPlayer->GetCulture()->GetClosestAvailableGreatWorkSlot(pUnit->getX(),pUnit->getY(), eWritingSlot, &eBuildingToHouse, &iSlot);2312				int iGWindex = 	pCulture->CreateGreatWork(eGreatArtifact, (GreatWorkClass)GC.getInfoTypeForString("GREAT_WORK_LITERATURE"), pPlot->GetArchaeologicalRecord().m_ePlayer1, pPlot->GetArchaeologicalRecord().m_eEra, "");2313				pHousingCity->GetCityBuildings()->SetBuildingGreatWork(eBuildingToHouse, iSlot, iGWindex);2314				pPlot->setImprovementType(NO_IMPROVEMENT);2315				pUnit->kill(true);2316			}2317			break;23182319		case ARCHAEOLOGY_CULTURE_BOOST:2320			{2321				if (pPlot->getOwner() != pUnit->getOwner() && pPlot->getOwner() != NO_PLAYER)2322				{2323					GET_PLAYER(pPlot->getOwner()).GetDiplomacyAI()->ChangeNegativeArchaeologyPoints(pUnit->getOwner(), 10);2324				}23252326				// Culture boost based on 8 previous turns; same as GREAT_WRITER; move to XML?2327				int iValue = m_pPlayer->GetCultureYieldFromPreviousTurns(GC.getGame().getGameTurn(), 8 /*iPreviousTurnsToCount */);23282329				// Modify based on game speed2330				iValue *= GC.getGame().getGameSpeedInfo().getCulturePercent();2331				iValue /= 100;23322333				m_pPlayer->changeJONSCulture(iValue);23342335				pPlot->setImprovementType(NO_IMPROVEMENT);2336				pUnit->kill(true);2337			}2338			break;2339		}23402341		m_pPlayer->SetNumArchaeologyChoices(m_pPlayer->GetNumArchaeologyChoices() - 1);2342		m_pPlayer->GetCulture()->RemoveDigCompletePlot(pPlot);2343	}2344}

Calls

Called by