Bazaar developer reference

CvDiplomacyAI::DoContactPlayer(PlayerTypes)

Defined in
CvDiplomacyAI.cpp, line 12654
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoContactPlayer

Hooks

static bool BeforeCvDiplomacyAI_DoContactPlayer(CvDiplomacyAI* self, PlayerTypes ePlayer);static void AfterCvDiplomacyAI_DoContactPlayer(CvDiplomacyAI* self, PlayerTypes ePlayer);static void ReplaceCvDiplomacyAI_DoContactPlayer(void (*original)(CvDiplomacyAI*, PlayerTypes), CvDiplomacyAI* self, PlayerTypes ePlayer);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoContactPlayer>(host, &BeforeCvDiplomacyAI_DoContactPlayer);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoContactPlayer>(host, &AfterCvDiplomacyAI_DoContactPlayer);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoContactPlayer>(host, &ReplaceCvDiplomacyAI_DoContactPlayer);

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}

Calls

Called by