Bazaar developer reference

CvUnit::discover()

Defined in
CvUnit.cpp, line 9052
Class
CvUnit
Hook name
CivHooks::CvUnit_discover

Hooks

static bool BeforeCvUnit_discover(CvUnit* self, bool& result);static void AfterCvUnit_discover(CvUnit* self, bool& result);static bool ReplaceCvUnit_discover(bool (*original)(CvUnit*), CvUnit* self);CivRegisterBefore<CivHooks::CvUnit_discover>(host, &BeforeCvUnit_discover);CivRegisterAfter<CivHooks::CvUnit_discover>(host, &AfterCvUnit_discover);CivRegisterReplace<CivHooks::CvUnit_discover>(host, &ReplaceCvUnit_discover);

Code

9052bool CvUnit::discover()9053{9054	VALIDATE_OBJECT90559056	CvPlot* pPlot = plot();90579058	if(!canDiscover(pPlot))9059	{9060		return false;9061	}90629063	CvPlayer* pPlayer = &GET_PLAYER(getOwner());9064	CvAssertMsg(pPlayer, "Owner of unit not expected to be NULL. Please send Anton your save file and version.");9065	if (!pPlayer) return false;9066	CvTeam* pTeam = &GET_TEAM(pPlayer->getTeam());9067	CvAssertMsg(pTeam, "Owner team of unit not expected to be NULL. Please send Anton your save file and version.");9068	if (!pTeam) return false;90699070	// Beakers boost based on previous turns9071	int iBeakersBonus = getDiscoverAmount();9072	TechTypes eCurrentTech = pPlayer->GetPlayerTechs()->GetCurrentResearch();9073	if(eCurrentTech == NO_TECH)9074	{9075		pPlayer->changeOverflowResearch(iBeakersBonus);9076	}9077	else9078	{9079		pTeam->GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iBeakersBonus, getOwner());9080	}90819082	// Free techs9083	int iNumFreeTechs = m_pUnitInfo->GetNumFreeTechs();9084	if(!isHuman())9085	{9086		for(int iI = 0; iI < iNumFreeTechs; iI++)9087		{9088			pPlayer->AI_chooseFreeTech();9089		}9090	}9091	else9092	{9093		CvString strBuffer = GetLocalizedText("TXT_KEY_MISC_GREAT_PERSON_CHOOSE_TECH");9094		pPlayer->chooseTech(iNumFreeTechs, strBuffer.GetCString());9095	}90969097	if(pPlot->isActiveVisible(false))9098	{9099		auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(this));9100		gDLL->GameplayUnitActivate(pDllUnit.get());9101	}91029103	if(IsGreatPerson())9104	{9105#if defined(MOD_EVENTS_GREAT_PEOPLE)9106		pPlayer->DoGreatPersonExpended(getUnitType(), this);9107#else9108		pPlayer->DoGreatPersonExpended(getUnitType());9109#endif9110	}91119112	kill(true);91139114	return true;9115}

Calls

Called by