Bazaar developer reference

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

Called by