/// Need some special rules for humans so that the AI isn't exploited
bool CvDiplomacyAI::IsWillingToMakePeaceWithHuman(PlayerTypes ePlayer)
{
CvPlayer& kHumanPlayer = GET_PLAYER(ePlayer);
if (kHumanPlayer.isHuman())
{
#if defined(MOD_CONFIG_GAME_IN_XML)
if(GetPlayerNumTurnsAtWar(ePlayer) < GD_INT_GET(WAR_MAJOR_MINIMUM_TURNS))
{
return false;
}
#else
bool bWillMakePeace = GetPlayerNumTurnsAtWar(ePlayer) >= 5;
#endif
//don't give up if we're about to score!
if (kHumanPlayer.HasCityAboutToBeConquered() && !m_pPlayer->HasCityAboutToBeConquered())
{
return false;
}
if(!GET_TEAM(m_pPlayer->getTeam()).canChangeWarPeace(kHumanPlayer.getTeam()))
{
return false;
}
// If either of us are locked in, then we're not willing to make peace (this prevents weird greetings and stuff) - we use > 1 because it'll get decremented after it appears the human make peace again
if(GET_TEAM(GetPlayer()->getTeam()).GetNumTurnsLockedIntoWar(kHumanPlayer.getTeam()) > 1)
return false;
if(GET_TEAM(kHumanPlayer.getTeam()).GetNumTurnsLockedIntoWar(GetPlayer()->getTeam()) > 1)
return false;
#if defined(MOD_DIPLOMACY_CIV4_FEATURES)
if (MOD_DIPLOMACY_CIV4_FEATURES)
{
// If either of us are locked in war because of a Vassal agreement, then we're not willing to make peace
if(GET_TEAM(GetPlayer()->getTeam()).IsVassalLockedIntoWar(kHumanPlayer.getTeam()) == true)
return false;
if(GET_TEAM(kHumanPlayer.getTeam()).IsVassalLockedIntoWar(GetPlayer()->getTeam()) == true)
return false;
TeamTypes eMasterTeam = GET_TEAM(m_pPlayer->getTeam()).GetMaster();
if(eMasterTeam != NO_TEAM)
{
if(GET_TEAM(eMasterTeam).isAtWar(GET_PLAYER(ePlayer).getTeam()))
{
return false;
}
}
//We don't want peace with vassals.
if(GET_TEAM(GET_PLAYER(ePlayer).getTeam()).IsVassalOfSomeone())
{
return false;
}
}
#endif
#if defined(MOD_BALANCE_CORE)
int iRequestPeaceTurnThreshold = /*4*/ GC.getREQUEST_PEACE_TURN_THRESHOLD();
int iWantPeace = 0;
int iOperationID;
bool bHasOperationUnderway = m_pPlayer->haveAIOperationOfType(AI_OPERATION_CITY_BASIC_ATTACK, &iOperationID, ePlayer);
if(!bHasOperationUnderway)
{
bHasOperationUnderway = m_pPlayer->haveAIOperationOfType(AI_OPERATION_NAVAL_INVASION, &iOperationID, ePlayer);
}
if(!bHasOperationUnderway)
{
bHasOperationUnderway = m_pPlayer->haveAIOperationOfType(AI_OPERATION_NAVAL_ONLY_CITY_ATTACK, &iOperationID, ePlayer);
}
if(bHasOperationUnderway)
{
iWantPeace--;
}
if(GetPlayerNumTurnsSinceCityCapture(ePlayer) > 1 && !bHasOperationUnderway)
{
iWantPeace += (GetPlayerNumTurnsSinceCityCapture(ePlayer) / 2);
}
if(!bHasOperationUnderway && m_pPlayer->GetCulture()->GetWarWeariness() > 0 && m_pPlayer->IsEmpireUnhappy())
{
iWantPeace+= (m_pPlayer->GetCulture()->GetWarWeariness() / 10);
}
if(GetWarProjection(ePlayer) >= WAR_PROJECTION_GOOD)
{
iWantPeace--;
}
else if(GetWarProjection(ePlayer) <= WAR_PROJECTION_UNKNOWN)
{
iWantPeace++;
}
if(GetWarState(ePlayer) <= WAR_STATE_STALEMATE)
{
iWantPeace++;
}
else if(GetWarState(ePlayer) >= WAR_STATE_CALM)
{
iWantPeace--;
}
iWantPeace += GetWantPeaceCounter(ePlayer);
if(iWantPeace > iRequestPeaceTurnThreshold)
{
return true;
}
else
{
return false;
}
#else
return bWillMakePeace;
#endif
}
return true;
}