Hooks
static bool BeforeCvPlayerTrade_GetNumPotentialConnections(CvPlayerTrade* self, CvCity* pFromCity, DomainTypes eDomain, int& result);static void AfterCvPlayerTrade_GetNumPotentialConnections(CvPlayerTrade* self, CvCity* pFromCity, DomainTypes eDomain, int& result);static int ReplaceCvPlayerTrade_GetNumPotentialConnections(int (*original)(CvPlayerTrade*, CvCity*, DomainTypes), CvPlayerTrade* self, CvCity* pFromCity, DomainTypes eDomain);CivRegisterBefore<CivHooks::CvPlayerTrade_GetNumPotentialConnections>(host, &BeforeCvPlayerTrade_GetNumPotentialConnections);CivRegisterAfter<CivHooks::CvPlayerTrade_GetNumPotentialConnections>(host, &AfterCvPlayerTrade_GetNumPotentialConnections);CivRegisterReplace<CivHooks::CvPlayerTrade_GetNumPotentialConnections>(host, &ReplaceCvPlayerTrade_GetNumPotentialConnections);
Code
3067int CvPlayerTrade::GetNumPotentialConnections (CvCity* pFromCity, DomainTypes eDomain)3068{3069 CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();30703071 int iNumValid = 0;3072 for (uint ui = 0; ui < MAX_CIV_PLAYERS; ui++)3073 {3074 PlayerTypes ePlayer = (PlayerTypes)ui;30753076 if (!GET_PLAYER(ePlayer).isAlive())3077 {3078 continue;3079 }30803081 if (GET_PLAYER(ePlayer).isBarbarian())3082 {3083 continue;3084 }30853086 int iLoop;3087 CvCity* pLoopCity;3088 for(pLoopCity = GET_PLAYER(ePlayer).firstCity(&iLoop); pLoopCity != NULL; pLoopCity = GET_PLAYER(ePlayer).nextCity(&iLoop))3089 {3090 bool bCheckPath = true;3091 for (uint uiConnectionTypes = 0; uiConnectionTypes < NUM_TRADE_CONNECTION_TYPES; uiConnectionTypes++)3092 {3093 // Check the trade route, ignoring the path for now3094 if (CanCreateTradeRoute(pFromCity, pLoopCity, eDomain, (TradeConnectionType)uiConnectionTypes, false, false))3095 {3096 // Now test the path3097 if (bCheckPath)3098 {3099 bool bTradeAvailable = pGameTrade->IsValidTradeRoutePath(pFromCity, pLoopCity, eDomain);3100 if (!bTradeAvailable)3101 break; // If there is no path for this domain, just skip the rest of the connection tests.31023103 bCheckPath = false; // No need to check the path for this domain again3104 }31053106 iNumValid++;3107 }3108 }3109 }3110 }31113112 return iNumValid;3113}