Bazaar developer reference

CvMinorCivAI::DoIntrusion()

Defined in
CvMinorCivAI.cpp, line 7142
Class
CvMinorCivAI
Hook name
CivHooks::CvMinorCivAI_DoIntrusion

Hooks

static bool BeforeCvMinorCivAI_DoIntrusion(CvMinorCivAI* self);static void AfterCvMinorCivAI_DoIntrusion(CvMinorCivAI* self);static void ReplaceCvMinorCivAI_DoIntrusion(void (*original)(CvMinorCivAI*), CvMinorCivAI* self);CivRegisterBefore<CivHooks::CvMinorCivAI_DoIntrusion>(host, &BeforeCvMinorCivAI_DoIntrusion);CivRegisterAfter<CivHooks::CvMinorCivAI_DoIntrusion>(host, &AfterCvMinorCivAI_DoIntrusion);CivRegisterReplace<CivHooks::CvMinorCivAI_DoIntrusion>(host, &ReplaceCvMinorCivAI_DoIntrusion);

Code

7141/// Major Civs intruding in our lands?7142void CvMinorCivAI::DoIntrusion()7143{7144	PlayerTypes eMajor;7145	int iMajorLoop;7146	for(iMajorLoop = 0; iMajorLoop < MAX_MAJOR_CIVS; iMajorLoop++)7147	{7148		eMajor = (PlayerTypes) iMajorLoop;71497150		if(GetAngerFreeIntrusionCounter(eMajor) > 0)7151		{7152			ChangeAngerFreeIntrusionCounter(eMajor, -1);7153		}7154	}71557156	// If there are barbs nearby then don't worry about other players7157	if(GetNumThreateningBarbarians() > 0)7158		return;71597160	CvPlot* pLoopPlot;7161	const IDInfo* pUnitNode;7162	const CvUnit* pLoopUnit;71637164	// Set up scratch pad so that we can use it to send out Notifications7165	for(iMajorLoop = 0; iMajorLoop < MAX_MAJOR_CIVS; iMajorLoop++)7166	{7167		eMajor = (PlayerTypes) iMajorLoop;7168		SetMajorScratchPad(eMajor, 0);7169	}71707171	// Look at how many Units each Major Civ has in the Minor's Territory7172	for(int iPlotLoop = 0; iPlotLoop < GC.getMap().numPlots(); iPlotLoop++)7173	{7174		pLoopPlot = GC.getMap().plotByIndexUnchecked(iPlotLoop);71757176		// Plot owned by this Minor?7177		if(pLoopPlot->getOwner() == GetPlayer()->GetID())7178		{7179			pUnitNode = pLoopPlot->headUnitNode();71807181			while(pUnitNode != NULL)7182			{7183				pLoopUnit = ::getUnit(*pUnitNode);7184				pUnitNode = pLoopPlot->nextUnitNode(pUnitNode);71857186				// Does this unit not cause anger?7187				if(pLoopUnit && pLoopUnit->IsAngerFreeUnit())7188					continue;71897190				//// Don't look at Unit's this Minor wants for a Quest!7191				//if (!IsPeaceQuestCompletedByMajor((PlayerTypes) pLoopUnit->getOwner()))7192				//{7193				//	if (GetPeaceQuestWidget() == MINORCIVQUESTWIDGET_UNITCLASS || GetWarQuestWidget() == MINORCIVQUESTWIDGET_UNITCLASS)7194				//	{7195				//		if (GetPeaceQuestWidgetID() == pLoopUnit->getUnitClassType() || GetWarQuestWidgetID() == pLoopUnit->getUnitClassType())7196				//		{7197				//			continue;7198				//		}7199				//	}7200				//}72017202				// Does this Unit belong to a Major?7203				if(pLoopUnit && pLoopUnit->getOwner() < MAX_MAJOR_CIVS)7204				{7205					// If player has been granted Open Borders or has a friendship with minors bonus, then the Minor doesn't care about intrusion7206					if(!IsPlayerHasOpenBorders(pLoopUnit->getOwner()) && GetAngerFreeIntrusionCounter(pLoopUnit->getOwner()) == 0)7207					{7208						// If the player is at war with the Minor then don't bother7209						if(!IsAtWarWithPlayersTeam(pLoopUnit->getOwner()))7210						{7211							// Ignore if the player trait allows us to intrude without angering7212							if(!GET_PLAYER(pLoopUnit->getOwner()).GetPlayerTraits()->IsAngerFreeIntrusionOfCityStates())7213							{7214								ChangeFriendshipWithMajor(pLoopUnit->getOwner(), /*-6*/ GC.getFRIENDSHIP_PER_UNIT_INTRUDING());72157216								// only modify if the unit isn't automated nor having a pending order7217								if(!pLoopUnit->IsAutomated() && pLoopUnit->GetLengthMissionQueue() == 0)7218								{7219									SetMajorScratchPad(pLoopUnit->getOwner(), 1);7220								}72217222								//if (!IsMajorIntruding((PlayerTypes) pLoopUnit->getOwner()))7223								//{7224								//	SetMajorIntruding((PlayerTypes) pLoopUnit->getOwner(), true);7225								//	ChangeNumTurnsMajorHasIntruded((PlayerTypes) pLoopUnit->getOwner(), 1);7226								//}7227							}7228						}7229					}7230				}7231			}7232		}7233	}72347235	// Now send out Notifications (if necessary)7236	Localization::String strMessage;7237	Localization::String strSummary;72387239	for(iMajorLoop = 0; iMajorLoop < MAX_MAJOR_CIVS; iMajorLoop++)7240	{7241		eMajor = (PlayerTypes) iMajorLoop;72427243		if(GetMajorScratchPad(eMajor) > 0)7244		{7245			strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_INTRUSION");7246			strMessage << GetPlayer()->getNameKey();7247			strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_MINOR_INTRUSION");7248			strSummary << GetPlayer()->getNameKey();72497250			AddNotification(strMessage.toUTF8(), strSummary.toUTF8(), eMajor);7251		}7252	}7253}

Calls

Called by