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}