Hooks
static bool BeforeCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes(CvPlayerTrade* self, DomainTypes eDomain, bool& result);static void AfterCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes(CvPlayerTrade* self, DomainTypes eDomain, bool& result);static bool ReplaceCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes(bool (*original)(CvPlayerTrade*, DomainTypes), CvPlayerTrade* self, DomainTypes eDomain);CivRegisterBefore<CivHooks::CvPlayerTrade_CanCreateTradeRoute_with_DomainTypes>(host, &BeforeCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes);CivRegisterAfter<CivHooks::CvPlayerTrade_CanCreateTradeRoute_with_DomainTypes>(host, &AfterCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes);CivRegisterReplace<CivHooks::CvPlayerTrade_CanCreateTradeRoute_with_DomainTypes>(host, &ReplaceCvPlayerTrade_CanCreateTradeRoute_with_DomainTypes);
Code
2873// Can the player create any trade routes in the domain, even with itself.2874bool CvPlayerTrade::CanCreateTradeRoute(DomainTypes eDomain)2875{2876 CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();28772878 int iCityLoop;2879 CvCity* pLoopCity;2880 for(pLoopCity = m_pPlayer->firstCity(&iCityLoop); pLoopCity != NULL; pLoopCity = m_pPlayer->nextCity(&iCityLoop))2881 {2882 // Get a sorted list of nearby cities 2883 const CvCityManager::CityList& kNearbyCities = CvCityManager::GetNearbyCities(pLoopCity);2884 for (CvCityManager::CityList::const_iterator itr = kNearbyCities.begin(); itr != kNearbyCities.end(); ++itr)2885 {2886 CvCity* pLoopCity2 = (*itr);2887 for (uint uiConnectionTypes = 0; uiConnectionTypes < NUM_TRADE_CONNECTION_TYPES; uiConnectionTypes++)2888 {2889 // Check the route, but not the path2890 if (CanCreateTradeRoute(pLoopCity, pLoopCity2, eDomain, (TradeConnectionType)uiConnectionTypes, false, false))2891 {2892 // Check the path2893 if (pGameTrade->IsValidTradeRoutePath(pLoopCity, pLoopCity2, eDomain))2894 return true;28952896 // else we can just break out of the loop2897 break;2898 }2899 }2900 }2901 }29022903 return false;29042905}