Bazaar developer reference

CvTradeAI::ChooseTradeUnitTargetPlot(CvUnit *, int &, int &, TradeConnectionType &, bool &, const TradeConnectionList &)

Defined in
CvTradeClasses.cpp, line 4969
Class
CvTradeAI
Hook name
CivHooks::CvTradeAI_ChooseTradeUnitTargetPlot

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}

Calls

Called by