def canBuild(self,argsList):
iX, iY, iBuild, iPlayer = argsList
pPlot = CyMap().plot(iX, iY)
pPlayer = gc.getPlayer(iPlayer)
iImprovement = pPlot.getImprovementType()
iImprovementNew = gc.getBuildInfo(iBuild).getImprovement()
iBonus = pPlot.getBonusType(pPlot.getTeam())
#I don't want mana nodes blocked by farms, mines, etc
if iBuild == gc.getInfoTypeForString('BUILD_GRAVEYARD'):
if pPlayer.getStateReligion() != gc.getInfoTypeForString('RELIGION_ETERNAL_CABAL'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_FARM'):
if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_FALLOW')):
return 0
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_GRIGORI'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_HOMESTEAD'):
if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_GRIGORI'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_CITADEL_OF_LIGHT'):
if pPlayer.getStateReligion() != gc.getInfoTypeForString('RELIGION_THE_EMPYREAN'):
return 0
if iImprovement != gc.getInfoTypeForString('IMPROVEMENT_CITADEL'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_LUMBERMILL'):
if pPlayer.getStateReligion() == gc.getInfoTypeForString('RELIGION_FELLOWSHIP_OF_LEAVES'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_REMOVE_FOREST'):
if pPlayer.getStateReligion() == gc.getInfoTypeForString('RELIGION_FELLOWSHIP_OF_LEAVES'):
if iImprovement != gc.getInfoTypeForString('IMPROVEMENT_SMOKE'):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ICE'):
if gc.getGame().getProjectCreatedCount(gc.getInfoTypeForString('PROJECT_THE_DRAW')) > 0:
iAuricPlayer = cf.getLeader(gc.getInfoTypeForString('LEADER_AURIC'))
if iAuricPlayer != -1:
pAuricPlayer = gc.getPlayer(iAuricPlayer)
if pAuricPlayer.getUnitClassCount(gc.getInfoTypeForString('UNITCLASS_AURIC')) > 0:
if gc.getTeam(pPlayer.getTeam()).isAtWar(pAuricPlayer.getTeam()):
return 0
if iImprovementNew > -1:
if iImprovement == iImprovementNew:
return 0
if iBonus != -1:
if gc.getBonusInfo(iBonus).isMana():
iBonusNew = gc.getImprovementInfo(iImprovementNew).getBonusConvert()
if iBonusNew == -1:
return 0
if pPlot.isOwned():
if pPlot.getTeam() == pPlayer.getTeam():
if iImprovement != -1:
if iImprovement == gc.getImprovementInfo(iImprovementNew).getImprovementPillage():
return 1
if pPlot.isPeak():
if iBuild in [gc.getInfoTypeForString('BUILD_MINE'), gc.getInfoTypeForString('BUILD_QUARRY')]:
if iImprovement == -1:
if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_LABOR')) == gc.getInfoTypeForString('CIVIC_ARETE'):
return 1
if iBonus > -1:
if gc.getImprovementInfo(iImprovementNew).isImprovementBonusTrade(iBonus):
return 1
return -1
if pPlayer.isFullMember(gc.getInfoTypeForString('DIPLOVOTE_UNDERCOUNCIL')):
if iBuild == gc.getInfoTypeForString('BUILD_MANA_SUN'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SUN_MANA')):
return 0
elif pPlayer.isFullMember(gc.getInfoTypeForString('DIPLOVOTE_OVERCOUNCIL')):
if iBuild == gc.getInfoTypeForString('BUILD_MANA_CHAOS'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_CHAOS_MANA')):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_MANA_DEATH'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DEATH_MANA')):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_MANA_DIMENSIONAL'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DIMENSIONAL_MANA')):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ENTROPY'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_ENTROPY_MANA')):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_MANA_SHADOW'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SHADOW_MANA')):
return 0
elif iBuild == gc.getInfoTypeForString('BUILD_PLANTATION'):
if iBonus == gc.getInfoTypeForString('BONUS_DESERT_ROSE'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DESERT_ROSE')):
return 0
elif iBonus == gc.getInfoTypeForString('BONUS_GULAGARM'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_GULAGARM')):
return 0
elif iBonus == gc.getInfoTypeForString('BONUS_RAZORWEED'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_RAZORWEED')):
return 0
elif iBonus == gc.getInfoTypeForString('BONUS_SHEUT_STONE'):
if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SHEUT_STONE')):
return 0
if not pPlayer.isHuman():
iCiv = pPlayer.getCivilizationType()
if iCiv in [gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'), gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR')]:
if iBuild in [gc.getInfoTypeForString('BUILD_REMOVE_FOREST'), gc.getInfoTypeForString('BUILD_LUMBERMILL')]:
return 0
elif iCiv == gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
if iBuild == gc.getInfoTypeForString('BUILD_MANA_LIFE'):
if pPlayer.getArcaneTowerVictoryFlag() != 1:
return 0
elif iCiv == gc.getInfoTypeForString('CIVILIZATION_MERCURIANS'):
if iBuild in [gc.getInfoTypeForString('BUILD_MANA_CHAOS'), gc.getInfoTypeForString('BUILD_MANA_DEATH'), gc.getInfoTypeForString('BUILD_MANA_DIMENSIONAL'), gc.getInfoTypeForString('BUILD_MANA_ENTROPY')]:
if pPlayer.getArcaneTowerVictoryFlag() != 3:
return 0
return -1# Returning -1 means ignore; 0 means Build cannot be performed; 1 or greater means it can