Vielen Dank.
Die Fehlermeldng betrifft diese Stelle:
Code:
BuildingTypes CvCityAI::AI_bestBuildingThreshold(int iFocusFlags, int iMaxTurns, int iMinThreshold, bool bAsync, AdvisorTypes eIgnoreAdvisor)
{
BuildingTypes eLoopBuilding;
BuildingTypes eBestBuilding;
bool bAreaAlone;
int iProductionRank;
int iTurnsLeft;
int iValue;
int iTempValue;
int iBestValue;
int iI, iJ;
bAreaAlone = GET_PLAYER(getOwnerINLINE()).AI_isAreaAlone(area());
iProductionRank = findYieldRateRank(YIELD_PRODUCTION);
iBestValue = 0;
eBestBuilding = NO_BUILDING;
if (iFocusFlags & BUILDINGFOCUS_CAPITAL)
{
int iBestTurnsLeft = iMaxTurns > 0 ? iMaxTurns : MAX_INT;
for (iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)
{
eLoopBuilding = ((BuildingTypes)(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(iI)));
if (NO_BUILDING != eLoopBuilding)
{
CvBuildingInfo& kBuilding = GC.getBuildingInfo(eLoopBuilding);
if (kBuilding.isCapital())
{
if (canConstruct(eLoopBuilding))
{
int iTurnsLeft = getProductionTurnsLeft(eLoopBuilding, 0);
if (iTurnsLeft <= iBestTurnsLeft)
{
eBestBuilding = eLoopBuilding;
iBestTurnsLeft = iTurnsLeft;
}
}
}
}
}
return eBestBuilding;
}
for (iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)
{
if (!(GET_PLAYER(getOwnerINLINE()).isBuildingClassMaxedOut(((BuildingClassTypes)iI), GC.getBuildingClassInfo((BuildingClassTypes)iI).getExtraPlayerInstances())))
{
eLoopBuilding = ((BuildingTypes)(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(iI)));
if ((eLoopBuilding != NO_BUILDING) && (getNumBuilding(eLoopBuilding) < GC.getCITY_MAX_NUM_BUILDINGS())
&& (!isProductionAutomated() || !(isWorldWonderClass((BuildingClassTypes)iI) || isNationalWonderClass((BuildingClassTypes)iI))))
{
//don't build wonders?
/************************************************************************************************/
/* BETTER_BTS_AI_MOD 05/08/09 jdog5000 */
/* */
/* City AI */
/************************************************************************************************/
// BBAI TODO: Temp testing, remove once centralized building is working
bool bWonderOk = false;
//if( isHuman() || getOwner()%2 == 1 )
//{
bWonderOk = ((iFocusFlags == 0) || (iFocusFlags & BUILDINGFOCUS_WONDEROK) || (iFocusFlags & BUILDINGFOCUS_WORLDWONDER));
//}
if( bWonderOk ||
/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/
!(isWorldWonderClass((BuildingClassTypes)iI) ||
isTeamWonderClass((BuildingClassTypes)iI) ||
isNationalWonderClass((BuildingClassTypes)iI) ||
isLimitedWonderClass((BuildingClassTypes)iI)))
{
if ((eIgnoreAdvisor == NO_ADVISOR) || (GC.getBuildingInfo(eLoopBuilding).getAdvisorType() != eIgnoreAdvisor))
{
if (canConstruct(eLoopBuilding))
{
iValue = AI_buildingValueThreshold(eLoopBuilding, iFocusFlags, iMinThreshold);
if (GC.getBuildingInfo(eLoopBuilding).getFreeBuildingClass() != NO_BUILDINGCLASS)
{
BuildingTypes eFreeBuilding = (BuildingTypes)GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(GC.getBuildingInfo(eLoopBuilding).getFreeBuildingClass());
if (NO_BUILDING != eFreeBuilding)
{
iValue += (AI_buildingValue(eFreeBuilding, iFocusFlags) * (GET_PLAYER(getOwnerINLINE()).getNumCities() - GET_PLAYER(getOwnerINLINE()).getBuildingClassCountPlusMaking((BuildingClassTypes)GC.getBuildingInfo(eLoopBuilding).getFreeBuildingClass())));
}
}
if (isProductionAutomated())
{
for (iJ = 0; iJ < GC.getNumBuildingClassInfos(); iJ++)
{
if (GC.getBuildingInfo(eLoopBuilding).getPrereqNumOfBuildingClass(iJ) > 0)
{
iValue = 0;
break;
}
}
}
if (iValue > 0)
{
iTurnsLeft = getProductionTurnsLeft(eLoopBuilding, 0);
if (isWorldWonderClass((BuildingClassTypes)iI))
{
if (iProductionRank <= std::min(3, ((GET_PLAYER(getOwnerINLINE()).getNumCities() + 2) / 3)))
{
if (bAsync)
{
iTempValue = GC.getASyncRand().get(GC.getLeaderHeadInfo(getPersonalityType()).getWonderConstructRand(), "Wonder Construction Rand ASYNC");
}
else
{
iTempValue = GC.getGameINLINE().getSorenRandNum(GC.getLeaderHeadInfo(getPersonalityType()).getWonderConstructRand(), "Wonder Construction Rand");
}
if (bAreaAlone)
{
iTempValue *= 2;
}
iValue += iTempValue;
}
}
if (bAsync)
{
iValue *= (GC.getASyncRand().get(25, "AI Best Building ASYNC") + 100);
iValue /= 100;
}
else
{
iValue *= (GC.getGameINLINE().getSorenRandNum(25, "AI Best Building") + 100);
iValue /= 100;
}
iValue += getBuildingProduction(eLoopBuilding);
bool bValid = ((iMaxTurns <= 0) ? true : false);
if (!bValid)
{
bValid = (iTurnsLeft <= GC.getGameINLINE().AI_turnsPercent(iMaxTurns, GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getConstructPercent()));
}
if (!bValid)
{
for (int iHurry = 0; iHurry < GC.getNumHurryInfos(); ++iHurry)
{
if (canHurryBuilding((HurryTypes)iHurry, eLoopBuilding, true))
{
if (AI_getHappyFromHurry((HurryTypes)iHurry, eLoopBuilding, true) > 0)
{
bValid = true;
break;
}
}
}
}
if (bValid)
{
FAssert((MAX_INT / 1000) > iValue);
iValue *= 1000;
iValue /= std::max(1, (iTurnsLeft + 3));
iValue = std::max(1, iValue);
if (iValue > iBestValue)
{
iBestValue = iValue;
eBestBuilding = eLoopBuilding;
}
}
}
}
}
}
}
}
}
return eBestBuilding;
}
Leider verstehe ich es nicht ganz, was wohl auch damit zusammenhängt, dass ohne Debug-Modus keine Variablen enthalten waren. Ich sehe keine Definition von MAX_INT - ist das eine globale Variable?