Hooks
static bool BeforeCvTacticalAI_PlotBarbarianPlunderTradeUnitMove(CvTacticalAI* self, DomainTypes eDomain);static void AfterCvTacticalAI_PlotBarbarianPlunderTradeUnitMove(CvTacticalAI* self, DomainTypes eDomain);static void ReplaceCvTacticalAI_PlotBarbarianPlunderTradeUnitMove(void (*original)(CvTacticalAI*, DomainTypes), CvTacticalAI* self, DomainTypes eDomain);CivRegisterBefore<CivHooks::CvTacticalAI_PlotBarbarianPlunderTradeUnitMove>(host, &BeforeCvTacticalAI_PlotBarbarianPlunderTradeUnitMove);CivRegisterAfter<CivHooks::CvTacticalAI_PlotBarbarianPlunderTradeUnitMove>(host, &AfterCvTacticalAI_PlotBarbarianPlunderTradeUnitMove);CivRegisterReplace<CivHooks::CvTacticalAI_PlotBarbarianPlunderTradeUnitMove>(host, &ReplaceCvTacticalAI_PlotBarbarianPlunderTradeUnitMove);
Code
2633/// Plunder trade routes2634void CvTacticalAI::PlotBarbarianPlunderTradeUnitMove(DomainTypes eDomain)2635{2636 AITacticalTargetType eTargetType = AI_TACTICAL_TARGET_NONE;2637 bool bNavalOnly = false;2638 if (eDomain == DOMAIN_LAND)2639 {2640 eTargetType = AI_TACTICAL_TARGET_TRADE_UNIT_LAND;2641 }2642 else if (eDomain == DOMAIN_SEA)2643 {2644 eTargetType = AI_TACTICAL_TARGET_TRADE_UNIT_SEA;2645 bNavalOnly = true;2646 }26472648 CvAssertMsg(eTargetType != AI_TACTICAL_TARGET_NONE, "Undefined domain type for target");2649 if (eTargetType == AI_TACTICAL_TARGET_NONE)2650 {2651 return;2652 }26532654 CvTacticalTarget* pTarget;2655 pTarget = GetFirstZoneTarget(eTargetType);2656 while(pTarget != NULL)2657 {2658 // See what units we have who can reach target this turn2659 CvPlot* pPlot = GC.getMap().plot(pTarget->GetTargetX(), pTarget->GetTargetY());26602661 if (FindUnitsWithinStrikingDistance(pPlot, 0, 0, false /* bNoRangedUnits */, bNavalOnly, true /*bMustMoveThrough*/, false /*bIncludeBlockedUnits*/, false /*bWillPillage*/))2662 {2663 // Queue best one up to capture it2664 ExecutePlunderTradeUnit(pPlot);26652666 if(GC.getLogging() && GC.getAILogging())2667 {2668 CvString strLogString;2669 strLogString.Format("Plundering trade unit, X: %d, Y: %d", pTarget->GetTargetX(), pTarget->GetTargetY());2670 LogTacticalMessage(strLogString);2671 }2672 }26732674 pTarget = GetNextZoneTarget();2675 }2676}