Bazaar developer reference

CvPlayerTechs::CheckForTechAchievement() const

Defined in
CvTechClasses.cpp, line 1343
Class
CvPlayerTechs
Hook name
CivHooks::CvPlayerTechs_CheckForTechAchievement

Hooks

static bool BeforeCvPlayerTechs_CheckForTechAchievement(const CvPlayerTechs* self);static void AfterCvPlayerTechs_CheckForTechAchievement(const CvPlayerTechs* self);static void ReplaceCvPlayerTechs_CheckForTechAchievement(void (*original)(const CvPlayerTechs*), const CvPlayerTechs* self);CivRegisterBefore<CivHooks::CvPlayerTechs_CheckForTechAchievement>(host, &BeforeCvPlayerTechs_CheckForTechAchievement);CivRegisterAfter<CivHooks::CvPlayerTechs_CheckForTechAchievement>(host, &AfterCvPlayerTechs_CheckForTechAchievement);CivRegisterReplace<CivHooks::CvPlayerTechs_CheckForTechAchievement>(host, &ReplaceCvPlayerTechs_CheckForTechAchievement);

Code

1342///Check for Achievement1343void CvPlayerTechs::CheckForTechAchievement() const1344{1345#if !defined(NO_ACHIEVEMENTS)1346	if(m_pPlayer->isHuman() && !GC.getGame().isGameMultiPlayer())1347	{1348		//Check for Catherine Achievement1349		if((CvString)m_pPlayer->getLeaderTypeKey() == "LEADER_CATHERINE")1350		{1351			for(int iI = 0; iI < GC.getNumTechInfos(); iI++)1352			{1353				const TechTypes eTech = static_cast<TechTypes>(iI);1354				CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);1355				if(pkTechInfo)1356				{1357					CvString szCurrentTech = (CvString) pkTechInfo->GetType();1358					if(szCurrentTech == "TECH_HORSEBACK_RIDING")1359					{1360						if(GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech(eTech))1361						{1362							int iJ;1363							int iNumPlayersWith = 0;1364							for(iJ = 0; iJ < MAX_MAJOR_CIVS; iJ++)1365							{1366								if(!GET_PLAYER((PlayerTypes)iJ).isBarbarian() && !GET_PLAYER((PlayerTypes)iJ).isMinorCiv())1367								{1368									if(GET_TEAM(GET_PLAYER((PlayerTypes)iJ).getTeam()).GetTeamTechs()->HasTech(eTech))1369									{1370										iNumPlayersWith++;1371									}1372								}1373							}1374							if(iNumPlayersWith <= 1)  //For only the human player1375							{1376								gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_PONY);1377							}1378						}1379					}1380				}1381			}1382		}1383		//Check for all achievements1384		if(m_pPlayer->GetPlayerTechs()->IsCurrentResearchRepeat())1385		{1386			for(int iI = 0; iI < GC.getNumTechInfos() - 1; iI++)1387			{1388				const TechTypes eTech = static_cast<TechTypes>(iI);1389				CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);1390				if(pkTechInfo)1391				{1392					if(!GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech(eTech))1393					{1394						return;1395					}1396				}13971398			}13991400			if(GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->GetTechCount((TechTypes)m_pPlayer->GetPlayerTechs()->GetCurrentResearch()) < 1)1401			{1402				return;1403			}1404			gDLL->UnlockAchievement(ACHIEVEMENT_ALL_TECHS);1405		}1406	}1407#endif1408}

Called by