Bazaar developer reference

CvDiplomacyAI::DoMakeWarOnPlayer(PlayerTypes)

Defined in
CvDiplomacyAI.cpp, line 5530
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoMakeWarOnPlayer

Hooks

static bool BeforeCvDiplomacyAI_DoMakeWarOnPlayer(CvDiplomacyAI* self, PlayerTypes eTargetPlayer);static void AfterCvDiplomacyAI_DoMakeWarOnPlayer(CvDiplomacyAI* self, PlayerTypes eTargetPlayer);static void ReplaceCvDiplomacyAI_DoMakeWarOnPlayer(void (*original)(CvDiplomacyAI*, PlayerTypes), CvDiplomacyAI* self, PlayerTypes eTargetPlayer);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoMakeWarOnPlayer>(host, &BeforeCvDiplomacyAI_DoMakeWarOnPlayer);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoMakeWarOnPlayer>(host, &AfterCvDiplomacyAI_DoMakeWarOnPlayer);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoMakeWarOnPlayer>(host, &ReplaceCvDiplomacyAI_DoMakeWarOnPlayer);

Code

5529/// Handles declarations of War for this AI5530void CvDiplomacyAI::DoMakeWarOnPlayer(PlayerTypes eTargetPlayer)5531{5532	CvAIOperation* pOperation;5533	bool bWantToAttack = false;5534	bool bDeclareWar = false;55355536	if(!IsPlayerValid(eTargetPlayer))5537		return;55385539	if(GetWarGoal(eTargetPlayer) == WAR_GOAL_DEMAND)5540		return;55415542	if(IsAtWar(eTargetPlayer))5543		return;55445545	bool bAtWarWithAtLeastOneMajor = MilitaryAIHelpers::IsTestStrategy_AtWar(m_pPlayer);55465547	// Minor Civ5548	if(GET_PLAYER(eTargetPlayer).isMinorCiv())5549	{5550		bWantToAttack = !bAtWarWithAtLeastOneMajor && (GetMinorCivApproach(eTargetPlayer) == MINOR_CIV_APPROACH_CONQUEST);5551		pOperation = GetPlayer()->GetMilitaryAI()->GetCityStateAttackOperation(eTargetPlayer);5552	}5553	// Major Civ5554	else5555	{5556		MajorCivApproachTypes eApproach = GetMajorCivApproach(eTargetPlayer, /*bHideTrueFeelings*/ false);5557		bWantToAttack = (eApproach == MAJOR_CIV_APPROACH_WAR || (eApproach == MAJOR_CIV_APPROACH_DECEPTIVE && IsGoingForWorldConquest()));5558		bWantToAttack = bWantToAttack && !bAtWarWithAtLeastOneMajor; // let's not get into another war right now5559		pOperation = GetPlayer()->GetMilitaryAI()->GetSneakAttackOperation(eTargetPlayer);5560	}55615562	// Not yet readying an attack5563	if(pOperation == NULL && !IsMusteringForAttack(eTargetPlayer))	// If we're "mustering" it means we had a Sneak Attack Operation that finished5564	{5565		if(!GET_TEAM(GetTeam()).isAtWar(GET_PLAYER(eTargetPlayer).getTeam()))5566		{5567#if defined(MOD_EVENTS_WAR_AND_PEACE)5568			if(GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(eTargetPlayer).getTeam(), GetPlayer()->GetID()))5569#else5570			if(GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(eTargetPlayer).getTeam()))5571#endif5572			{5573				// Want to declare war on someone5574				if(bWantToAttack)5575				{5576					SetWarGoal(eTargetPlayer, WAR_GOAL_PREPARE);55775578					// Attack on minor5579					if(GET_PLAYER(eTargetPlayer).isMinorCiv())5580						GetPlayer()->GetMilitaryAI()->RequestCityStateAttack(eTargetPlayer);5581					// Attack on major5582					else5583						GetPlayer()->GetMilitaryAI()->RequestSneakAttack(eTargetPlayer);5584				}5585			}5586		}5587	}5588	// We already have an attack on the way5589	else5590	{5591		// Our Approach with this player calls for war5592		if(bWantToAttack)5593		{5594			if(!IsAtWar(eTargetPlayer))5595			{5596#if defined(MOD_EVENTS_WAR_AND_PEACE)5597				if(GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(eTargetPlayer).getTeam(), GetPlayer()->GetID()))5598#else5599				if(GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(eTargetPlayer).getTeam()))5600#endif5601				{5602					// If we're at least 85% of the way to our objective, let loose the dogs of war!5603					if(IsMusteringForAttack(eTargetPlayer) || (pOperation != NULL && pOperation->PercentFromMusterPointToTarget() >= 85))	// If we're "mustering" it means we have a Sneak Attack Operation that's in position to attack5604					{5605						bDeclareWar = true;5606						SetMusteringForAttack(eTargetPlayer, false);5607					}5608				}5609			}5610		}56115612		// We were planning an attack, but changed our minds so abort5613		else5614		{5615			if(pOperation != NULL)5616			{5617				pOperation->Kill(AI_ABORT_DIPLO_OPINION_CHANGE);5618				SetWarGoal(eTargetPlayer, NO_WAR_GOAL_TYPE);5619				SetMusteringForAttack(eTargetPlayer, false);5620			}5621		}56225623		// If our Sneak Attack is read then actually initiate the DoW5624		if(bDeclareWar)5625		{5626			DeclareWar(eTargetPlayer);5627		}5628	}5629}

Calls

Called by