Bazaar developer reference

CvPlayer::DoTechFromCityConquer(CvCity *)

Defined in
CvPlayer.cpp, line 11158
Class
CvPlayer
Hook name
CivHooks::CvPlayer_DoTechFromCityConquer

Hooks

static bool BeforeCvPlayer_DoTechFromCityConquer(CvPlayer* self, CvCity* pConqueredCity);static void AfterCvPlayer_DoTechFromCityConquer(CvPlayer* self, CvCity* pConqueredCity);static void ReplaceCvPlayer_DoTechFromCityConquer(void (*original)(CvPlayer*, CvCity*), CvPlayer* self, CvCity* pConqueredCity);CivRegisterBefore<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &BeforeCvPlayer_DoTechFromCityConquer);CivRegisterAfter<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &AfterCvPlayer_DoTechFromCityConquer);CivRegisterReplace<CivHooks::CvPlayer_DoTechFromCityConquer>(host, &ReplaceCvPlayer_DoTechFromCityConquer);

Code

11157/// Each a technology from conquering a city11158void CvPlayer::DoTechFromCityConquer(CvCity* pConqueredCity)11159{11160	PlayerTypes eOpponent = pConqueredCity->getOwner();11161	FStaticVector<TechTypes, 128, true, c_eCiv5GameplayDLL> vePossibleTechs;11162	int iCheapestTechCost = MAX_INT;11163	for (int i = 0; i < GC.getNumTechInfos(); i++)11164	{11165		TechTypes e = (TechTypes) i;11166		CvTechEntry* pInfo = GC.getTechInfo(e);11167		if (pInfo)11168		{11169			// They have it11170			if (GET_TEAM(GET_PLAYER(eOpponent).getTeam()).GetTeamTechs()->HasTech(e))11171			{11172				// We don't11173				if (!GET_TEAM(getTeam()).GetTeamTechs()->HasTech(e))11174				{11175					// But we could11176					if (GetPlayerTechs()->CanResearch(e))11177					{11178						if (pInfo->GetResearchCost() < iCheapestTechCost)11179						{11180							iCheapestTechCost = pInfo->GetResearchCost();11181							vePossibleTechs.clear();11182							vePossibleTechs.push_back(e);11183						}11184						else if (pInfo->GetResearchCost() == iCheapestTechCost)11185						{11186							vePossibleTechs.push_back(e);11187						}11188					}11189				}11190			}11191		}11192	}1119311194	if (!vePossibleTechs.empty())11195	{11196		int iRoll = GC.getGame().getJonRandNum((int)vePossibleTechs.size(), "Rolling to choose free tech from conquering a city");11197		TechTypes eFreeTech = vePossibleTechs[iRoll];11198		CvAssert(eFreeTech != NO_TECH)11199		if (eFreeTech != NO_TECH)11200		{11201			GET_TEAM(getTeam()).setHasTech(eFreeTech, true, GetID(), true, true);11202			GET_TEAM(getTeam()).GetTeamTechs()->SetNoTradeTech(eFreeTech, true);11203		}11204	}11205}

Calls

Called by