CvPlayerTrade::GetTradeRouteRange(DomainTypes, CvCity *)
- Defined in
- CvTradeClasses.cpp, line 3531
- Class
- CvPlayerTrade
- Hook name
CivHooks::CvPlayerTrade_GetTradeRouteRange
Hooks
static bool BeforeCvPlayerTrade_GetTradeRouteRange(CvPlayerTrade* self, DomainTypes eDomain, CvCity* pOriginCity, int& result);static void AfterCvPlayerTrade_GetTradeRouteRange(CvPlayerTrade* self, DomainTypes eDomain, CvCity* pOriginCity, int& result);static int ReplaceCvPlayerTrade_GetTradeRouteRange(int (*original)(CvPlayerTrade*, DomainTypes, CvCity*), CvPlayerTrade* self, DomainTypes eDomain, CvCity* pOriginCity);CivRegisterBefore<CivHooks::CvPlayerTrade_GetTradeRouteRange>(host, &BeforeCvPlayerTrade_GetTradeRouteRange);CivRegisterAfter<CivHooks::CvPlayerTrade_GetTradeRouteRange>(host, &AfterCvPlayerTrade_GetTradeRouteRange);CivRegisterReplace<CivHooks::CvPlayerTrade_GetTradeRouteRange>(host, &ReplaceCvPlayerTrade_GetTradeRouteRange);
Code
3531int CvPlayerTrade::GetTradeRouteRange (DomainTypes eDomain, CvCity* pOriginCity)3532{3533 int iRange = 0;35343535#if defined(MOD_TRADE_ROUTE_SCALING)3536 int iRouteModifier = GC.getMap().getWorldInfo().getTradeRouteDistanceMod();3537#endif35383539 int iBaseRange = 0;3540 switch (eDomain)3541 {3542 case DOMAIN_SEA:3543#if defined(MOD_TRADE_ROUTE_SCALING)3544 iBaseRange = GD_INT_GET(TRADE_ROUTE_BASE_SEA_DISTANCE);3545#else3546 iBaseRange = 20;3547#endif3548 break;3549 case DOMAIN_LAND:3550#if defined(MOD_TRADE_ROUTE_SCALING)3551 iBaseRange = GD_INT_GET(TRADE_ROUTE_BASE_LAND_DISTANCE);3552#else3553 iBaseRange = 10;3554#endif3555 break;3556 default:3557 CvAssertMsg(false, "Undefined domain for trade route range");3558 return -1;3559 break;3560 }35613562 int iTraitRange = 0;3563 switch (eDomain)3564 {3565 case DOMAIN_SEA:3566#if defined(MOD_TRAITS_TRADE_ROUTE_BONUSES)3567 iTraitRange = m_pPlayer->GetPlayerTraits()->GetSeaTradeRouteRangeBonus();3568#else3569 // not implemented3570 iTraitRange = 0;3571#endif3572 break;3573 case DOMAIN_LAND:3574 iTraitRange = m_pPlayer->GetPlayerTraits()->GetLandTradeRouteRangeBonus();3575 break;3576 }35773578 CvPlayerTechs* pMyPlayerTechs = m_pPlayer->GetPlayerTechs();3579 CvTeamTechs* pMyTeamTechs = GET_TEAM(GET_PLAYER(m_pPlayer->GetID()).getTeam()).GetTeamTechs();3580 CvTechEntry* pTechInfo = NULL; 35813582 int iExtendedRange = 0;3583 for(int iTechLoop = 0; iTechLoop < pMyPlayerTechs->GetTechs()->GetNumTechs(); iTechLoop++)3584 {3585 TechTypes eTech = (TechTypes)iTechLoop;3586 if (!pMyTeamTechs->HasTech(eTech))3587 {3588 continue;3589 }35903591 pTechInfo = pMyPlayerTechs->GetTechs()->GetEntry(eTech);3592 CvAssertMsg(pTechInfo, "null tech entry");3593 if (pTechInfo)3594 {3595 iExtendedRange += pTechInfo->GetTradeRouteDomainExtraRange(eDomain);3596 }3597 }3598 3599 int iRangeModifier = 0;3600 for (int iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)3601 {3602 BuildingTypes eBuilding = (BuildingTypes)GET_PLAYER(pOriginCity->getOwner()).getCivilizationInfo().getCivilizationBuildings(iI);3603 if(eBuilding != NO_BUILDING)3604 {3605 CvBuildingEntry* pBuildingEntry = GC.GetGameBuildings()->GetEntry(eBuilding);3606 if (!pBuildingEntry)3607 {3608 continue;3609 }36103611 if (pBuildingEntry && pOriginCity->GetCityBuildings()->GetNumBuilding((BuildingTypes)pBuildingEntry->GetID()))3612 {3613 if (pBuildingEntry->GetTradeRouteSeaDistanceModifier() > 0 && eDomain == DOMAIN_SEA)3614 {3615#if defined(MOD_BUGFIX_MINOR)3616 iRangeModifier += pBuildingEntry->GetTradeRouteSeaDistanceModifier() * pOriginCity->GetCityBuildings()->GetNumBuilding((BuildingTypes)pBuildingEntry->GetID());3617#else3618 iRangeModifier += pBuildingEntry->GetTradeRouteSeaDistanceModifier();3619#endif3620 }3621 else if (pBuildingEntry->GetTradeRouteLandDistanceModifier() > 0 && eDomain == DOMAIN_LAND)3622 {3623#if defined(MOD_BUGFIX_MINOR)3624 iRangeModifier += pBuildingEntry->GetTradeRouteLandDistanceModifier() * pOriginCity->GetCityBuildings()->GetNumBuilding((BuildingTypes)pBuildingEntry->GetID());3625#else3626 iRangeModifier += pBuildingEntry->GetTradeRouteLandDistanceModifier();3627#endif3628 }3629 }3630 }3631 }36323633 iRange = iBaseRange;3634 iRange += iTraitRange;3635 iRange += iExtendedRange;3636#if defined(MOD_TRADE_ROUTE_SCALING)3637 iRange = (iRange * iRouteModifier) / 100;3638#endif3639 iRange = (iRange * (100 + iRangeModifier)) / 100;3640 return iRange;3641}
Calls
- CvBaseInfo::GetID() const
- CvBuildingEntry::GetTradeRouteLandDistanceModifier() const
- CvBuildingEntry::GetTradeRouteSeaDistanceModifier() const
- CvBuildingXMLEntries::GetEntry(int)
- CvCity::GetCityBuildings() const
- CvCity::getOwner() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGlobals::GetGameBuildings() const
- CvGlobals::getMap()
- CvGlobals::getNumBuildingClassInfos()
- CvGlobals::getTRADE_ROUTE_BASE_LAND_DISTANCE()
- CvGlobals::getTRADE_ROUTE_BASE_SEA_DISTANCE()
- CvMap::getWorldInfo() const
- CvPlayer::getCivilizationInfo() const
- CvPlayer::GetID() const
- CvPlayer::GetPlayerTechs() const
- CvPlayer::GetPlayerTraits() const
- CvPlayer::getTeam() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTechs::GetTechs() const
- CvPlayerTraits::GetLandTradeRouteRangeBonus() const
- CvPlayerTraits::GetSeaTradeRouteRangeBonus() const
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const
- CvTechEntry::GetTradeRouteDomainExtraRange(int) const
- CvTechXMLEntries::GetEntry(int)
- CvTechXMLEntries::GetNumTechs()
- CvWorldInfo::getTradeRouteDistanceMod() const