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
- CvDiplomacyAI::GetDoFCounter(PlayerTypes) const
- CvDiplomacyAI::GetMajorCivApproach(PlayerTypes, bool) const
- CvDiplomacyAI::GetMeanness() const
- CvDiplomacyAI::GetNumTurnsSinceStatementSent(PlayerTypes, DiploStatementTypes)
- CvDiplomacyAI::GetPlayer()
- CvDiplomacyAI::IsAtWar(PlayerTypes)
- CvDiplomacyAI::IsDenouncedPlayer(PlayerTypes) const
- CvDiplomacyAI::IsDoFAccepted(PlayerTypes) const
- CvGame::getJonRandNum(int, const char *)
- CvGlobals::getGame()
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetID() const
- CvPlayer::isAlive() const
- CvPlayerAI::getPlayer(PlayerTypes)