Bazaar developer reference

CvEspionageAI::StealTechnology()

Defined in
CvEspionageClasses.cpp, line 5021
Class
CvEspionageAI
Hook name
CivHooks::CvEspionageAI_StealTechnology

Hooks

static bool BeforeCvEspionageAI_StealTechnology(CvEspionageAI* self);static void AfterCvEspionageAI_StealTechnology(CvEspionageAI* self);static void ReplaceCvEspionageAI_StealTechnology(void (*original)(CvEspionageAI*), CvEspionageAI* self);CivRegisterBefore<CivHooks::CvEspionageAI_StealTechnology>(host, &BeforeCvEspionageAI_StealTechnology);CivRegisterAfter<CivHooks::CvEspionageAI_StealTechnology>(host, &AfterCvEspionageAI_StealTechnology);CivRegisterReplace<CivHooks::CvEspionageAI_StealTechnology>(host, &ReplaceCvEspionageAI_StealTechnology);

Code

5019/// Checks to see if there are any technologies to steal5020/// If so, steals them!5021void CvEspionageAI::StealTechnology()5022{5023	CvPlayerEspionage* pEspionage = m_pPlayer->GetEspionage();50245025	// try to steal technologies5026	for(uint uiDefendingPlayer = 0; uiDefendingPlayer < MAX_MAJOR_CIVS; uiDefendingPlayer++)5027	{5028		PlayerTypes eDefendingPlayer = (PlayerTypes)uiDefendingPlayer;5029		int iHeistLocationCounter = 0;5030		while(pEspionage->m_aiNumTechsToStealList[uiDefendingPlayer] > 0)5031		{5032			// steal a tech5033			CvAssertMsg(pEspionage->m_aaPlayerStealableTechList[uiDefendingPlayer].size() > 0, "pEspionage->m_aaPlayerStealableTechList[uiPlayer] list is empty. Not good");5034			TeamTypes eTeam = m_pPlayer->getTeam();5035			TechTypes eStolenTech = pEspionage->m_aaPlayerStealableTechList[uiDefendingPlayer][0];5036			GET_TEAM(eTeam).setHasTech(eStolenTech, true, m_pPlayer->GetID(), true, true);5037			GET_TEAM(eTeam).GetTeamTechs()->SetNoTradeTech(eStolenTech, true);50385039			// send out notifications to the parties that were stolen from5040			CvPlot* pPlot = GC.getMap().plot(pEspionage->m_aHeistLocations[uiDefendingPlayer][iHeistLocationCounter].m_iX, pEspionage->m_aHeistLocations[uiDefendingPlayer][iHeistLocationCounter].m_iY);5041			CvAssertMsg(pPlot, "Could not find plot location for HeistLocation");5042			if(pPlot)5043			{5044				CvCity* pCity = pPlot->getPlotCity();5045				CvAssertMsg(pCity, "Plot does not contain a city");5046				if(pCity)5047				{5048					CvAssertMsg(pCity->getOwner() == uiDefendingPlayer, "City does not belong to player. This is very strange");5049					CvCityEspionage* pCityEspionage = pCity->GetCityEspionage();5050					CvAssertMsg(pCityEspionage, "City did not have CityEspionage data");5051					if(pCityEspionage)5052					{5053						CvPlayerEspionage* pDefendingPlayerEspionage = GET_PLAYER(eDefendingPlayer).GetEspionage();5054						if(pDefendingPlayerEspionage)5055						{5056							pDefendingPlayerEspionage->AddSpyMessage(pCity->getX(), pCity->getY(), m_pPlayer->GetID(), pCityEspionage->m_aiResult[m_pPlayer->GetID()], eStolenTech);5057						}5058					}5059				}5060			}5061			iHeistLocationCounter++;50625063			// recalculate the num techs to steal list5064			pEspionage->BuildStealableTechList((PlayerTypes)uiDefendingPlayer);5065			if(pEspionage->m_aaPlayerStealableTechList[uiDefendingPlayer].size() > 0 && pEspionage->m_aiNumTechsToStealList[uiDefendingPlayer] > 0)5066			{5067				pEspionage->m_aiNumTechsToStealList[uiDefendingPlayer]--;5068			}5069			else5070			{5071				pEspionage->m_aiNumTechsToStealList[uiDefendingPlayer] = 0;5072			}5073		}5074	}5075}

Calls

Called by