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}