Hooks
static bool BeforeCvDiplomacyAI_DoOpenBordersExchange(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);static void AfterCvDiplomacyAI_DoOpenBordersExchange(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);static void ReplaceCvDiplomacyAI_DoOpenBordersExchange(void (*original)(CvDiplomacyAI*, PlayerTypes, DiploStatementTypes&, CvDeal*), CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoOpenBordersExchange>(host, &BeforeCvDiplomacyAI_DoOpenBordersExchange);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoOpenBordersExchange>(host, &AfterCvDiplomacyAI_DoOpenBordersExchange);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoOpenBordersExchange>(host, &ReplaceCvDiplomacyAI_DoOpenBordersExchange);
Code
14664/// Possible Contact Statement - Open Borders Exchange14665void CvDiplomacyAI::DoOpenBordersExchange(PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal)14666{14667 CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");14668 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.");1466914670 if(eStatement == NO_DIPLO_STATEMENT_TYPE)14671 {14672 int iDuration = GC.getGame().GetDealDuration();1467314674 // Can both sides trade OB?14675 if(pDeal->IsPossibleToTradeItem(GetPlayer()->GetID(), ePlayer, TRADE_ITEM_OPEN_BORDERS, iDuration) &&14676 pDeal->IsPossibleToTradeItem(ePlayer, GetPlayer()->GetID(), TRADE_ITEM_OPEN_BORDERS, iDuration))14677 {14678 // Does this guy want to exchange OB?14679 if(IsOpenBordersExchangeAcceptable(ePlayer))14680 {14681 DiploStatementTypes eTempStatement = DIPLO_STATEMENT_OPEN_BORDERS_EXCHANGE;14682 int iTurnsBetweenStatements = 20;1468314684 if(GetNumTurnsSinceStatementSent(ePlayer, eTempStatement) >= iTurnsBetweenStatements)14685 {14686 bool bSendStatement = false;1468714688 // AI14689 if(!GET_PLAYER(ePlayer).isHuman())14690 {14691 if(GET_PLAYER(ePlayer).GetDiplomacyAI()->IsOpenBordersExchangeAcceptable(GetPlayer()->GetID()))14692 bSendStatement = true;14693 }14694 // Human14695 else14696 bSendStatement = true;1469714698 // 1 in 2 chance we don't actually send the message (don't want full predictability)14699 if(50 < GC.getGame().getJonRandNum(100, "Diplomacy AI: rand roll to see if we ask to exchange open borders"))14700 bSendStatement = false;1470114702 if(bSendStatement)14703 {14704 // OB on each side14705 pDeal->AddOpenBorders(GetPlayer()->GetID(), iDuration);14706 pDeal->AddOpenBorders(ePlayer, iDuration);1470714708 eStatement = eTempStatement;14709 }14710 // Add this statement to the log so we don't evaluate it again until 20 turns has come back around14711 else14712 DoAddNewStatementToDiploLog(ePlayer, eTempStatement);14713 }14714 }14715 }14716 }14717}