Cybah
Emperor
- Joined
- Jun 22, 2007
- Messages
- 1,481
Hopefully not hardcoded, it should be in SDK. I guess it has something to do with this code
or this code
Can anyone help me?
PHP:
// Returns one of the upgrades...
UnitTypes CvCity::allUpgradesAvailable(UnitTypes eUnit, int iUpgradeCount) const
{
UnitTypes eUpgradeUnit;
UnitTypes eTempUnit;
UnitTypes eLoopUnit;
bool bUpgradeFound;
bool bUpgradeAvailable;
bool bUpgradeUnavailable;
int iI;
FAssertMsg(eUnit != NO_UNIT, "eUnit is expected to be assigned (not NO_UNIT)");
if (iUpgradeCount > GC.getNumUnitClassInfos())
{
return NO_UNIT;
}
eUpgradeUnit = NO_UNIT;
bUpgradeFound = false;
bUpgradeAvailable = false;
bUpgradeUnavailable = false;
for (iI = 0; iI < GC.getNumUnitClassInfos(); iI++)
{
if (GC.getUnitInfo(eUnit).getUpgradeUnitClass(iI))
{
eLoopUnit = (UnitTypes)GC.getCivilizationInfo(getCivilizationType()).getCivilizationUnits(iI);
if (eLoopUnit != NO_UNIT)
{
bUpgradeFound = true;
eTempUnit = allUpgradesAvailable(eLoopUnit, (iUpgradeCount + 1));
if (eTempUnit != NO_UNIT)
{
eUpgradeUnit = eTempUnit;
bUpgradeAvailable = true;
}
else
{
bUpgradeUnavailable = true;
}
}
}
}
if (iUpgradeCount > 0)
{
if (bUpgradeFound && bUpgradeAvailable)
{
FAssertMsg(eUpgradeUnit != NO_UNIT, "eUpgradeUnit is expected to be assigned (not NO_UNIT)");
return eUpgradeUnit;
}
if (canTrain(eUnit, false, false, false, true))
{
return eUnit;
}
}
else
{
if (bUpgradeFound && !bUpgradeUnavailable)
{
return eUpgradeUnit;
}
}
return NO_UNIT;
}
or this code
PHP:
bool CvCity::canTrain(UnitTypes eUnit, bool bContinue, bool bTestVisible, bool bIgnoreCost, bool bIgnoreUpgrades) const
{
if (eUnit == NO_UNIT)
{
return false;
}
if(GC.getUSE_CAN_TRAIN_CALLBACK())
{
CyCity* pyCity = new CyCity((CvCity*)this);
CyArgsList argsList;
argsList.add(gDLL->getPythonIFace()->makePythonObject(pyCity)); // pass in city class
argsList.add(eUnit);
argsList.add(bContinue);
argsList.add(bTestVisible);
argsList.add(bIgnoreCost);
argsList.add(bIgnoreUpgrades);
long lResult=0;
gDLL->getPythonIFace()->callFunction(PYGameModule, "canTrain", argsList.makeFunctionArgs(), &lResult);
delete pyCity; // python fxn must not hold on to this pointer
if (lResult == 1)
{
return true;
}
}
if (!(GET_PLAYER(getOwnerINLINE()).canTrain(eUnit, bContinue, bTestVisible, bIgnoreCost)))
{
return false;
}
if (!bIgnoreUpgrades)
{
if (allUpgradesAvailable(eUnit) != NO_UNIT)
{
return false;
}
}
if (!plot()->canTrain(eUnit, bContinue, bTestVisible))
{
return false;
}
if(GC.getUSE_CANNOT_TRAIN_CALLBACK())
{
CyCity *pyCity = new CyCity((CvCity*)this);
CyArgsList argsList2; // XXX
argsList2.add(gDLL->getPythonIFace()->makePythonObject(pyCity)); // pass in city class
argsList2.add(eUnit);
argsList2.add(bContinue);
argsList2.add(bTestVisible);
argsList2.add(bIgnoreCost);
argsList2.add(bIgnoreUpgrades);
long lResult=0;
gDLL->getPythonIFace()->callFunction(PYGameModule, "cannotTrain", argsList2.makeFunctionArgs(), &lResult);
delete pyCity; // python fxn must not hold on to this pointer
if (lResult == 1)
{
return false;
}
}
return true;
}
Can anyone help me?