Bazaar developer reference

CvMilitaryAI::RequestSneakAttack(PlayerTypes)

Defined in
CvMilitaryAI.cpp, line 502
Class
CvMilitaryAI
Hook name
CivHooks::CvMilitaryAI_RequestSneakAttack

Hooks

static bool BeforeCvMilitaryAI_RequestSneakAttack(CvMilitaryAI* self, PlayerTypes eEnemy, bool& result);static void AfterCvMilitaryAI_RequestSneakAttack(CvMilitaryAI* self, PlayerTypes eEnemy, bool& result);static bool ReplaceCvMilitaryAI_RequestSneakAttack(bool (*original)(CvMilitaryAI*, PlayerTypes), CvMilitaryAI* self, PlayerTypes eEnemy);CivRegisterBefore<CivHooks::CvMilitaryAI_RequestSneakAttack>(host, &BeforeCvMilitaryAI_RequestSneakAttack);CivRegisterAfter<CivHooks::CvMilitaryAI_RequestSneakAttack>(host, &AfterCvMilitaryAI_RequestSneakAttack);CivRegisterReplace<CivHooks::CvMilitaryAI_RequestSneakAttack>(host, &ReplaceCvMilitaryAI_RequestSneakAttack);

Code

501/// Requests for sneak attack on a city of a player we're not at war with. Returns true if operation started.502bool CvMilitaryAI::RequestSneakAttack(PlayerTypes eEnemy)503{504	CvMilitaryTarget target;505	CvAIOperation* pOperation = 0;506	int iOperationID;507508	// Let's only allow us to be sneak attacking one opponent at a time, so abort if already have one of these operations active against any opponent509	if (m_pPlayer->haveAIOperationOfType(AI_OPERATION_NAVAL_SNEAK_ATTACK, &iOperationID))510	{511		return false;512	}513	if (m_pPlayer->haveAIOperationOfType(AI_OPERATION_SNEAK_CITY_ATTACK, &iOperationID))514	{515		return false;516	}517518	target = FindBestAttackTarget(AI_OPERATION_SNEAK_CITY_ATTACK, eEnemy);519	if(target.m_pTargetCity)520	{521		if(target.m_bAttackBySea)522		{523			if(IsAttackReady(MUFORMATION_NAVAL_INVASION, AI_OPERATION_NAVAL_SNEAK_ATTACK))524			{525				pOperation = m_pPlayer->addAIOperation(AI_OPERATION_NAVAL_SNEAK_ATTACK, eEnemy, target.m_pTargetCity->getArea(), target.m_pTargetCity, target.m_pMusterCity);526				if(pOperation != NULL && !pOperation->ShouldAbort())527				{528					return true;529				}530			}531			else532			{533				m_iNumNavalAttacksRequested++;534				m_eArmyTypeBeingBuilt = (m_iNumLandAttacksRequested > m_iNumNavalAttacksRequested) ? ARMY_TYPE_LAND : ARMY_TYPE_NAVAL_INVASION;535			}536		}537		else538		{539			if(IsAttackReady((GC.getGame().getHandicapInfo().GetID() > 4 && !(GC.getMap().GetAIMapHint() & 1)) ? MUFORMATION_BIGGER_CITY_ATTACK_FORCE : MUFORMATION_BASIC_CITY_ATTACK_FORCE, AI_OPERATION_SNEAK_CITY_ATTACK))540			{541				pOperation = m_pPlayer->addAIOperation(AI_OPERATION_SNEAK_CITY_ATTACK, eEnemy, target.m_pTargetCity->getArea(), target.m_pTargetCity, target.m_pMusterCity);542				if(pOperation != NULL && !pOperation->ShouldAbort())543				{544					return true;545				}546			}547			else548			{549				m_iNumLandAttacksRequested++;550				m_eArmyTypeBeingBuilt = (m_iNumLandAttacksRequested > m_iNumNavalAttacksRequested) ? ARMY_TYPE_LAND : ARMY_TYPE_NAVAL_INVASION;551			}552		}553	}554	return false;555}

Calls

Called by