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
- CvDiplomacyAI::GetDenounceWeight(PlayerTypes, bool)
- CvDiplomacyAI::GetNeediness() const
- CvDiplomacyAI::GetPlayer()
- CvDiplomacyAI::IsAtWar(PlayerTypes)
- CvDiplomacyAI::IsDenouncedPlayer(PlayerTypes) const
- CvDiplomacyAI::IsDoFAccepted(PlayerTypes) const
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayer::isAlive() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvTeam::getTeam(TeamTypes)
- CvTeam::isAtWar(TeamTypes) const
- CvTeam::isHasMet(TeamTypes) const