Cybah
Emperor
- Joined
- Jun 22, 2007
- Messages
- 1,481
SDK (You need this new code, otherwise BuildingClassNeededs in CIV4BuildingInfos.xml won't work correctly):
CvCity.cpp:
Python:
CvEventManager.py:
CvCity.cpp:
PHP:
bool CvCity::canConstruct(BuildingTypes eBuilding, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
{
// Cybah Start
// BuildingTypes ePrereqBuilding;
// Cybah End
...
if (bRequiresBonus && bNeedsBonus)
{
return false;
}
// Cybah Start
//for (iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)
//{
//if (GC.getBuildingInfo(eBuilding).isBuildingClassNeededInCity(iI))
//{
//ePrereqBuilding = ((BuildingTypes)(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(iI)));
//if (ePrereqBuilding != NO_BUILDING)
//{
//if (0 == getNumBuilding(ePrereqBuilding) /* && (bContinue || (getFirstBuildingOrder(ePrereqBuilding) == -1))*/)
//{
//return false;
//}
//}
//}
//}
BuildingClassTypes eBuildingClass = (BuildingClassTypes)(GC.getBuildingInfo(eBuilding).getBuildingClassType());
for (int iP = 0; iP < GC.getNumBuildingInfos(); iP++)
{
int iLoopBuildingClass = GC.getBuildingInfo((BuildingTypes)iP).getBuildingClassType();
if (iLoopBuildingClass == eBuildingClass && getNumBuilding((BuildingTypes)iP) > 0)
{
return false;
}
}
int iPrereqBuildings = 0;
int iHasPrereqBuildings = 0;
for (iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)
{
if (GC.getBuildingInfo(eBuilding).isBuildingClassNeededInCity(iI))
{
iPrereqBuildings += 1;
int iPrereqBuildingClass = ((BuildingClassTypes)iI);
int iJ;
for (iJ = 0; iJ < GC.getNumBuildingInfos(); iJ++)
{
int iBuildingClass = GC.getBuildingInfo((BuildingTypes)iJ).getBuildingClassType();
if (iPrereqBuildingClass == iBuildingClass && getNumBuilding((BuildingTypes)iJ) > 0)
{
iHasPrereqBuildings += 1;
}
}
}
}
if (iPrereqBuildings != iHasPrereqBuildings)
{
return false;
}
// Cybah End
Python:
CvEventManager.py:
PHP:
def onBuildingBuilt(self, argsList):
...
# Creative Trait Start -----------------------------------------------------------------------------------------------
pPlayer = gc.getPlayer(pCity.plot().getOwner())
iTraitCre = gc.getInfoTypeForString("TRAIT_CREATIVE")
if pPlayer.hasTrait(iTraitCre):
l_UniqueBuildings = []
for iCiv in xrange(gc.getNumCivilizationInfos()):
for iBuilding in xrange(gc.getNumBuildingClassInfos()):
iUniqueBuilding = gc.getCivilizationInfo(iCiv).getCivilizationBuildings(iBuilding);
iDefaultBuilding = gc.getBuildingClassInfo(iBuilding).getDefaultBuildingIndex();
if (iDefaultBuilding > -1 and iUniqueBuilding > -1 and iDefaultBuilding != iUniqueBuilding):
if iBuildingType == iDefaultBuilding:
l_UniqueBuildings.append(iUniqueBuilding)
if len(l_UniqueBuildings) >= 1:
## 25% chance
iForeignUBChance = CyGame().getSorenRandNum(4, "Chance")
if iForeignUBChance == 0:
chance = CyGame().getSorenRandNum(len(l_UniqueBuildings), "Random for UniqueBuildings")
pCity.setNumRealBuilding(iBuildingType,0)
pCity.setNumRealBuilding(l_UniqueBuildings[chance],1)
# Creative Trait End -----------------------------------------------------------------------------------------------