Hooks
static bool BeforeCvTreasury_HasCityConnectionRouteBetweenCities(const CvTreasury* self, CvCity* pFirstCity, CvCity* pSecondCity, bool& result);static void AfterCvTreasury_HasCityConnectionRouteBetweenCities(const CvTreasury* self, CvCity* pFirstCity, CvCity* pSecondCity, bool& result);static bool ReplaceCvTreasury_HasCityConnectionRouteBetweenCities(bool (*original)(const CvTreasury*, CvCity*, CvCity*), const CvTreasury* self, CvCity* pFirstCity, CvCity* pSecondCity);CivRegisterBefore<CivHooks::CvTreasury_HasCityConnectionRouteBetweenCities>(host, &BeforeCvTreasury_HasCityConnectionRouteBetweenCities);CivRegisterAfter<CivHooks::CvTreasury_HasCityConnectionRouteBetweenCities>(host, &AfterCvTreasury_HasCityConnectionRouteBetweenCities);CivRegisterReplace<CivHooks::CvTreasury_HasCityConnectionRouteBetweenCities>(host, &ReplaceCvTreasury_HasCityConnectionRouteBetweenCities);
Code
329/// Returns the route-type between two cities330#if defined(MOD_EVENTS_CITY_CONNECTIONS)331bool CvTreasury::HasCityConnectionRouteBetweenCities(CvCity* pFirstCity, CvCity* pSecondCity) const332#else333bool CvTreasury::HasCityConnectionRouteBetweenCities(CvCity* pFirstCity, CvCity* pSecondCity, bool bBestRoute) const334#endif335{336 CvCityConnections* pCityConnections = m_pPlayer->GetCityConnections();337 FASSERT(pCityConnections, "m_pCityConnections is null");338 if(!pCityConnections)339 {340 // invalid value341 return FALSE;342 }343344 FASSERT(pFirstCity, "pFirstCity is null. Invalid!");345 FASSERT(pSecondCity, "pSecondCity is null. Invalid!");346 if(!pFirstCity || !pSecondCity)347 {348 // null city passed in349 return FALSE;350 }351352 FASSERT(pFirstCity != pSecondCity, "Cities are the same and are by default connected?");353 if(pFirstCity == pSecondCity)354 {355 // trying to go to the same city356 return FALSE;357 }358359 int iFirstCityIndex = -1;360 int iSecondCityIndex = -1;361 for(uint ui = 0; ui < pCityConnections->m_aiCityPlotIDs.size(); ui++)362 {363 if(pFirstCity->plot()->GetPlotIndex() == pCityConnections->m_aiCityPlotIDs[ui])364 {365 iFirstCityIndex = ui;366 }367368 if(pSecondCity->plot()->GetPlotIndex() == pCityConnections->m_aiCityPlotIDs[ui])369 {370 iSecondCityIndex = ui;371 }372373 if(iFirstCityIndex >= 0 && iSecondCityIndex >= 0)374 {375 break;376 }377 }378379 if(iFirstCityIndex < 0 || iSecondCityIndex < 0)380 {381 // did not find one or both of the cities382 return FALSE;383 }384385 CvCityConnections::RouteInfo* pRouteInfo = pCityConnections->GetRouteInfo(iFirstCityIndex, iSecondCityIndex);386 if(pRouteInfo)387 {388#if !defined(MOD_EVENTS_CITY_CONNECTIONS)389 if(bBestRoute)390 {391 return pRouteInfo->m_cRouteState & CvCityConnections::HAS_BEST_ROUTE;392 }393 else394#endif395 {396 return pRouteInfo->m_cRouteState & CvCityConnections::HAS_ANY_ROUTE;397 }398 }399400 return FALSE;401}