Bazaar developer reference

CvDiplomacyAI::MakeWar()

Defined in
CvDiplomacyAI.cpp, line 5632
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_MakeWar

Hooks

static bool BeforeCvDiplomacyAI_MakeWar(CvDiplomacyAI* self);static void AfterCvDiplomacyAI_MakeWar(CvDiplomacyAI* self);static void ReplaceCvDiplomacyAI_MakeWar(void (*original)(CvDiplomacyAI*), CvDiplomacyAI* self);CivRegisterBefore<CivHooks::CvDiplomacyAI_MakeWar>(host, &BeforeCvDiplomacyAI_MakeWar);CivRegisterAfter<CivHooks::CvDiplomacyAI_MakeWar>(host, &AfterCvDiplomacyAI_MakeWar);CivRegisterReplace<CivHooks::CvDiplomacyAI_MakeWar>(host, &ReplaceCvDiplomacyAI_MakeWar);

Code

5631/// Handles declarations of War for this AI5632void CvDiplomacyAI::MakeWar()5633{5634	CvWeightedVector<int> playerList;5635	int iWeight;56365637	if((int)m_eTargetPlayer >= (int)DIPLO_FIRST_PLAYER)5638	{5639		DoMakeWarOnPlayer(m_eTargetPlayer);5640	}5641	else5642	{5643		for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)5644		{5645			PlayerTypes eTarget = (PlayerTypes)iPlayerLoop;5646#if defined(MOD_AI_MP_DIPLOMACY)5647			// JdH: As requests are enqued we can make war with anyone ...5648			if((MOD_AI_MP_DIPLOMACY || IsValidUIDiplomacyTarget(eTarget)) && IsPlayerValid(eTarget))5649#else5650			if(IsValidUIDiplomacyTarget(eTarget) && IsPlayerValid(eTarget))5651#endif5652			{5653				iWeight = (int)GetWarProjection(eTarget) + 1;56545655				// Square the distance enum to make it crucial5656				iWeight *= (1 + (int)GetPlayer()->GetProximityToPlayer(eTarget));5657				iWeight *= (1 + (int)GetPlayer()->GetProximityToPlayer(eTarget));56585659				if(iPlayerLoop < MAX_MAJOR_CIVS)5660				{5661					if(GetMajorCivOpinion(eTarget) == MAJOR_CIV_OPINION_UNFORGIVABLE)5662					{5663						iWeight *= 2;5664					}56655666					iWeight *= 10;  // Make sure majors are looked at before city states5667				}56685669				playerList.push_back(iPlayerLoop, iWeight);5670			}5671		}56725673		playerList.SortItems();56745675		for(int iI = 0; iI < playerList.size(); iI++)5676		{5677			DoMakeWarOnPlayer((PlayerTypes)playerList.GetElement(iI));5678		}5679	}56805681	// Increment counters for co-op wars we have agreed to - this may trigger war5682	for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)5683	{5684		PlayerTypes eLoopPlayer = (PlayerTypes) iPlayerLoop;56855686		if(IsPlayerValid(eLoopPlayer))5687		{5688			if(!GET_PLAYER(eLoopPlayer).isMinorCiv())5689			{5690				for(int iThirdPlayerLoop = 0; iThirdPlayerLoop < MAX_MAJOR_CIVS; iThirdPlayerLoop++)5691				{5692					PlayerTypes eThirdPlayer = (PlayerTypes) iThirdPlayerLoop;5693					if (IsPlayerValid(eThirdPlayer))5694					{5695						if(GetCoopWarCounter(eLoopPlayer, eThirdPlayer) >= 0)5696						{5697							ChangeCoopWarCounter(eLoopPlayer, eThirdPlayer, 1);56985699							// AI players will always declare war at 10 turns, so we simplify things here - humans are handled by DoCoopWarTimeStatement()5700							if(!GET_PLAYER(eLoopPlayer).isHuman())5701							{5702								if(GetCoopWarAcceptedState(eLoopPlayer, eThirdPlayer) == COOP_WAR_STATE_SOON &&5703									GetCoopWarCounter(eLoopPlayer, eThirdPlayer) == /*10*/ GC.getCOOP_WAR_SOON_COUNTER())5704								{5705									// Us5706									SetCoopWarAcceptedState(eLoopPlayer, eThirdPlayer, COOP_WAR_STATE_ACCEPTED);5707									SetCoopWarCounter(eLoopPlayer, eThirdPlayer, 0);5708									DeclareWar(eThirdPlayer);5709									GetPlayer()->GetMilitaryAI()->RequestShowOfForce(eThirdPlayer);57105711									int iLockedTurns = /*15*/ GC.getCOOP_WAR_LOCKED_LENGTH();5712									GET_TEAM(GetPlayer()->getTeam()).ChangeNumTurnsLockedIntoWar(GET_PLAYER(eThirdPlayer).getTeam(), iLockedTurns);5713								}5714							}5715						}5716					}5717				}5718			}5719		}5720	}5721}

Calls

Called by