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
- CvGlobals::getFRIENDSHIP_PER_UNIT_INTRUDING()
- CvGlobals::getMap()
- CvMap::numPlots() const
- CvMap::plotByIndexUnchecked(int) const
- CvMinorCivAI::AddNotification(CvString, CvString, PlayerTypes, int, int)
- CvMinorCivAI::ChangeAngerFreeIntrusionCounter(PlayerTypes, int)
- CvMinorCivAI::ChangeFriendshipWithMajor(PlayerTypes, int, bool)
- CvMinorCivAI::GetAngerFreeIntrusionCounter(PlayerTypes) const
- CvMinorCivAI::GetMajorScratchPad(PlayerTypes) const
- CvMinorCivAI::GetNumThreateningBarbarians()
- CvMinorCivAI::GetPlayer()
- CvMinorCivAI::IsAtWarWithPlayersTeam(PlayerTypes)
- CvMinorCivAI::IsPlayerHasOpenBorders(PlayerTypes)
- CvMinorCivAI::SetMajorScratchPad(PlayerTypes, int)
- CvPlayer::GetID() const
- CvPlayer::getNameKey() const
- CvPlayer::GetPlayerTraits() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTraits::IsAngerFreeIntrusionOfCityStates() const
- CvPlot::getOwner() const
- CvPlot::headUnitNode()
- CvPlot::nextUnitNode(const IDInfo *) const
CvString::CvString- CvUnit::GetLengthMissionQueue() const
- CvUnit::getOwner() const
- CvUnit::IsAngerFreeUnit() const
- CvUnit::IsAutomated() const
- getUnit(const IDInfo &)
Localization::LookupLocalization::String::operator=Localization::String::StringLocalization::String::toUTF8operator<<