Code
12653/// Individual contact opportunity12654void CvDiplomacyAI::DoContactPlayer(PlayerTypes ePlayer)12655{12656 if(!IsValidUIDiplomacyTarget(ePlayer))12657 return; // Can't contact the this player at the moment.1265812659 int iDiploLogStatement;12660 DiploStatementTypes eStatement;1266112662 // We can use this deal pointer to form a trade offer12663 CvDeal* pDeal = GC.getGame().GetGameDeals()->GetTempDeal();1266412665 // These can be used for info about deal items, e.g. what Minor Civ we're telling the guy to stay away from, etc.12666 int iData1;12667 int iData2;1266812669 // If this is the same turn we've met a player, don't send anything his way quite yet - wait until we've said hello at least12670 if(GET_TEAM(GetTeam()).GetTurnsSinceMeetingTeam(GET_PLAYER(ePlayer).getTeam()) == 0)12671 return;1267212673 // Clear out the scratch pad12674 for(int iLoop = 0; iLoop < NUM_DIPLO_LOG_STATEMENT_TYPES; iLoop++)12675 {12676 m_paDiploLogStatementTurnCountScratchPad[iLoop] = MAX_TURNS_SAFE_ESTIMATE;12677 }1267812679 // Make a scratch pad keeping track of the last time we sent each message. This way we can know what we've said in the past already - this member array will be used in the function calls below12680 for(iDiploLogStatement = 0; iDiploLogStatement < MAX_DIPLO_LOG_STATEMENTS; iDiploLogStatement++)12681 {12682 eStatement = GetDiploLogStatementTypeForIndex(ePlayer, iDiploLogStatement);1268312684 if(eStatement != NO_DIPLO_STATEMENT_TYPE)12685 {12686 CvAssert(eStatement < NUM_DIPLO_LOG_STATEMENT_TYPES);1268712688 m_paDiploLogStatementTurnCountScratchPad[eStatement] = GetDiploLogStatementTurnForIndex(ePlayer, iDiploLogStatement);12689 }12690 }1269112692 eStatement = NO_DIPLO_STATEMENT_TYPE;1269312694 iData1 = -1;12695 iData2 = -1;1269612697 pDeal->ClearItems();12698 pDeal->SetFromPlayer(GetPlayer()->GetID());12699 pDeal->SetToPlayer(ePlayer);1270012701 // JON: Add in some randomization here?12702 // How predictable do we want the AI to be with regards to what state they're in?1270312704 // Note that the order in which the following functions are called is very important to how the AI behaves - first come, first served1270512706 // AT PEACE12707 if(!IsAtWar(ePlayer))12708 {12709 DoCoopWarTimeStatement(ePlayer, eStatement, iData1);12710 DoCoopWarStatement(ePlayer, eStatement, iData1);1271112712 // Some things we don't say to teammates12713 if(GetPlayer()->getTeam() != GET_PLAYER(ePlayer).getTeam())12714 {12715 DoMakeDemand(ePlayer, eStatement, pDeal);1271612717 // STATEMENTS - all members but ePlayer passed by address1271812719 DoAggressiveMilitaryStatement(ePlayer, eStatement);12720 DoKilledCityStateStatement(ePlayer, eStatement, iData1);12721 DoAttackedCityStateStatement(ePlayer, eStatement, iData1);12722 DoBulliedCityStateStatement(ePlayer, eStatement, iData1);12723 //DoSeriousExpansionWarningStatement(ePlayer, eStatement);12724 DoExpansionWarningStatement(ePlayer, eStatement);12725 DoExpansionBrokenPromiseStatement(ePlayer, eStatement);12726 //DoSeriousPlotBuyingWarningStatement(ePlayer, eStatement);12727 DoPlotBuyingWarningStatement(ePlayer, eStatement);12728 DoPlotBuyingBrokenPromiseStatement(ePlayer, eStatement);1272912730 DoWeAttackedYourMinorStatement(ePlayer, eStatement, iData1);12731 DoWeBulliedYourMinorStatement(ePlayer, eStatement, iData1);1273212733 DoKilledYourSpyStatement(ePlayer, eStatement);12734 DoKilledMySpyStatement(ePlayer, eStatement);12735 DoCaughtYourSpyStatement(ePlayer, eStatement);1273612737 DoTheySupportedOurHosting(ePlayer, eStatement);12738 DoWeLikedTheirProposal(ePlayer, eStatement);12739 DoWeDislikedTheirProposal(ePlayer, eStatement);12740 DoTheySupportedOurProposal(ePlayer, eStatement);12741 DoTheyFoiledOurProposal(ePlayer, eStatement);1274212743 DoConvertedMyCityStatement(ePlayer, eStatement);1274412745 DoDugUpMyYardStatement(ePlayer, eStatement);1274612747 DoDoFStatement(ePlayer, eStatement);12748 DoDenounceFriendStatement(ePlayer, eStatement);12749 DoDenounceStatement(ePlayer, eStatement);12750 DoRequestFriendDenounceStatement(ePlayer, eStatement, iData1);12751 //DoWorkAgainstSomeoneStatement(ePlayer, eStatement, iData1);12752 //DoEndWorkAgainstSomeoneStatement(ePlayer, eStatement, iData1);12753 }1275412755 // OFFERS - all members but ePlayer passed by address12756 DoLuxuryTrade(ePlayer, eStatement, pDeal);12757 DoEmbassyExchange(ePlayer, eStatement, pDeal);12758 DoEmbassyOffer(ePlayer, eStatement, pDeal);12759 DoOpenBordersExchange(ePlayer, eStatement, pDeal);12760 DoOpenBordersOffer(ePlayer, eStatement, pDeal);12761 DoResearchAgreementOffer(ePlayer, eStatement, pDeal);12762 DoRenewExpiredDeal(ePlayer, eStatement, pDeal);12763 DoShareIntrigueStatement(ePlayer, eStatement);12764 //DoResearchAgreementPlan(ePlayer, eStatement);1276512766 DoRequest(ePlayer, eStatement, pDeal);1276712768 // Second set of things we don't say to teammates12769 if(GetPlayer()->getTeam() != GET_PLAYER(ePlayer).getTeam())12770 {12771 //DoNowUnforgivableStatement(ePlayer, eStatement);12772 //DoNowEnemyStatement(ePlayer, eStatement);1277312774 DoHostileStatement(ePlayer, eStatement);12775 //DoFriendlyStatement(ePlayer, eStatement);12776 DoAfraidStatement(ePlayer, eStatement);12777 DoWarmongerStatement(ePlayer, eStatement);12778 DoMinorCivCompetitionStatement(ePlayer, eStatement, iData1);1277912780 // Don't bother with this fluff stuff it's just AI on AI stuff12781 if(GET_PLAYER(ePlayer).isHuman())12782 {12783 DoAngryBefriendedEnemy(ePlayer, eStatement, iData1);12784 DoAngryDenouncedFriend(ePlayer, eStatement, iData1);12785 DoHappyDenouncedEnemy(ePlayer, eStatement, iData1);12786 DoHappyBefriendedFriend(ePlayer, eStatement, iData1);12787 DoFYIBefriendedHumanEnemy(ePlayer, eStatement, iData1);12788 DoFYIDenouncedHumanFriend(ePlayer, eStatement, iData1);12789 DoFYIDenouncedHumanEnemy(ePlayer, eStatement, iData1);12790 DoFYIBefriendedHumanFriend(ePlayer, eStatement, iData1);12791 DoHappySamePolicyTree(ePlayer, eStatement);12792 DoIdeologicalStatement(ePlayer, eStatement);12793 }12794 }12795 }1279612797 // AT WAR12798 else if(!GC.getGame().isOption(GAMEOPTION_ALWAYS_WAR))12799 {12800 // OFFERS - all members but ePlayer passed by address12801 DoPeaceOffer(ePlayer, eStatement, pDeal);12802 }1280312804#if !defined(FINAL_RELEASE)12805 // Check for an optional message injection from the Tuner12806 if(eStatement == NO_DIPLO_STATEMENT_TYPE && m_eTestStatement != NO_DIPLO_STATEMENT_TYPE && ePlayer == m_eTestToPlayer)12807 {12808 eStatement = m_eTestStatement;12809 iData1 = m_iTestStatementArg1;1281012811 m_eTestStatement = NO_DIPLO_STATEMENT_TYPE;12812 }12813#endif1281412815 // Now see if it's a valid time to send this message (we may have already sent it)12816 if(eStatement != NO_DIPLO_STATEMENT_TYPE)12817 {12818 //if (bSendStatement)12819 {12820 LogStatementToPlayer(ePlayer, eStatement);1282112822 DoSendStatementToPlayer(ePlayer, eStatement, iData1, pDeal);12823 DoAddNewStatementToDiploLog(ePlayer, eStatement);12824 }12825 }12826}