Bazaar developer reference

CvGameTrade::CanCreateTradeRoute(PlayerTypes, PlayerTypes, DomainTypes)

Defined in
CvTradeClasses.cpp, line 270
Class
CvGameTrade
Hook name
CivHooks::CvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes

Hooks

static bool BeforeCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes(CvGameTrade* self, PlayerTypes eOriginPlayer, PlayerTypes eDestPlayer, DomainTypes eDomainRestriction, bool& result);static void AfterCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes(CvGameTrade* self, PlayerTypes eOriginPlayer, PlayerTypes eDestPlayer, DomainTypes eDomainRestriction, bool& result);static bool ReplaceCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes(bool (*original)(CvGameTrade*, PlayerTypes, PlayerTypes, DomainTypes), CvGameTrade* self, PlayerTypes eOriginPlayer, PlayerTypes eDestPlayer, DomainTypes eDomainRestriction);CivRegisterBefore<CivHooks::CvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes>(host, &BeforeCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes);CivRegisterAfter<CivHooks::CvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes>(host, &AfterCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes);CivRegisterReplace<CivHooks::CvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes>(host, &ReplaceCvGameTrade_CanCreateTradeRoute_with_PlayerTypes_PlayerTypes_DomainTypes);

Code

270bool CvGameTrade::CanCreateTradeRoute(PlayerTypes eOriginPlayer, PlayerTypes eDestPlayer, DomainTypes eDomainRestriction)271{272	CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();273274	int iOriginCityLoop;275	CvCity* pOriginLoopCity = NULL;276	for(pOriginLoopCity = GET_PLAYER(eOriginPlayer).firstCity(&iOriginCityLoop); pOriginLoopCity != NULL; pOriginLoopCity = GET_PLAYER(eOriginPlayer).nextCity(&iOriginCityLoop))277	{278		int iDestCityLoop;279		CvCity* pDestLoopCity = NULL;280		for(pDestLoopCity = GET_PLAYER(eDestPlayer).firstCity(&iDestCityLoop); pDestLoopCity != NULL; pDestLoopCity = GET_PLAYER(eDestPlayer).nextCity(&iDestCityLoop))281		{282			for (uint uiDomain = 0; uiDomain < NUM_DOMAIN_TYPES; uiDomain++)283			{284				DomainTypes eDomain = (DomainTypes)uiDomain;285				// check only the domain we want286				if (eDomainRestriction != NO_DOMAIN && eDomainRestriction != eDomain)287				{288					continue;289				}290291				if (eDomain != DOMAIN_LAND && eDomain != DOMAIN_SEA)292				{293					continue;294				}295296				for (uint uiConnectionTypes = 0; uiConnectionTypes < NUM_TRADE_CONNECTION_TYPES; uiConnectionTypes++)297				{298					// Check the route, but not the path299					if (CanCreateTradeRoute(pOriginLoopCity, pDestLoopCity, eDomain, (TradeConnectionType)uiConnectionTypes, false, false))300					{301						// Check the path302						if (pGameTrade->IsValidTradeRoutePath(pOriginLoopCity, pDestLoopCity, eDomain))303							return true;304305						// else we can just break out of the loop306						break;307					}308				}309			}310		}311	}312313	return false;314}

Calls

Called by