def cannotTrain(argsList):
pCity = argsList[0]
eUnit = argsList[1]
bContinue = argsList[2]
bTestVisible = argsList[3]
ePlayer = pCity.getOwner()
pPlayer = gc.getPlayer(ePlayer)
if not pPlayer.isHuman() and pCity.isCoastal(10):
#Default number of ships required (default = number of active civs in game)
#with a minimum value of 4 to make sure the AI can build enough ships in small
#games
iShipsRequired = min(4,CyGame().getNumCivPlayers())
if eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_WORKBOAT'):
iWorkboat = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_WORKBOAT')
iShipsRequired = min(3,pPlayer.getNumCities())
iShipsRequired -= pPlayer.getUnitClassCount(iWorkboat)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_GALLEY'):
iGalley = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEY')
iShipsRequired -= pPlayer.getUnitClassCount(iGalley)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_TRIREME'):
iGalley = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEY')
iTrireme = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_TRIREME')
iShipsRequired *= 2
iShipsRequired -= pPlayer.getUnitClassCount(iGalley)
iShipsRequired -= pPlayer.getUnitClassCount(iTrireme)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_CARAVEL'):
iCaravel = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_CARAVEL')
iShipsRequired = max(3,int(CyGame().getNumCivPlayers() / 2))
iShipsRequired -= pPlayer.getUnitClassCount(iCaravel)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_GALLEON'):
iGalleon = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEON')
if pPlayer.getUnitClassCount(iGalleon) > iShipsRequired:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_PRIVATEER'):
iPrivateer = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_PRIVATEER')
iShipsRequired *= 2
iShipsRequired -= pPlayer.getUnitClassCount(iPrivateer)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_FRIGATE'):
iShipOfTheLine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SHIP_OF_THE_LINE')
iFrigate = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_FRIGATE')
iShipsRequired = pPlayer.getNumCities() * 2
iShipsRequired -= pPlayer.getUnitClassCount(iShipOfTheLine)
iShipsRequired -= pPlayer.getUnitClassCount(iFrigate)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_SHIP_OF_THE_LINE'):
iShipsRequired = pPlayer.getNumCities()
iIronclad = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_IRONCLAD')
iShipOfTheLine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SHIP_OF_THE_LINE')
iShipsRequired -= pPlayer.getUnitClassCount(iIronclad)
iShipsRequired -= pPlayer.getUnitClassCount(iShipOfTheLine)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_IRONCLAD'):
iIronclad = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_IRONCLAD')
iShipOfTheLine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SHIP_OF_THE_LINE')
iShipsRequired -= pPlayer.getUnitClassCount(iIronclad)
iShipsRequired -= pPlayer.getUnitClassCount(iShipOfTheLine)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_TRANSPORT'):
iTransport = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_TRANSPORT')
iGalleon = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEON')
iShipsRequired -= pPlayer.getUnitClassCount(iTransport)
iShipsRequired -= pPlayer.getUnitClassCount(iGalleon)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_DESTROYER'):
iDestroyer = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_DESTROYER')
iShipOfTheLine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SHIP_OF_THE_LINE')
iFrigate = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_FRIGATE')
iIronclad = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_IRONCLAD')
iShipsRequired = pPlayer.getNumCities() * 2
iShipsRequired -= pPlayer.getUnitClassCount(iShipOfTheLine)
iShipsRequired -= pPlayer.getUnitClassCount(iFrigate)
iShipsRequired -= pPlayer.getUnitClassCount(iIronclad)
iShipsRequired -= pPlayer.getUnitClassCount(iDestroyer)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_STEALTH_DESTROYER'):
iStealthDestroyer = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_STEALTH_DESTROYER')
iDestroyer = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_DESTROYER')
iShipOfTheLine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SHIP_OF_THE_LINE')
iFrigate = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_FRIGATE')
iIronclad = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_IRONCLAD')
iShipsRequired = pPlayer.getNumCities() * 2
iShipsRequired -= pPlayer.getUnitClassCount(iShipOfTheLine)
iShipsRequired -= pPlayer.getUnitClassCount(iFrigate)
iShipsRequired -= pPlayer.getUnitClassCount(iIronclad)
iShipsRequired -= pPlayer.getUnitClassCount(iDestroyer)
iShipsRequired -= pPlayer.getUnitClassCount(iStealthDestroyer)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_BATTLESHIP'):
iBattleship = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_BATTLESHIP')
iShipsRequired -= pPlayer.getUnitClassCount(iBattleship)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_MISSILE_CRUISER'):
iMissileCruiser = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_MISSILE_CRUISER')
iShipsRequired -= pPlayer.getUnitClassCount(iMissileCruiser)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_SUBMARINE'):
iSubmarine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_SUBMARINE')
iShipsRequired -= pPlayer.getUnitClassCount(iSubmarine)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_ATTACK_SUBMARINE'):
iAttackSubmarine = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_ATTACK_SUBMARINE')
iShipsRequired -= pPlayer.getUnitClassCount(iAttackSubmarine)
if iShipsRequired < 1:
return True
elif eUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_CARRIER'):
iCarrier = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_CARRIER')
iBattleship = CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_BATTLESHIP')
iShipsRequired = pPlayer.getUnitClassCount(iBattleship)
iShipsRequired -= pPlayer.getUnitClassCount(iCarrier)
if iShipsRequired < 1:
return True
return gameUtils().cannotTrain(argsList)