Bazaar developer reference

CvTeam::DoBarbarianTech()

Defined in
CvTeam.cpp, line 843
Class
CvTeam
Hook name
CivHooks::CvTeam_DoBarbarianTech

Hooks

static bool BeforeCvTeam_DoBarbarianTech(CvTeam* self);static void AfterCvTeam_DoBarbarianTech(CvTeam* self);static void ReplaceCvTeam_DoBarbarianTech(void (*original)(CvTeam*), CvTeam* self);CivRegisterBefore<CivHooks::CvTeam_DoBarbarianTech>(host, &BeforeCvTeam_DoBarbarianTech);CivRegisterAfter<CivHooks::CvTeam_DoBarbarianTech>(host, &AfterCvTeam_DoBarbarianTech);CivRegisterReplace<CivHooks::CvTeam_DoBarbarianTech>(host, &ReplaceCvTeam_DoBarbarianTech);

Code

842/// Barbarian Tech Progress843void CvTeam::DoBarbarianTech()844{845	int iCount;846847	TechTypes eTech;848	TeamTypes eTeam;849850	int iPossibleCount = 0;851852	// See how many majors are still around853	int iTeamLoop;854	for(iTeamLoop = 0; iTeamLoop < MAX_CIV_TEAMS; iTeamLoop++)855	{856		eTeam = (TeamTypes) iTeamLoop;857858		if(GET_TEAM(eTeam).isAlive())859		{860			if(!GET_TEAM(eTeam).isMinorCiv())861			{862				iPossibleCount++;863			}864		}865	}866867	CvAssertMsg(iPossibleCount > 0, "Zero possible players? Uhhh...");868869	// 75% of majors (rounded down) need the tech for the Barbs to get it870	int iTechPercent = /*75*/ GC.getBARBARIAN_TECH_PERCENT();871	int iTeamsNeeded = max(1, iPossibleCount * iTechPercent / 100);872873	for(int iTechLoop = 0; iTechLoop < GC.getNumTechInfos(); iTechLoop++)874	{875		eTech = (TechTypes) iTechLoop;876877		if(!GetTeamTechs()->HasTech(eTech))878		{879			iCount = 0;880881			for(iTeamLoop = 0; iTeamLoop < MAX_CIV_TEAMS; iTeamLoop++)882			{883				eTeam = (TeamTypes) iTeamLoop;884885				if(GET_TEAM(eTeam).isAlive())886				{887					// Only look at Majors, as the City States will lag behind888					if(!GET_TEAM(eTeam).isMinorCiv())889					{890						if(GET_TEAM(eTeam).GetTeamTechs()->HasTech(eTech))891						{892							iCount++;893						}894					}895				}896			}897898			// Do enough majors have this tech?899			if(iCount >= iTeamsNeeded)900			{901				setHasTech(eTech, true, getLeaderID(), false, false);902			}903		}904	}905}

Calls

Called by