MilitaryAIHelpers::IsTestStrategy_EradicateBarbarians(MilitaryAIStrategyTypes, CvPlayer *, int, int)
- Defined in
- CvMilitaryAI.cpp, line 4708
- Hook name
CivHooks::MilitaryAIHelpers_IsTestStrategy_EradicateBarbarians
Hooks
static bool BeforeMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians(MilitaryAIStrategyTypes eStrategy, CvPlayer* pPlayer, int iBarbarianCampCount, int iVisibleBarbarianCount, bool& result);static void AfterMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians(MilitaryAIStrategyTypes eStrategy, CvPlayer* pPlayer, int iBarbarianCampCount, int iVisibleBarbarianCount, bool& result);static bool ReplaceMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians(bool (*original)(MilitaryAIStrategyTypes, CvPlayer*, int, int), MilitaryAIStrategyTypes eStrategy, CvPlayer* pPlayer, int iBarbarianCampCount, int iVisibleBarbarianCount);CivRegisterBefore<CivHooks::MilitaryAIHelpers_IsTestStrategy_EradicateBarbarians>(host, &BeforeMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians);CivRegisterAfter<CivHooks::MilitaryAIHelpers_IsTestStrategy_EradicateBarbarians>(host, &AfterMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians);CivRegisterReplace<CivHooks::MilitaryAIHelpers_IsTestStrategy_EradicateBarbarians>(host, &ReplaceMilitaryAIHelpers_IsTestStrategy_EradicateBarbarians);
Code
4707/// "Eradicate Barbarians" Player Strategy: If there is a large group of barbarians units or camps near our civilization, increase OFFENSE4708bool MilitaryAIHelpers::IsTestStrategy_EradicateBarbarians(MilitaryAIStrategyTypes eStrategy, CvPlayer* pPlayer, int iBarbarianCampCount, int iVisibleBarbarianCount)4709{4710 int iStrategyWeight;4711 PlayerTypes eOtherPlayer;47124713 // If we're at war don't bother with this Strategy (unless it is clear we are already winning)4714 MilitaryAIStrategyTypes eStrategyAtWar = (MilitaryAIStrategyTypes) GC.getInfoTypeForString("MILITARYAISTRATEGY_AT_WAR");4715 if(eStrategyAtWar != NO_MILITARYAISTRATEGY)4716 {4717 if(pPlayer->GetMilitaryAI()->IsUsingStrategy(eStrategyAtWar))4718 {4719 if(!pPlayer->GetDiplomacyAI()->GetStateAllWars() == STATE_ALL_WARS_WINNING)4720 {4721 return false;4722 }4723 }4724 }47254726 // We ARE getting our guys back4727 CvPlayerAI& BarbPlayer = GET_PLAYER(BARBARIAN_PLAYER);4728 CvUnit* pLoopUnit = NULL;4729 int iLoop;4730 for (pLoopUnit = BarbPlayer.firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = BarbPlayer.nextUnit(&iLoop))4731 {4732 if (pLoopUnit->GetOriginalOwner() == pPlayer->GetID() && (pLoopUnit->AI_getUnitAIType() == UNITAI_SETTLE || pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER))4733 {4734 return true;4735 }4736 }47374738 CvMilitaryAIStrategyXMLEntry* pStrategy = pPlayer->GetMilitaryAI()->GetMilitaryAIStrategies()->GetEntry(eStrategy);4739 CvAssert(pStrategy != NULL);4740 if(pStrategy)4741 {4742 iStrategyWeight = iBarbarianCampCount * 50 + iVisibleBarbarianCount * 25; // Two visible camps or 3 roving Barbarians will trigger this4743 int iWeightThresholdModifier = GetWeightThresholdModifier(eStrategy, pPlayer);4744 int iWeightThreshold = pStrategy->GetWeightThreshold() + iWeightThresholdModifier;47454746 if(iStrategyWeight >= iWeightThreshold * 2 && iVisibleBarbarianCount > 0) // barbs are a big threat, our sneak attack plan can wait4747 {4748 return true;4749 }4750 else if(iStrategyWeight >= iWeightThreshold)4751 {4752 // Also don't bother if we're building up for a sneak attack4753 CvDiplomacyAI* pkDiplomacyAI = pPlayer->GetDiplomacyAI();4754 for(int iMajorLoop = 0; iMajorLoop < MAX_MAJOR_CIVS; iMajorLoop++)4755 {4756 eOtherPlayer = (PlayerTypes) iMajorLoop;4757 if(pkDiplomacyAI->GetWarGoal(eOtherPlayer) == WAR_GOAL_PREPARE)4758 {4759 return false;4760 }4761 }47624763 return true;4764 }4765 // If we have an operation of this type running, we don't want to turn this strategy off4766 else if(pPlayer->haveAIOperationOfType(AI_OPERATION_DESTROY_BARBARIAN_CAMP))4767 {4768 return true;4769 }4770 }47714772 return false;4773}
Calls
- CvDiplomacyAI::GetStateAllWars() const
- CvDiplomacyAI::GetWarGoal(PlayerTypes) const
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvMilitaryAI::GetMilitaryAIStrategies()
- CvMilitaryAI::IsUsingStrategy(MilitaryAIStrategyTypes)
- CvMilitaryAIStrategyXMLEntries::GetEntry(int)
- CvMilitaryAIStrategyXMLEntry::GetWeightThreshold() const
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetID() const
- CvPlayer::GetMilitaryAI() const
- CvPlayer::haveAIOperationOfType(int, int *, PlayerTypes, CvPlot *)
- CvPlayer::nextUnit(int *, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvUnit::AI_getUnitAIType() const
- CvUnit::GetOriginalOwner() const
- MilitaryAIHelpers::GetWeightThresholdModifier(MilitaryAIStrategyTypes, CvPlayer *)