1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

Is there a way to renew Open Borders before it lapses?

Discussion in 'Community Patch Project' started by Stalker0, Oct 29, 2019.

  1. Gazebo

    Gazebo Lord of the Community Patch Supporter

    Joined:
    Sep 26, 2010
    Messages:
    18,296
    Gender:
    Male
    Location:
    Little Rock
    It only takes one OB and a well executed plan to strip a player's land of around 6-9 artifacts. That's the majority (if not the totality) of a player's in-borders artifacts.

    G
     
    JamesNinelives likes this.
  2. bigcat88

    bigcat88 King

    Joined:
    Nov 26, 2016
    Messages:
    743
    Gender:
    Male
    A turn before open borders will end, AI just ask human with propose for new open borders(with recalculated cost if needed). If AI dont want new proposal then just inform human with impossible deal cost.
    If human declines, nothing happens - open borders will just end as usual.
    If human agree, then add new proposal - lets name it Open Borders X(where X is number from previous open borders)
    OR if an engine in current state allows, then just increase a deal length of current OB and replace cost of a deal.

    We lost only one turn in terms of wrong calculation(person who accepts pays twice(cost of last day from previous deal and cost from new deal))
     
    vyyt likes this.
  3. Omen of Peace

    Omen of Peace Prince

    Joined:
    Mar 22, 2018
    Messages:
    402
    Gender:
    Male
    If it's doable, I really like this approach.
    Except, now that I think about it, perhaps it can be exploited by humans? Like expel a rival civ from your territory if they're about to seize a city while attacking from your realm, or to get rid of missionaries... Not major issues, but minor exploitations.
    Hmm... On balance I still like it.
     
  4. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    It's relevant to the discussion, so I've improved the diplo AI mechanics for stealing artifacts as follows:

    - AI will now always have an opinion penalty if you steal their artifacts, regardless of if you make a promise or not (with the previous mechanic, you could apparently steal one artifact per AI with no penalty). The penalty and duration increases every time you steal an artifact from the same AI (caps at 40 negative opinion for 3+ artifacts) and it decays over time. Making a promise and keeping it will lower but not eliminate the penalty.

    - AI will no longer give Open Borders to players who have stolen any of their artifacts if there are still any artifacts in their lands that can be stolen by that player. This applies to both humans and AIs, is independent of the opinion penalty (so even if they've forgiven you, they're still not letting you in until their sites are excavated), and distinguishes between normal and hidden antiquity sites.
     
    cammcken, saamohod, akasha27 and 2 others like this.
  5. Stalker0

    Stalker0 Baller Magnus

    Joined:
    Dec 31, 2005
    Messages:
    8,313
    And you are sure the AI has no bias on Open Borders to a player....just for the fact that Archaeology is out? It certain feels that way that all of my open borders get shut down around this time period.
     
  6. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    Yes. Feel free to check the code :)

    Code:
    /// How much in V-POINTS (aka value) is Open Borders worth?  You gotta admit that V-POINTS sound pretty cool though
    int CvDealAI::GetOpenBordersValue(bool bFromMe, PlayerTypes eOtherPlayer, bool bUseEvenValue)
    {
       CvAssertMsg(GetPlayer()->GetID() != eOtherPlayer, "DEAL_AI: Trying to check value of Open Borders with oneself.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");
    
       MajorCivApproachTypes eApproach = GetPlayer()->GetDiplomacyAI()->GetMajorCivApproach(eOtherPlayer, /*bHideTrueFeelings*/ false);
    
       // If we're friends, then OB is always equally valuable to both parties
    #if !defined(MOD_BALANCE_CORE)
       if(eApproach == MAJOR_CIV_APPROACH_FRIENDLY)
           return 50;
    #else
       int iItemValue = 100;
    #endif
    
    #if defined(MOD_DIPLOMACY_CIV4_FEATURES)
       if (MOD_DIPLOMACY_CIV4_FEATURES) {
           if (bFromMe)
           {
               // If it's my item and I'm the vassal of the other player, accept it.
               if (GET_TEAM(GET_PLAYER(eOtherPlayer).getTeam()).GetMaster() == GET_PLAYER(GetPlayer()->GetID()).getTeam())
               {
                   return iItemValue;
               }
           }
           else
           {
               // If it's their item and they're my vassal, accept it.
               if (GET_TEAM(GetPlayer()->getTeam()).GetMaster() == GET_PLAYER(eOtherPlayer).getTeam())
               {
                   return iItemValue;
               }
           }
       }
    #endif
    
       // Me giving Open Borders to the other guy
       if(bFromMe)
       {
           if (!GetPlayer()->GetDiplomacyAI()->IsWillingToGiveOpenBordersToPlayer(eOtherPlayer))
           {
               return INT_MAX;
           }
           // Approach is important
           switch(eApproach)
           {
           case MAJOR_CIV_APPROACH_HOSTILE:
           case MAJOR_CIV_APPROACH_GUARDED:
           case MAJOR_CIV_APPROACH_WAR:
               return INT_MAX;
               break;
           case MAJOR_CIV_APPROACH_DECEPTIVE:
               iItemValue += 400;
               break;
           case MAJOR_CIV_APPROACH_AFRAID:
               iItemValue += 300;
               break;
           case MAJOR_CIV_APPROACH_FRIENDLY:
               iItemValue += 50;
               break;
           case MAJOR_CIV_APPROACH_NEUTRAL:
               iItemValue += 200;
               break;
           default:
               CvAssertMsg(false, "DEAL_AI: AI player has no valid Approach for Open Borders valuation.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
               iItemValue += 100;
               break;
           }
    
           // If they're at war with our enemies then we're more likely to give them OB
           int iNumEnemiesAtWarWith = GetPlayer()->GetDiplomacyAI()->GetNumOurEnemiesPlayerAtWarWith(eOtherPlayer);
    #if defined(MOD_BALANCE_CORE_DEALS)
           if(iNumEnemiesAtWarWith > 0)
    #else
           if(iNumEnemiesAtWarWith >= 2)
    #endif
           {
    #if defined(MOD_BALANCE_CORE_DEALS)
               iItemValue *= (100 - (iNumEnemiesAtWarWith * 5));
    #else
               iItemValue *= 10;
    #endif
               iItemValue /= 100;
           }
    #if !defined(MOD_BALANCE_CORE_DEALS)
           else if(iNumEnemiesAtWarWith == 1)
           {
               iItemValue *= 50;
               iItemValue /= 100;
           }
    #endif
    #if defined(MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
           if (GetPlayer()->GetCulture()->GetTourism() / 100 > 0)
           {
               // The civ we need influence on the most should ALWAYS be included
               if (GetPlayer()->GetCulture()->GetCivLowestInfluence(false /*bCheckOpenBorders*/) == eOtherPlayer)
               {
                   iItemValue *= 50;
                   iItemValue /= 100;
               }
    
               // If have influence over half the civs, want OB with the other half
               if (GetPlayer()->GetCulture()->GetNumCivsToBeInfluentialOn() <= GetPlayer()->GetCulture()->GetNumCivsInfluentialOn())
               {
                   if (GetPlayer()->GetCulture()->GetInfluenceLevel(eOtherPlayer) < INFLUENCE_LEVEL_INFLUENTIAL)
                   {
                       iItemValue *= 50;
                       iItemValue /= 100;
                   }
               }
           }
    #endif
    #if !defined(MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
           // Do we think he's going for culture victory?
           AIGrandStrategyTypes eCultureStrategy = (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CULTURE");
           if (eCultureStrategy != NO_AIGRANDSTRATEGY && GetPlayer()->GetGrandStrategyAI()->GetGuessOtherPlayerActiveGrandStrategy(eOtherPlayer) == eCultureStrategy)
           {
               CvPlayer &kOtherPlayer = GET_PLAYER(eOtherPlayer);
    
               // If he has tourism and he's not influential on us yet, resist!
               if (kOtherPlayer.GetCulture()->GetTourism() / 100 > 0 && kOtherPlayer.GetCulture()->GetInfluenceOn(GetPlayer()->GetID()) < INFLUENCE_LEVEL_INFLUENTIAL)
               {
                   iItemValue *= 500;
                   iItemValue /= 100;
               }
           }
    #if defined(MOD_BALANCE_CORE_DEALS)
           if(MOD_BALANCE_CORE_DEALS)
           {
               CvPlayer &kOtherPlayer = GET_PLAYER(eOtherPlayer);
               if (kOtherPlayer.GetCulture()->GetTourism() / 100 > 0 && (kOtherPlayer.GetCulture()->GetInfluenceOn(GetPlayer()->GetID()) > INFLUENCE_LEVEL_FAMILIAR) && (kOtherPlayer.GetCulture()->GetInfluenceOn(GetPlayer()->GetID()) < INFLUENCE_LEVEL_INFLUENTIAL))
               {
                   if(GetPlayer()->GetDiplomacyAI()->GetMajorCivOpinion(eOtherPlayer) <= MAJOR_CIV_OPINION_NEUTRAL)
                   {
                       if(GetPlayer()->GetDiplomacyAI()->GetVictoryBlockLevel(eOtherPlayer) >= BLOCK_LEVEL_STRONG || GetPlayer()->GetDiplomacyAI()->GetVictoryDisputeLevel(eOtherPlayer) >= DISPUTE_LEVEL_STRONG)
                       {
                           iItemValue = 100000;
                       }
                   }
               }
           }
    #endif
    #endif
       }
        // Other guy giving me Open Borders
       else
       {
    #if defined(MOD_BALANCE_CORE)
           if (!GetPlayer()->GetDiplomacyAI()->IsWantsOpenBordersWithPlayer(eOtherPlayer))
           {
               return INT_MAX;
           }
    
           // Approach is important
           switch(eApproach)
           {
           //If we don't like him, don't take his borders. It's a trap!
           case MAJOR_CIV_APPROACH_WAR:
           case MAJOR_CIV_APPROACH_HOSTILE:
           case MAJOR_CIV_APPROACH_DECEPTIVE:
           case MAJOR_CIV_APPROACH_GUARDED:
               return INT_MAX;
               break;
           case MAJOR_CIV_APPROACH_AFRAID:
               iItemValue += 200;
               break;
           case MAJOR_CIV_APPROACH_FRIENDLY:
               iItemValue += 100;
               break;
           case MAJOR_CIV_APPROACH_NEUTRAL:
               iItemValue += 50;
               break;
           default:
               CvAssertMsg(false, "DEAL_AI: AI player has no valid Approach for Open Borders valuation.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
               iItemValue += 100;
               break;
           }
           // Proximity is very important
           switch(GetPlayer()->GetProximityToPlayer(eOtherPlayer))
           {
           case PLAYER_PROXIMITY_DISTANT:
               iItemValue *= 70;
               iItemValue /= 100;
               break;
           case PLAYER_PROXIMITY_FAR:
               iItemValue *= 80;
               iItemValue /= 100;
               break;
           case PLAYER_PROXIMITY_CLOSE:
               iItemValue *= 90;
               iItemValue /= 100;
               break;
           case PLAYER_PROXIMITY_NEIGHBORS:
               iItemValue *= 110;
               iItemValue /= 100;
               break;
           default:
               CvAssertMsg(false, "DEAL_AI: AI player has no valid Proximity for Open Borders valuation.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
               iItemValue = 0;
               break;
           }
    #else
           // Proximity is very important
           switch(GetPlayer()->GetProximityToPlayer(eOtherPlayer))
           {
           case PLAYER_PROXIMITY_DISTANT:
               iItemValue = 5;
               break;
           case PLAYER_PROXIMITY_FAR:
               iItemValue = 10;
               break;
           case PLAYER_PROXIMITY_CLOSE:
               iItemValue = 15;
               break;
           case PLAYER_PROXIMITY_NEIGHBORS:
               iItemValue = 30;
               break;
           default:
               CvAssertMsg(false, "DEAL_AI: AI player has no valid Proximity for Open Borders valuation.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.")
               iItemValue = 0;
               break;
           }
    #endif
           // Reduce value by half if the other guy only has a single City
           if(GET_PLAYER(eOtherPlayer).getNumCities() == 1)
           {
               iItemValue *= 50;
               iItemValue /= 100;
           }
    #if defined(MOD_BALANCE_CORE_DIPLOMACY)
           if(GetPlayer()->IsCramped() && GET_PLAYER(eOtherPlayer).getNumCities() > GetPlayer()->getNumCities())
           {
               iItemValue *= 125;
               iItemValue /= 100;
           }
           if(GetPlayer()->GetDiplomacyAI()->GetNeighborOpinion(eOtherPlayer) == MAJOR_CIV_OPINION_ENEMY)
           {
               iItemValue *= 125;
               iItemValue /= 100;
           }
           if(GetPlayer()->GetDiplomacyAI()->MusteringForNeighborAttack(eOtherPlayer))
           {
               iItemValue *= 150;
               iItemValue /= 100;
           }
           //We need to explore?
           EconomicAIStrategyTypes eNeedRecon = (EconomicAIStrategyTypes) GC.getInfoTypeForString("ECONOMICAISTRATEGY_NEED_RECON");
           EconomicAIStrategyTypes eNavalRecon = (EconomicAIStrategyTypes) GC.getInfoTypeForString("ECONOMICAISTRATEGY_NEED_RECON_SEA");
           if(eNeedRecon != NO_ECONOMICAISTRATEGY && GetPlayer()->GetEconomicAI()->IsUsingStrategy(eNeedRecon))
           {
               iItemValue *= 115;
               iItemValue /= 100;
           }
           if(eNavalRecon != NO_ECONOMICAISTRATEGY && GetPlayer()->GetEconomicAI()->IsUsingStrategy(eNavalRecon))
           {
               iItemValue *= 115;
               iItemValue /= 100;
           }
    #endif
           // Boost value greatly if we are going for a culture win
           // If going for culture win always want open borders against civs we need influence on
    #if !defined(MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
           AIGrandStrategyTypes eCultureStrategy = (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CULTURE");
           if (eCultureStrategy != NO_AIGRANDSTRATEGY && GetPlayer()->GetGrandStrategyAI()->GetActiveGrandStrategy() == eCultureStrategy && GetPlayer()->GetCulture()->GetTourism() / 100 > 0 )
           {
               // The civ we need influence on the most should ALWAYS be included
               if (GetPlayer()->GetCulture()->GetCivLowestInfluence(false /*bCheckOpenBorders*/) == eOtherPlayer)
               {
                   iItemValue *= 1000;
                   iItemValue /= 100;
               }
    
               // If have influence over half the civs, want OB with the other half
               else if (GetPlayer()->GetCulture()->GetNumCivsToBeInfluentialOn() <= GetPlayer()->GetCulture()->GetNumCivsInfluentialOn())
               {
                   if (GetPlayer()->GetCulture()->GetInfluenceLevel(eOtherPlayer) < INFLUENCE_LEVEL_INFLUENTIAL)
                   {
                       iItemValue *= 500;
                       iItemValue /= 100;
                   }
               }
    
               else if (GetPlayer()->GetProximityToPlayer(eOtherPlayer) == PLAYER_PROXIMITY_NEIGHBORS)
               {
                   // If we're cramped then we want OB more with our neighbors
                   if(GetPlayer()->IsCramped())
                   {
                       iItemValue *= 300;
                       iItemValue /= 100;
                   }
               }
           }
    #endif
    #if defined(MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
           // Do we think he's going for culture victory? If we're contesting this, don't take his open borders!
           CvPlayer &kOtherPlayer = GET_PLAYER(eOtherPlayer);
           // Opinion also matters
           if(GetPlayer()->GetDiplomacyAI()->GetMajorCivApproach(eOtherPlayer, /*bHideTrueFeelings*/ false) < MAJOR_CIV_APPROACH_FRIENDLY)
           {
               if (kOtherPlayer.GetCulture()->GetTourism() / 100 > 0 && (kOtherPlayer.GetCulture()->GetInfluenceOn(GetPlayer()->GetID()) < INFLUENCE_LEVEL_INFLUENTIAL))
               {
                   if(GetPlayer()->GetDiplomacyAI()->GetVictoryBlockLevel(eOtherPlayer) >= BLOCK_LEVEL_STRONG || GetPlayer()->GetDiplomacyAI()->GetVictoryDisputeLevel(eOtherPlayer) >= DISPUTE_LEVEL_STRONG)
                   {
                       return INT_MAX;
                   }
    
                   // If he has influence over half the civs, want to block OB with the other half
                   if (kOtherPlayer.GetCulture()->GetNumCivsToBeInfluentialOn() <= kOtherPlayer.GetCulture()->GetNumCivsInfluentialOn())
                   {
                       return INT_MAX;
                   }
               }
           }
    #endif
       }
    
       // Are we trying to find the middle point between what we think this item is worth and what another player thinks it's worth?
       if(bUseEvenValue)
       {
           int iReverseValue = GET_PLAYER(eOtherPlayer).GetDealAI()->GetOpenBordersValue(!bFromMe, GetPlayer()->GetID(), /*bUseEvenValue*/ false);
    
           if (iReverseValue == INT_MAX)
               //no deal, can't agree on a value
               iItemValue = INT_MAX;
           else
               iItemValue = (iItemValue + iReverseValue)/2;
       }
    
       return iItemValue;
    }
    
    The key section is here:
    Code:
    #if defined(MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
          // Do we think he's going for culture victory? If we're contesting this, don't take his open borders!
           CvPlayer &kOtherPlayer = GET_PLAYER(eOtherPlayer);
           // Opinion also matters
           if(GetPlayer()->GetDiplomacyAI()->GetMajorCivApproach(eOtherPlayer, /*bHideTrueFeelings*/ false) < MAJOR_CIV_APPROACH_FRIENDLY)
           {
               if (kOtherPlayer.GetCulture()->GetTourism() / 100 > 0 && (kOtherPlayer.GetCulture()->GetInfluenceOn(GetPlayer()->GetID()) < INFLUENCE_LEVEL_INFLUENTIAL))
               {
                   if(GetPlayer()->GetDiplomacyAI()->GetVictoryBlockLevel(eOtherPlayer) >= BLOCK_LEVEL_STRONG || GetPlayer()->GetDiplomacyAI()->GetVictoryDisputeLevel(eOtherPlayer) >= DISPUTE_LEVEL_STRONG)
                   {
                       return INT_MAX;
                   }
    
                   // If he has influence over half the civs, want to block OB with the other half
                   if (kOtherPlayer.GetCulture()->GetNumCivsToBeInfluentialOn() <= kOtherPlayer.GetCulture()->GetNumCivsInfluentialOn())
                   {
                       return INT_MAX;
                   }
               }
           }
    #endif
    
    And if you're curious, here's the updated IsWillingToGiveOpenBordersToPlayer function that I sent in my pull request.

    Code:
    /// Do we want to give Open Borders to eOtherPlayer?
    bool CvDiplomacyAI::IsWillingToGiveOpenBordersToPlayer(PlayerTypes ePlayer)
    {
       CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");
       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.");
    
    // If going for culture win we always want open borders against civs we need influence on
    #if defined (MOD_BALANCE_FLIPPED_TOURISM_MODIFIER_OPEN_BORDERS)
       //If we need influence over them, we want to give OB, thanks.
       if ((m_pPlayer->GetCulture()->GetInfluenceLevel(ePlayer) > INFLUENCE_LEVEL_FAMILIAR) && (m_pPlayer->GetCulture()->GetInfluenceTrend(ePlayer) >= INFLUENCE_TREND_STATIC))
       {
           return true;
       }
    #else
       //If we need influence over them, we want to give OB, thanks.
       if ((GET_PLAYER(ePlayer).GetCulture()->GetInfluenceLevel(m_pPlayer->GetID()) > INFLUENCE_LEVEL_FAMILIAR) && (GET_PLAYER(ePlayer).GetCulture()->GetInfluenceTrend(m_pPlayer->GetID()) >= INFLUENCE_TREND_STATIC))
       {
           return false;
       }
    #endif
    #if defined(MOD_DIPLOMACY_CIV4_FEATURES)
       if (IsVassal(ePlayer) || GET_PLAYER(ePlayer).GetDiplomacyAI()->IsVassal(GetPlayer()->GetID()))
           return true;
    #endif
    #if defined(MOD_BALANCE_CORE)
       if (IsDenouncedPlayer(ePlayer) || GET_PLAYER(ePlayer).GetDiplomacyAI()->IsDenouncedPlayer(GetPlayer()->GetID()))
       {
           return false;
       }
       if (IsArmyInPlaceForAttack(ePlayer) || IsWantsSneakAttack(ePlayer))
       {
           return false;
       }
       if (GET_PLAYER(ePlayer).GetDiplomacyAI()->IsCloseToDominationVictory())
       {
           return false;
       }
       // Are they here to steal our PRICELESS ARCHAEOLOGICAL ARTIFACTS???
       if (GetNegativeArchaeologyPoints(ePlayer) > 0 || IsPlayerMadeNoDiggingPromise(ePlayer) ||
           IsPlayerIgnoredNoDiggingPromise(ePlayer) || IsPlayerBrokenNoDiggingPromise(ePlayer))
       {
           int iHiddenSites = GetPlayer()->GetEconomicAI()->GetVisibleHiddenAntiquitySitesOwnTerritory();
           int iNormalSites = GetPlayer()->GetEconomicAI()->GetVisibleAntiquitySitesOwnTerritory() - iHiddenSites;
           PolicyBranchTypes eArtistry = (PolicyBranchTypes)GC.getPOLICY_BRANCH_AESTHETICS();
     
           if (iNormalSites > 0)
           {
               return false;
           }
           // Have they unlocked Artistry?
           if (iHiddenSites > 0 && GET_PLAYER(ePlayer).GetPlayerPolicies()->IsPolicyBranchUnlocked(eArtistry))
           {
               return false;
           }
       }
       if (GET_TEAM(GetTeam()).IsHasDefensivePact(GET_PLAYER(ePlayer).getTeam()) || IsDoFAccepted(ePlayer))
       {
           return true;
       }
    #endif
    
       MajorCivApproachTypes eApproach = GetMajorCivApproach(ePlayer, /*bHideTrueFeelings*/ true);
       if (eApproach >= MAJOR_CIV_APPROACH_AFRAID)
       {
           return true;
       }
       if (GetPlayerMilitaryStrengthComparedToUs(ePlayer) <= STRENGTH_AVERAGE)
       {
           return true;
       }
    
    #if defined(MOD_BALANCE_CORE)
       if (!GET_PLAYER(ePlayer).isHuman() && GET_PLAYER(ePlayer).GetDiplomacyAI()->MusteringForNeighborAttack(m_pPlayer->GetID()))
       {
           return true;
       }
    #endif
       return false;
    }
    
    The only thing referring to Archaeology is the check I added for the upcoming version, and it's only run if:
    Code:
    // Are they here to steal our PRICELESS ARCHAEOLOGICAL ARTIFACTS???
    if (GetNegativeArchaeologyPoints(ePlayer) > 0 || IsPlayerMadeNoDiggingPromise(ePlayer) ||
           IsPlayerIgnoredNoDiggingPromise(ePlayer) || IsPlayerBrokenNoDiggingPromise(ePlayer))
    
    You have dug up 1+ artifacts from them, or you've made, ignored or broken a promise not to dig up artifacts with them.
     
    Last edited: Oct 31, 2019
    JamesNinelives and Kim Dong Un like this.
  7. Stalker0

    Stalker0 Baller Magnus

    Joined:
    Dec 31, 2005
    Messages:
    8,313
    Thank you, looks like your right. Hmm...it may be more the fact that I find the AI very belligerent around this time. I assumed it was because of Archaeology and digs but maybe its just a good war time. Perhaps that is why its hard to get open borders
     
  8. Kim Dong Un

    Kim Dong Un The One & Unly Supporter

    Joined:
    Dec 17, 2017
    Messages:
    927
    Gender:
    Male
    Location:
    Pyongyang
    Perhaps this might've been the case in years past, but I think the 3 arch cap has done a fine job in preventing things of this nature since its introduction. I have faith it would still hold up. Once/if any changes go through, I'll specifically play test an artistry game with Knowledge Through Devotion, to see if it's too exploitable.
     
    JamesNinelives likes this.
  9. JamesNinelives

    JamesNinelives Emperor

    Joined:
    Mar 16, 2019
    Messages:
    1,595
    Gender:
    Male
    Location:
    Australia
    Artistry with Knowledge Through Devotion is my go-to, and from my point of view the AI not allowing Open Borders is the main way the AI can frustrate my archeological ambitions (apart from being at war with me). With faith purchases you can dig up a lot of artifacts.

    I feel the balance at the moment is pretty good though. Civs with a strong science game may well unlock the tech before I do, as happened in my last game with the Maya. And yes, the 3 arch cap big improvement in terms of reducing archeologist spam. The AI seems fairly good at using archeologists themselves these days.

    I'm certainly not going to complain about civs being more willing to open their borders though.

    Somethin I have noticed it that civs will occasionally contact you saying 'don't dig up my artifacts' when you've build a landmark but I think in those cases it doesn't actually represent how they feel towards you. I haven't noticed any negative diplo modifiers following that announcement. Only when I actually dig stuff up. Similarly, when I do into the 'talk to this person about something' menu, there is occasionally an option for me to tell them to stop digging stuff up in my lands. Even though they didn't (I always tend to get there first myself). I assume the trigger is from archeologists entering/passing through your borders or something. Similar to how you can tell people to stop spying on you even if you don't have any proof they are doing it.
     
  10. azum4roll

    azum4roll Emperor

    Joined:
    Jul 17, 2018
    Messages:
    1,652
    Gender:
    Male
    I never see AI keep the "don't dig on my lands" promise. Only thing I can do before open borders expires is to put a worker on the tile and scan my whole territory for rival archeologists, and start working on some random improvement when I spot one.
     
    saamohod likes this.
  11. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    You can declare war. :)

    Also, I fixed the AI not keeping the "don't dig on my lands" promise (I think). If it persists, let me know.

    There was an existing check to prevent it from happening, but due to a typo it was testing if you had made the promise to them, rather than if they had made the promise to you as intended.
     
  12. nmb93

    nmb93 Chieftain

    Joined:
    Feb 1, 2019
    Messages:
    58
    Quick semi-related archaeology question, just finished a game on the 10-23 beta and I was able to grab the artifact and then send a second archaeologist to instantly build a monument anyway. Is this intended?
     
  13. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    No- please report on Github. :)
     
  14. nmb93

    nmb93 Chieftain

    Joined:
    Feb 1, 2019
    Messages:
    58
    Done. Should I try to go back through auto saves to find an example? I know I did it near Venice after vassalizing them near the end of the game.
     
    JamesNinelives likes this.
  15. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    It would be ideal, yeah.
     
  16. cammcken

    cammcken Warlord

    Joined:
    Jul 25, 2012
    Messages:
    297
    Location:
    Massachusetts, USA
    @Gazebo , maybe not the ideal solution, but is there a way to teleport missionaries out of a rival country when open borders expire, like what happens to military units? (Just have to make sure they don't teleport to another civ with no open borders agreement.)
     
  17. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    Missionaries don't need Open Borders?
     
  18. cammcken

    cammcken Warlord

    Joined:
    Jul 25, 2012
    Messages:
    297
    Location:
    Massachusetts, USA
    Yes, they do... Well they don't need it but it helps. Isn't... isn't this what started the thread?? Read Stalker0's initial post.
     
  19. Recursive

    Recursive Covets Lands That You Currently Own Moderator

    Joined:
    Dec 19, 2017
    Messages:
    2,551
    Gender:
    Male
    Ah, I see. :)

    Still though, teleportation outside of the borders has risks to it, and the player may not want their missionaries teleported...
     
    bigcat88 likes this.
  20. andersw

    andersw Emperor

    Joined:
    Feb 11, 2008
    Messages:
    1,170
    Location:
    sweden
    You can see how many turns is left on the deal page but an indicator with remaining turns in the UI next to the AI in question you maybe be ideal.
    Not sure if that is possible to add.
     
    vyyt and cammcken like this.

Share This Page