Bazaar developer reference

CvMilitaryAI::RequestSpecificAttack(CvMilitaryTarget, int)

Defined in
CvMilitaryAI.cpp, line 705
Class
CvMilitaryAI
Hook name
CivHooks::CvMilitaryAI_RequestSpecificAttack

Hooks

static bool BeforeCvMilitaryAI_RequestSpecificAttack(CvMilitaryAI* self, CvMilitaryTarget kTarget, int iNumUnitsWillingToBuild, bool& result);static void AfterCvMilitaryAI_RequestSpecificAttack(CvMilitaryAI* self, CvMilitaryTarget kTarget, int iNumUnitsWillingToBuild, bool& result);static bool ReplaceCvMilitaryAI_RequestSpecificAttack(bool (*original)(CvMilitaryAI*, CvMilitaryTarget, int), CvMilitaryAI* self, CvMilitaryTarget kTarget, int iNumUnitsWillingToBuild);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_RequestSpecificAttack::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvMilitaryAI_RequestSpecificAttack);host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_RequestSpecificAttack::ID, CIV_HOOK_AFTER, (void*)&AfterCvMilitaryAI_RequestSpecificAttack);host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_RequestSpecificAttack::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvMilitaryAI_RequestSpecificAttack);

Code

705bool CvMilitaryAI::RequestSpecificAttack(CvMilitaryTarget kTarget, int iNumUnitsWillingToBuild)706{707	CvAIOperation* pOperation = NULL;708	int iNumRequiredSlots = 0;709	int iLandReservesUsed = 0;710	int iFilledSlots = 0;711712	if(kTarget.m_pTargetCity)713	{714		if(kTarget.m_bAttackBySea)715		{716			iFilledSlots = MilitaryAIHelpers::NumberOfFillableSlots(m_pPlayer, MUFORMATION_NAVAL_INVASION, true, &iNumRequiredSlots, &iLandReservesUsed);717			if((iNumRequiredSlots - iFilledSlots) <= iNumUnitsWillingToBuild && iLandReservesUsed <= GetLandReservesAvailable())718			{719				pOperation = m_pPlayer->addAIOperation(AI_OPERATION_NAVAL_ATTACK, kTarget.m_pTargetCity->getOwner(), kTarget.m_pTargetCity->getArea(), kTarget.m_pTargetCity, kTarget.m_pMusterCity);720			}721		}722		else723		{724			iFilledSlots = MilitaryAIHelpers::NumberOfFillableSlots(m_pPlayer,(GC.getGame().getHandicapInfo().GetID() > 4 && !(GC.getMap().GetAIMapHint() & 1)) ? MUFORMATION_BIGGER_CITY_ATTACK_FORCE : MUFORMATION_BASIC_CITY_ATTACK_FORCE, false, &iNumRequiredSlots, &iLandReservesUsed);725			if((iNumRequiredSlots - iFilledSlots) <= iNumUnitsWillingToBuild && iLandReservesUsed <= GetLandReservesAvailable())726			{727				pOperation = m_pPlayer->addAIOperation(AI_OPERATION_BASIC_CITY_ATTACK, kTarget.m_pTargetCity->getOwner(), kTarget.m_pTargetCity->getArea(), kTarget.m_pTargetCity, kTarget.m_pMusterCity);728				if (pOperation != NULL && !pOperation->ShouldAbort() && kTarget.m_pTargetCity->isCoastal(GC.getMIN_WATER_SIZE_FOR_OCEAN()))729				{730					int iFlavorNaval = m_pPlayer->GetFlavorManager()->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_NAVAL"));731					int iNumSuperiority = m_pPlayer->numOperationsOfType(AI_OPERATION_NAVAL_SUPERIORITY);732					int iNumBombard = m_pPlayer->numOperationsOfType(AI_OPERATION_NAVAL_BOMBARDMENT);733					int iMaxOperations = iFlavorNaval / 2;734					if(GC.getMap().GetAIMapHint() & 1)735					{736						iMaxOperations *= 2;737					}738					if (iNumSuperiority+iNumBombard <= iMaxOperations)739						m_pPlayer->addAIOperation(AI_OPERATION_NAVAL_SUPERIORITY, NO_PLAYER);740				}741			}742		}743744		if(pOperation != NULL && !pOperation->ShouldAbort())745		{746			return true;747		}748	}749	return false;750}

Calls

Called by