Bazaar developer reference

CvDiplomacyAI::GetRequestFriendToDenounce(PlayerTypes, bool &)

Defined in
CvDiplomacyAI.cpp, line 21726
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_GetRequestFriendToDenounce

Hooks

static bool BeforeCvDiplomacyAI_GetRequestFriendToDenounce(CvDiplomacyAI* self, PlayerTypes ePlayer, bool& bRandFailed, PlayerTypes& result);static void AfterCvDiplomacyAI_GetRequestFriendToDenounce(CvDiplomacyAI* self, PlayerTypes ePlayer, bool& bRandFailed, PlayerTypes& result);static PlayerTypes ReplaceCvDiplomacyAI_GetRequestFriendToDenounce(PlayerTypes (*original)(CvDiplomacyAI*, PlayerTypes, bool&), CvDiplomacyAI* self, PlayerTypes ePlayer, bool& bRandFailed);CivRegisterBefore<CivHooks::CvDiplomacyAI_GetRequestFriendToDenounce>(host, &BeforeCvDiplomacyAI_GetRequestFriendToDenounce);CivRegisterAfter<CivHooks::CvDiplomacyAI_GetRequestFriendToDenounce>(host, &AfterCvDiplomacyAI_GetRequestFriendToDenounce);CivRegisterReplace<CivHooks::CvDiplomacyAI_GetRequestFriendToDenounce>(host, &ReplaceCvDiplomacyAI_GetRequestFriendToDenounce);

Code

21726PlayerTypes CvDiplomacyAI::GetRequestFriendToDenounce(PlayerTypes ePlayer, bool& bRandFailed)21727{21728	bRandFailed = false;2172921730	// Must be friends with ePlayer21731	if(!IsDoFAccepted(ePlayer))21732		return NO_PLAYER;2173321734	PlayerTypes eTarget = NO_PLAYER;2173521736	int iWeight;2173721738	int iBestWeight = -1;2173921740	CvDiplomacyAI* pTheirAI = GET_PLAYER(ePlayer).GetDiplomacyAI();21741	CvTeam* pTheirTeam = &GET_TEAM(GET_PLAYER(ePlayer).getTeam());2174221743	PlayerTypes eLoopPlayer;21744	CvPlayer* pLoopPlayer;21745	TeamTypes eLoopTeam;21746	for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)21747	{21748		eLoopPlayer = (PlayerTypes) iPlayerLoop;21749		pLoopPlayer = &GET_PLAYER(eLoopPlayer);21750		eLoopTeam = pLoopPlayer->getTeam();2175121752		// Must be alive21753		if(!pLoopPlayer->isAlive())21754			continue;2175521756		// Can't be either of us21757		if(eLoopPlayer == GetPlayer()->GetID() || eLoopPlayer == ePlayer)21758			continue;2175921760		// Don't pick someone they haven't met21761		if(!pTheirTeam->isHasMet(eLoopTeam))21762			continue;2176321764		// Don't pick someone they're at war with21765		if(pTheirTeam->isAtWar(eLoopTeam))21766			continue;2176721768		// Don't pick someone they've already denounced21769		if(pTheirAI->IsDenouncedPlayer(eLoopPlayer))21770			continue;2177121772		// Only look at players we've denounced, or at war with21773		if(!IsAtWar(eLoopPlayer) && !IsDenouncedPlayer(eLoopPlayer))21774			continue;2177521776		// Rand roll21777		iWeight = GetDenounceWeight(ePlayer, /*bBias*/ false);2177821779		iWeight += GetNeediness();		// Generally ranges from 3 to 72178021781		if(iWeight >= 23 && iWeight > iBestWeight)21782		{21783			iBestWeight = iWeight;2178421785			eTarget = eLoopPlayer;21786			bRandFailed = false;		// Set this here as well, because we could have failed a roll on another player, and then succeeded on a later one21787		}21788		else21789			bRandFailed = true;21790	}2179121792	return eTarget;21793}

Calls

Called by