Bazaar developer reference

CvPlayerTrade::CreateTradeRoute(CvCity *, CvCity *, DomainTypes, TradeConnectionType)

Defined in
CvTradeClasses.cpp, line 2908
Class
CvPlayerTrade
Hook name
CivHooks::CvPlayerTrade_CreateTradeRoute

Hooks

static bool BeforeCvPlayerTrade_CreateTradeRoute(CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType, bool& result);static void AfterCvPlayerTrade_CreateTradeRoute(CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType, bool& result);static bool ReplaceCvPlayerTrade_CreateTradeRoute(bool (*original)(CvPlayerTrade*, CvCity*, CvCity*, DomainTypes, TradeConnectionType), CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType);CivRegisterBefore<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &BeforeCvPlayerTrade_CreateTradeRoute);CivRegisterAfter<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &AfterCvPlayerTrade_CreateTradeRoute);CivRegisterReplace<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &ReplaceCvPlayerTrade_CreateTradeRoute);

Code

2908bool CvPlayerTrade::CreateTradeRoute(CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType)2909{2910	int plotsX[MAX_PLOTS_TO_DISPLAY], plotsY[MAX_PLOTS_TO_DISPLAY];29112912	CvGameTrade* pTrade = GC.getGame().GetGameTrade();2913	int iRouteID = -1;2914	bool bResult = pTrade->CreateTradeRoute(pOriginCity, pDestCity, eDomain, eConnectionType, iRouteID);2915	if (!bResult)2916	{2917		return false;2918	}29192920	int iRouteIndex = pTrade->GetIndexFromID(iRouteID);2921	if (iRouteIndex != -1)2922	{2923		int nPlots = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList.size();2924		if (nPlots > 0) {2925			if (nPlots > MAX_PLOTS_TO_DISPLAY)2926				nPlots = MAX_PLOTS_TO_DISPLAY;2927			for (uint ui = 0; ui < (uint)nPlots; ui++) 2928			{2929				plotsX[ui] = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList[ui].m_iX;2930				plotsY[ui] = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList[ui].m_iY;2931			}2932			gDLL->TradeVisuals_NewRoute(iRouteIndex, m_pPlayer->GetID(),pTrade->m_aTradeConnections[iRouteIndex].m_eConnectionType, nPlots, plotsX, plotsY);2933			gDLL->TradeVisuals_UpdateRouteDirection(iRouteIndex, pTrade->m_aTradeConnections[iRouteIndex].m_bTradeUnitMovingForward);2934		}2935	}29362937#if !defined(NO_ACHIEVEMENTS)2938	if (m_pPlayer->isHuman() && !GC.getGame().isGameMultiPlayer())2939	{2940		bool bConnectedToArabs = false;2941		bool bConnectedToPersia = false;2942		bool bConnectedToMongols = false;2943		bool bConnectedToChina = false;2944		bool bConnectedToIndia = false;29452946		CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();2947		for (uint ui = 0; ui < pGameTrade->m_aTradeConnections.size(); ui++)2948		{2949			if (pGameTrade->IsTradeRouteIndexEmpty(ui))2950			{2951				continue;2952			}29532954			TradeConnection kConnection = pGameTrade->m_aTradeConnections[ui];2955			if (kConnection.m_eOriginOwner != m_pPlayer->GetID())2956			{2957				continue;2958			}29592960			if (kConnection.m_eDomain != DOMAIN_LAND)2961			{2962				continue;2963			}29642965			if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_ARABIA") == 0)2966			{2967				bConnectedToArabs = true;2968			}2969			else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_PERSIA") == 0)2970			{2971				bConnectedToPersia = true;2972			}2973			else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_MONGOL") == 0)2974			{2975				bConnectedToMongols = true;2976			}2977			else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_CHINA") == 0)2978			{2979				bConnectedToChina = true;2980			}2981			else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_INDIA") == 0)2982			{2983				bConnectedToIndia = true;2984			}2985		}29862987		if (bConnectedToArabs && bConnectedToPersia && bConnectedToMongols && bConnectedToChina && bConnectedToIndia)2988		{2989			gDLL->UnlockAchievement(ACHIEVEMENT_XP2_29);2990		}2991	}2992#endif29932994	return true;2995}

Calls

Called by