Bazaar developer reference

CvMinorCivAI::GetBestCityStateTarget(PlayerTypes)

Defined in
CvMinorCivAI.cpp, line 5824
Class
CvMinorCivAI
Hook name
CivHooks::CvMinorCivAI_GetBestCityStateTarget

Hooks

static bool BeforeCvMinorCivAI_GetBestCityStateTarget(CvMinorCivAI* self, PlayerTypes eForPlayer, PlayerTypes& result);static void AfterCvMinorCivAI_GetBestCityStateTarget(CvMinorCivAI* self, PlayerTypes eForPlayer, PlayerTypes& result);static PlayerTypes ReplaceCvMinorCivAI_GetBestCityStateTarget(PlayerTypes (*original)(CvMinorCivAI*, PlayerTypes), CvMinorCivAI* self, PlayerTypes eForPlayer);CivRegisterBefore<CivHooks::CvMinorCivAI_GetBestCityStateTarget>(host, &BeforeCvMinorCivAI_GetBestCityStateTarget);CivRegisterAfter<CivHooks::CvMinorCivAI_GetBestCityStateTarget>(host, &AfterCvMinorCivAI_GetBestCityStateTarget);CivRegisterReplace<CivHooks::CvMinorCivAI_GetBestCityStateTarget>(host, &ReplaceCvMinorCivAI_GetBestCityStateTarget);

Code

5821/// Anyone that this City State would want to kill?5822/// NOTE: This makes a random choice, and is not guaranteed to return the same target if called multiple times.5823/// It will, however, return NO_PLAYER reliably if there are no valid targets for eForPlayer.5824PlayerTypes CvMinorCivAI::GetBestCityStateTarget(PlayerTypes eForPlayer)5825{5826	CvAssertMsg(eForPlayer >= 0, "eForPlayer is expected to be non-negative (invalid Index)");5827	CvAssertMsg(eForPlayer < MAX_MAJOR_CIVS, "eForPlayer is expected to be within maximum bounds (invalid Index)");58285829	PlayerTypes eBestCityStateTarget = NO_PLAYER;58305831	PlayerProximityTypes eClosestProximity = PLAYER_PROXIMITY_DISTANT;58325833	// First, loop through the Minors in the game to what the closest proximity is to any of the players5834	int iTargetLoop;5835	PlayerTypes eTarget;5836	for(iTargetLoop = MAX_MAJOR_CIVS; iTargetLoop < MAX_CIV_PLAYERS; iTargetLoop++)5837	{5838		eTarget = (PlayerTypes) iTargetLoop;58395840		if(!GET_PLAYER(eTarget).isAlive())5841			continue;58425843		if(GetPlayer()->getTeam() == GET_PLAYER(eTarget).getTeam())5844			continue;58455846		if(GetPlayer()->GetProximityToPlayer(eTarget) > eClosestProximity)5847		{5848			eClosestProximity = GetPlayer()->GetProximityToPlayer(eTarget);5849		}5850	}58515852	// Found nobody, or only people far away5853	if(eClosestProximity == PLAYER_PROXIMITY_DISTANT)5854	{5855		return NO_PLAYER;5856	}58575858	FStaticVector<PlayerTypes, MAX_CIV_PLAYERS, true, c_eCiv5GameplayDLL, 0> veValidTargets;58595860	// Now loop through and come up with a list of valid players based on the proximity we found out earlier5861	for(iTargetLoop = MAX_MAJOR_CIVS; iTargetLoop < MAX_CIV_PLAYERS; iTargetLoop++)5862	{5863		eTarget = (PlayerTypes) iTargetLoop;58645865		if(!GET_PLAYER(eTarget).isAlive())5866			continue;58675868		if(GetPlayer()->getTeam() == GET_PLAYER(eTarget).getTeam())5869			continue;58705871		if(!GET_TEAM(GET_PLAYER(eForPlayer).getTeam()).isHasMet(GET_PLAYER(eTarget).getTeam()))5872			continue;58735874		if(GetPlayer()->GetProximityToPlayer(eTarget) == eClosestProximity)5875		{5876			veValidTargets.push_back(eTarget);5877		}5878	}58795880	// Didn't find any valid Target players5881	if(veValidTargets.size() == 0)5882		return NO_PLAYER;58835884	int iRandIndex = GC.getGame().getJonRandNum(veValidTargets.size(), "Finding random City State Target for Minor to give out a quest to kill.");5885	eBestCityStateTarget = veValidTargets[iRandIndex];58865887	return eBestCityStateTarget;5888}

Calls

Called by