Hooks
static bool BeforeCvTradeAI_ChooseTradeUnitTargetPlot(CvTradeAI* self, CvUnit* pUnit, int& iOriginPlotIndex, int& iDestPlotIndex, TradeConnectionType& eTradeConnectionType, bool& bDisband, const TradeConnectionList& aTradeConnections, bool& result);static void AfterCvTradeAI_ChooseTradeUnitTargetPlot(CvTradeAI* self, CvUnit* pUnit, int& iOriginPlotIndex, int& iDestPlotIndex, TradeConnectionType& eTradeConnectionType, bool& bDisband, const TradeConnectionList& aTradeConnections, bool& result);static bool ReplaceCvTradeAI_ChooseTradeUnitTargetPlot(bool (*original)(CvTradeAI*, CvUnit*, int&, int&, TradeConnectionType&, bool&, const TradeConnectionList&), CvTradeAI* self, CvUnit* pUnit, int& iOriginPlotIndex, int& iDestPlotIndex, TradeConnectionType& eTradeConnectionType, bool& bDisband, const TradeConnectionList& aTradeConnections);CivRegisterBefore<CivHooks::CvTradeAI_ChooseTradeUnitTargetPlot>(host, &BeforeCvTradeAI_ChooseTradeUnitTargetPlot);CivRegisterAfter<CivHooks::CvTradeAI_ChooseTradeUnitTargetPlot>(host, &AfterCvTradeAI_ChooseTradeUnitTargetPlot);CivRegisterReplace<CivHooks::CvTradeAI_ChooseTradeUnitTargetPlot>(host, &ReplaceCvTradeAI_ChooseTradeUnitTargetPlot);
Code
4968/// ChooseTradeUnitTargetPlot4969bool CvTradeAI::ChooseTradeUnitTargetPlot(CvUnit* pUnit, int& iOriginPlotIndex, int& iDestPlotIndex, TradeConnectionType& eTradeConnectionType, bool& bDisband, const TradeConnectionList& aTradeConnections)4970{4971 // clearing the returned data4972 iOriginPlotIndex = MAX_INT;4973 iDestPlotIndex = MAX_INT;4974 eTradeConnectionType = NUM_TRADE_CONNECTION_TYPES;4975 bDisband = false;49764977 CvCity* pOriginCity = pUnit->plot()->getPlotCity();4978 CvAssertMsg(pOriginCity, "pOriginCity is null! Whaa?");4979 if (!pOriginCity)4980 {4981 return false;4982 }49834984 CvPlayerTrade* pkTradeAI = m_pPlayer->GetTrade();4985 //CvPlayerTrade* pPlayerTrade = m_pPlayer->GetTrade();4986 uint uiNumDuplicateTRs = 0;4987 uint uiNumTradeRoutesPossible = pkTradeAI->GetNumTradeRoutesPossible();4988 uint uiNumTradeConnections = aTradeConnections.size();49894990 for (uint ui = 0; ui < uiNumTradeRoutesPossible && ui < uiNumTradeConnections; ui++)4991 {4992 for (uint ui2 = ui + 1; ui2 < uiNumTradeRoutesPossible && ui2 < uiNumTradeConnections; ui2++)4993 {4994 if (aTradeConnections[ui].m_iOriginX == aTradeConnections[ui2].m_iOriginX && 4995 aTradeConnections[ui].m_iOriginY == aTradeConnections[ui2].m_iOriginY && 4996 aTradeConnections[ui].m_iDestX == aTradeConnections[ui2].m_iDestX && 4997 aTradeConnections[ui].m_iDestY == aTradeConnections[ui2].m_iDestY && 4998 aTradeConnections[ui].m_eConnectionType == aTradeConnections[ui2].m_eConnectionType)4999 {5000 uiNumDuplicateTRs++;5001 }5002 }5003 }50045005 for (uint ui = 0; ui < aTradeConnections.size(); ui++)5006 {5007 if (ui >= (uiNumTradeRoutesPossible + uiNumDuplicateTRs))5008 {5009 if ((uiNumTradeRoutesPossible - pkTradeAI->GetNumTradeRoutesUsed(true)) == 0) // GetNumTradeRoutesRemaining(true)5010 {5011 bDisband = true;5012 return true;5013 }5014 }50155016 if (aTradeConnections[ui].m_eDomain == pUnit->getDomainType())5017 {5018 CvPlot* pPlot = GC.getMap().plot(aTradeConnections[ui].m_iOriginX, aTradeConnections[ui].m_iOriginY);5019 if (pUnit->canMakeTradeRouteAt(pPlot, aTradeConnections[ui].m_iDestX, aTradeConnections[ui].m_iDestY, aTradeConnections[ui].m_eConnectionType))5020 {5021 CvPlot* pDestPlot = GC.getMap().plot(aTradeConnections[ui].m_iDestX, aTradeConnections[ui].m_iDestY);5022 iOriginPlotIndex = pPlot->GetPlotIndex();5023 iDestPlotIndex = pDestPlot->GetPlotIndex();5024 eTradeConnectionType = aTradeConnections[ui].m_eConnectionType;5025 return true;5026 }5027 }5028 }50295030 return false;5031}