MilitaryAIHelpers::IsTestStrategy_NeedAntiAirUnits(CvPlayer *, int, int)
- Defined in
- CvMilitaryAI.cpp, line 4906
- Hook name
CivHooks::MilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits
Hooks
static bool BeforeMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits(CvPlayer* pPlayer, int iNumAA, int iNumMelee, bool& result);static void AfterMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits(CvPlayer* pPlayer, int iNumAA, int iNumMelee, bool& result);static bool ReplaceMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits(bool (*original)(CvPlayer*, int, int), CvPlayer* pPlayer, int iNumAA, int iNumMelee);CivRegisterBefore<CivHooks::MilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits>(host, &BeforeMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits);CivRegisterAfter<CivHooks::MilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits>(host, &AfterMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits);CivRegisterReplace<CivHooks::MilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits>(host, &ReplaceMilitaryAIHelpers_IsTestStrategy_NeedAntiAirUnits);
Code
4905/// "Need Anti-Air" Player Strategy: If a player has too many AA units4906bool MilitaryAIHelpers::IsTestStrategy_NeedAntiAirUnits(CvPlayer* pPlayer, int iNumAA, int iNumMelee)4907{4908 bool bAnyAirforce = false;4909 PlayerTypes eLoopPlayer;4910 for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)4911 {4912 eLoopPlayer = (PlayerTypes) iPlayerLoop;4913 if(eLoopPlayer != pPlayer->GetID() && pPlayer->GetDiplomacyAI()->IsPlayerValid(eLoopPlayer))4914 {4915 if(GET_PLAYER(eLoopPlayer).GetMilitaryAI()->HasAirforce())4916 {4917 bAnyAirforce = true;4918 break;4919 }4920 }4921 }49224923 if(bAnyAirforce)4924 {4925#if defined(MOD_CONFIG_AI_IN_XML)4926 // This original code simplifies to 4*iNumAA <= iNumMelee4927 return (GD_INT_GET(AI_CONFIG_MILITARY_MELEE_PER_AA)*iNumAA <= iNumMelee);4928#else4929 int iRatio = (iNumAA * 10) / max(1,iNumMelee+iNumAA);4930 return (iRatio <= 2);4931#endif4932 }4933 else4934 {4935 return false;4936 }4937}