Bazaar developer reference

CvDiplomacyAI::DoAngryBefriendedEnemy(PlayerTypes, DiploStatementTypes &, int &)

Defined in
CvDiplomacyAI.cpp, line 15241
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoAngryBefriendedEnemy

Hooks

static bool BeforeCvDiplomacyAI_DoAngryBefriendedEnemy(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, int& iData1);static void AfterCvDiplomacyAI_DoAngryBefriendedEnemy(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, int& iData1);static void ReplaceCvDiplomacyAI_DoAngryBefriendedEnemy(void (*original)(CvDiplomacyAI*, PlayerTypes, DiploStatementTypes&, int&), CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, int& iData1);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoAngryBefriendedEnemy>(host, &BeforeCvDiplomacyAI_DoAngryBefriendedEnemy);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoAngryBefriendedEnemy>(host, &AfterCvDiplomacyAI_DoAngryBefriendedEnemy);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoAngryBefriendedEnemy>(host, &ReplaceCvDiplomacyAI_DoAngryBefriendedEnemy);

Code

15240/// Possible Contact Statement15241void CvDiplomacyAI::DoAngryBefriendedEnemy(PlayerTypes ePlayer, DiploStatementTypes& eStatement, int& iData1)15242{15243	CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");15244	CvAssertMsg(ePlayer < MAX_MAJOR_CIVS, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");1524515246	// We denounced the leader we're talking to - no use whining at this point15247	if(IsDenouncedPlayer(ePlayer) || IsAtWar(ePlayer) || GetMajorCivApproach(ePlayer, /*bHideTrueFeelings*/ true) == MAJOR_CIV_APPROACH_HOSTILE)15248		return;1524915250	if(eStatement == NO_DIPLO_STATEMENT_TYPE)15251	{15252		DiploStatementTypes eTempStatement = DIPLO_STATEMENT_ANGRY_BEFRIEND_ENEMY;1525315254		if(GetNumTurnsSinceStatementSent(ePlayer, eTempStatement) >= 50 &&15255		        GetNumTurnsSinceStatementSent(ePlayer, DIPLO_STATEMENT_ANGRY_BEFRIEND_ENEMY_RANDFAILED) >= 20)15256		{15257			CvDiplomacyAI* pTheirDiploAI = GET_PLAYER(ePlayer).GetDiplomacyAI();1525815259			// Loop through all players until we find one that is our enemy, that ePlayer befriended15260			PlayerTypes eLoopPlayer;15261			for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)15262			{15263				eLoopPlayer = (PlayerTypes) iPlayerLoop;1526415265				// Must be alive15266				if(!GET_PLAYER(eLoopPlayer).isAlive())15267					continue;1526815269				// Can't be either of us15270				if(eLoopPlayer == GetPlayer()->GetID() || eLoopPlayer == ePlayer)15271					continue;1527215273				// We haven't denounced this guy15274				if(!IsDenouncedPlayer(eLoopPlayer))15275					continue;1527615277				// They haven't befriended this guy15278				if(!pTheirDiploAI->IsDoFAccepted(eLoopPlayer))15279					continue;1528015281				// Too much time has passed (or maybe we already sent a message recently)15282				if(pTheirDiploAI->GetDoFCounter(eLoopPlayer) > 1)15283					continue;1528415285				// Found a match!1528615287				int iWeight = GetMeanness();		// Usually ranges from 3 to 715288				iWeight += GC.getGame().getJonRandNum(7, "Random roll for AI statement: 0");1528915290				// We're mean enough to say something15291				if(iWeight >= 7)15292				{15293					eStatement = eTempStatement;15294					iData1 = eLoopPlayer;15295				}15296				// We're going to be nice!15297				else15298				{15299					eStatement = DIPLO_STATEMENT_ANGRY_BEFRIEND_ENEMY_RANDFAILED;15300				}1530115302				// We're done in here15303				break;15304			}15305		}15306	}15307}

Calls

Called by