wofür stehen da die zahlen? vermutlich 0 für nahrung und 5 für 5 nahrung? und das if damit nur ein spieler mehr aus dem handelsweg bekommt und nicht beide? es soll nur der cityowner mit trait X mehr aus dem handelsweg bekommen.
soll das irgendwo hier rein?
PHP-Code:
// XXX eventually, this needs to be done when roads are built/destroyed...
void CvCity::updateTradeRoutes()
{
int* paiBestValue;
CvCity* pLoopCity;
int iTradeRoutes;
int iTradeProfit;
int iValue;
int iLoop;
int iI, iJ, iK;
paiBestValue = new int[GC.getDefineINT("MAX_TRADE_ROUTES")];
for (iI = 0; iI < GC.getDefineINT("MAX_TRADE_ROUTES"); iI++)
{
paiBestValue[iI] = 0;
}
clearTradeRoutes();
if (!isDisorder() && !isPlundered())
{
iTradeRoutes = getTradeRoutes();
FAssert(iTradeRoutes <= GC.getDefineINT("MAX_TRADE_ROUTES"));
for (iI = 0; iI < MAX_PLAYERS; iI++)
{
if (GET_PLAYER(getOwnerINLINE()).canHaveTradeRoutesWith((PlayerTypes)iI))
{
for (pLoopCity = GET_PLAYER((PlayerTypes)iI).firstCity(&iLoop); pLoopCity != NULL; pLoopCity = GET_PLAYER((PlayerTypes)iI).nextCity(&iLoop))
{
if (pLoopCity != this)
{
if (!(pLoopCity->isTradeRoute(getOwnerINLINE())) || (getTeam() == GET_PLAYER((PlayerTypes)iI).getTeam()))
{
if (pLoopCity->plotGroup(getOwnerINLINE()) == plotGroup(getOwnerINLINE()) || GC.getDefineINT("IGNORE_PLOT_GROUP_FOR_TRADE_ROUTES"))
{
iValue = calculateTradeProfit(pLoopCity);
for (iJ = 0; iJ < iTradeRoutes; iJ++)
{
if (iValue > paiBestValue[iJ])
{
for (iK = (iTradeRoutes - 1); iK > iJ; iK--)
{
paiBestValue[iK] = paiBestValue[(iK - 1)];
m_paTradeCities[iK] = m_paTradeCities[(iK - 1)];
}
paiBestValue[iJ] = iValue;
m_paTradeCities[iJ] = pLoopCity->getIDInfo();
break;
}
}
}
}
}
}
}
}
}
iTradeProfit = 0;
for (iI = 0; iI < GC.getDefineINT("MAX_TRADE_ROUTES"); iI++)
{
pLoopCity = getTradeCity(iI);
if (pLoopCity != NULL)
{
pLoopCity->setTradeRoute(getOwnerINLINE(), true);
iTradeProfit += calculateTradeProfit(pLoopCity);
}
}
for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
{
setTradeYield(((YieldTypes)iI), calculateTradeYield(((YieldTypes)iI), iTradeProfit)); // XXX could take this out if handled when CvPlotGroup changes...
}
SAFE_DELETE_ARRAY(paiBestValue);
}
oder hier?
PHP-Code:
int CvCity::getBaseTradeProfit(CvCity* pCity) const
{
int iProfit = std::min(pCity->getPopulation() * GC.getDefineINT("THEIR_POPULATION_TRADE_PERCENT"), plotDistance(getX_INLINE(), getY_INLINE(), pCity->getX_INLINE(), pCity->getY_INLINE()) * GC.getWorldInfo(GC.getMapINLINE().getWorldSize()).getTradeProfitPercent());
iProfit *= GC.getDefineINT("TRADE_PROFIT_PERCENT");
iProfit /= 100;
iProfit = std::max(100, iProfit);
return iProfit;
}
int CvCity::calculateTradeProfit(CvCity* pCity) const
{
int iProfit = getBaseTradeProfit(pCity);
iProfit *= totalTradeModifier(pCity);
iProfit /= 10000;
return iProfit;
}
int CvCity::calculateTradeYield(YieldTypes eIndex, int iTradeProfit) const
{
if ((iTradeProfit > 0) && (GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex) > 0))
{
return ((iTradeProfit * GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex)) / 100);
}
else
{
return 0;
}
}
void CvCity::setTradeYield(YieldTypes eIndex, int iNewValue)
{
int iOldValue;
FAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");
FAssertMsg(eIndex < NUM_YIELD_TYPES, "eIndex expected to be < NUM_YIELD_TYPES");
iOldValue = getTradeYield(eIndex);
if (iOldValue != iNewValue)
{
m_aiTradeYield[eIndex] = iNewValue;
FAssert(getTradeYield(eIndex) >= 0);
changeBaseYieldRate(eIndex, (iNewValue - iOldValue));
}
}