Bazaar developer reference

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

Called by