PHP-Code:
def AI_chooseProduction(self,argsList):
pCity = argsList[0]
ePlayer = pCity.getOwner()
pPlayer = gc.getPlayer(ePlayer)
player = PyPlayer(ePlayer)
civtype = pPlayer.getCivilizationType()
infoCiv = gc.getCivilizationInfo(civtype)
eTeam = gc.getTeam(pPlayer.getTeam())
pPlot = pCity.plot()
#Barbarian Cities have their own Function
if pCity.isBarbarian():
if (cf.BarbCityProduction(pCity)==0):
return False
else:
return True
#Automated Cities use another Function
if pPlayer.isHuman():
return False
#Choose Nothing in Disorder (can lead to weird results)
if pCity.isDisorder():
return False
#Var initialization
#Used for City Specialization
iPatrolSpec=0
iDefenseSpec=0
#Used to decide if the Best Item is good enough
diffmod = 0.8
iBuildingthres=0
iBuildingthres+=1000
iBuildingthres+=-13*pCity.getCurrentProductionDifference(False,False)
iBuildingthres=(iBuildingthres)*diffmod
iBuildingthres=-pPlayer.countGroupFlagUnits(7)*50
#make sure no item is listed twice!
#Use BuildingClass if Possible
sProd = ['PROJECT_BLOOD_OF_THE_PHOENIX','PROJECT_GENESIS','PROJECT_RITES_OF_OGHMA','PROJECT_NATURES_REVOLT']
iProdType=[3,3,3,3]
sProd = sProd +['PROJECT_ELEGY_OF_THE_SHEAIM','PROJECT_HALLOWING_OF_THE_ELOHIM','PROJECT_BIRTHRIGHT_REGAINED','PROJECT_PURGE_THE_UNFAITHFUL']
iProdType=iProdType+[3,3,3,3]
sProd = sProd +['PROJECT_SAMHAIN','PROJECT_THE_WHITE_HAND','PROJECT_THE_DEEPENING','PROJECT_STIR_FROM_SLUMBER']
iProdType=iProdType+[3,3,3,3]
sProd = sProd +['PROJECT_THE_DRAW','PROJECT_ASCENSION','PROJECT_PACT_OF_THE_NILHORN']
iProdType=iProdType+[3,3,3]
sProd = sProd +['UNITCLASS_SETTLER','UNITCLASS_WORKER','UNITCLASS_WARRIOR','UNITCLASS_WORKBOAT','UNITCLASS_SCOUT']
iProdType=iProdType+[2,2,2,2,2]
sProd = sProd + ['UNITCLASS_ADEPT','UNITCLASS_AXEMAN','UNITCLASS_HUNTER','UNITCLASS_ARCHER','UNITCLASS_HORSEMAN','UNITCLASS_HORSE_ARCHER']
iProdType=iProdType+[2,2,2,2,2,2]
sProd = sProd + ['UNITCLASS_FREAK','UNITCLASS_CATAPULT','UNITCLASS_CANNON','UNITCLASS_MONK','UNITCLASS_GRIGORI_MEDIC']
iProdType=iProdType+[2,2,2,2,2]
sProd = sProd + ['UNITCLASS_PRIEST_OF_THE_VEIL','UNITCLASS_PRIEST_OF_THE_ORDER','UNITCLASS_PRIEST_OF_KILMORPH','UNITCLASS_PRIEST_OF_LEAVES','UNITCLASS_PRIEST_OF_THE_EMPYREAN','UNITCLASS_PRIEST_OF_THE_OVERLORDS']
iProdType=iProdType+[2,2,2,2,2,2]
sProd = sProd + ['UNITCLASS_DISCIPLE_THE_ASHEN_VEIL','UNITCLASS_DISCIPLE_THE_ORDER','UNITCLASS_DISCIPLE_RUNES_OF_KILMORPH','UNITCLASS_DISCIPLE_FELLOWSHIP_OF_LEAVES','UNITCLASS_DISCIPLE_EMPYREAN','UNITCLASS_DISCIPLE_OCTOPUS_OVERLORDS']
iProdType=iProdType+[2,2,2,2,2,2]
sProd = sProd + ['UNITCLASS_CHAMPION','UNITCLASS_CHARIOT','UNITCLASS_RANGER','UNITCLASS_LONGBOWMAN','UNITCLASS_ASSASSIN']
iProdType=iProdType+[2,2,2,2,2]
sProd = sProd + ['UNITCLASS_GOVANNON','UNITCLASS_LOKI','UNITCLASS_DONAL','UNITCLASS_RANTINE','UNITCLASS_LOSHA']
iProdType=iProdType+[2,2,2,2,2]
sProd = sProd + ['UNITCLASS_GALLEY','UNITCLASS_CARAVEL','UNITCLASS_EXPLORER','UNITCLASS_QUEEN_OF_THE_LINE']
iProdType=iProdType+[2,2,2,2]
sProd = sProd + ['UNITCLASS_TRIREME','UNITCLASS_FRIGATE','UNITCLASS_MAN_O_WAR']
iProdType=iProdType+[2,2,2]
sProd = sProd + ['BUILDINGCLASS_ALCHEMY_LAB','BUILDINGCLASS_AQUEDUCT','BUILDINGCLASS_TRAINING_YARD','BUILDINGCLASS_BASILICA','BUILDINGCLASS_BREWERY']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_CARNIVAL','BUILDINGCLASS_COURTHOUSE','BUILDINGCLASS_DUNGEON','BUILDINGCLASS_ELDER_COUNCIL','BUILDINGCLASS_ARCHERY_RANGE','BUILDINGCLASS_FORGE','BUILDINGCLASS_GAMBLING_HOUSE','BUILDINGCLASS_GRANARY']
iProdType=iProdType+[1,1,1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_GROVE','BUILDINGCLASS_HARBOR','BUILDINGCLASS_HERBALIST','BUILDINGCLASS_HUNTING_LODGE','BUILDINGCLASS_INFIRMARY','BUILDINGCLASS_INN','BUILDINGCLASS_LIBRARY','BUILDINGCLASS_LIGHTHOUSE','BUILDINGCLASS_MACHINISTS_SHOP']
iProdType=iProdType+[1,1,1,1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_MAGE_GUILD','BUILDINGCLASS_MARKET','BUILDINGCLASS_MONEYCHANGER','BUILDINGCLASS_MONUMENT','BUILDINGCLASS_PAGAN_TEMPLE','BUILDINGCLASS_PALISADE']
iProdType=iProdType+[1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_PUBLIC_BATHS','BUILDINGCLASS_SIEGE_WORKSHOP','BUILDINGCLASS_SMOKEHOUSE','BUILDINGCLASS_STABLE','BUILDINGCLASS_TAX_OFFICE','BUILDINGCLASS_TAVERN']
iProdType=iProdType+[1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_TEMPLE_OF_KILMORPH','BUILDINGCLASS_TEMPLE_OF_LEAVES','BUILDINGCLASS_TEMPLE_OF_THE_EMPYREAN','BUILDINGCLASS_TEMPLE_OF_THE_OVERLORDS','BUILDINGCLASS_TEMPLE_OF_THE_VEIL','BUILDINGCLASS_TEMPLE_OF_THE_ORDER']
iProdType=iProdType+[1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_THEATRE','BUILDINGCLASS_WALLS']
iProdType=iProdType+[1,1]
sProd = sProd + ['BUILDINGCLASS_TOWER_OF_ALTERATION','BUILDINGCLASS_TOWER_OF_DIVINATION','BUILDINGCLASS_TOWER_OF_NECROMANCY','BUILDINGCLASS_TOWER_OF_THE_ELEMENTS','BUILDINGCLASS_TOWER_OF_MASTERY','BUILDINGCLASS_ALTAR_OF_THE_LUONNOTAR_FINAL']
iProdType=iProdType+[1,1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_GUILD_OF_THE_NINE','BUILDINGCLASS_HERON_THRONE','BUILDINGCLASS_CITY_OF_A_THOUSAND_SLUMS','BUILDINGCLASS_THEATRE_OF_DREAMS','BUILDINGCLASS_PILLAR_OF_CHAINS']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_GUILD_OF_HAMMERS','BUILDINGCLASS_GRAND_MENAGERIE','BUILDINGCLASS_MERCURIAN_GATE','BUILDINGCLASS_CELESTIAL_COMPASS','BUILDINGCLASS_RIDE_OF_THE_NINE_KINGS']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_MOKKAS_CAULDRON','BUILDINGCLASS_SHRINE_OF_SIRONA','BUILDINGCLASS_EYES_AND_EARS_NETWORK','BUILDINGCLASS_SHRINE_OF_THE_CHAMPION','BUILDINGCLASS_AQUAE_SUCELLUS']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_HALL_OF_KINGS','BUILDINGCLASS_GREAT_LIBRARY','BUILDINGCLASS_GREAT_LIGHTHOUSE','BUILDINGCLASS_PROPHECY_OF_RAGNAROK','BUILDINGCLASS_TEMPLE_OF_TEMPORENCE']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_HEROIC_EPIC','BUILDINGCLASS_NATIONAL_EPIC','BUILDINGCLASS_TOWER_OF_COMPLACENCY','BUILDINGCLASS_TOWER_OF_EYES','BUILDINGCLASS_SYLIVENS_PERFECT_LYRE']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_CROWN_OF_AKHARIEN','BUILDINGCLASS_FORBIDDEN_PALACE','BUILDINGCLASS_CATACOMB_LIBRALUS','BUILDINGCLASS_FORM_OF_THE_TITAN','BUILDINGCLASS_MINES_OF_GALDUR']
iProdType=iProdType+[1,1,1,1,1]
sProd = sProd + ['BUILDINGCLASS_BAZAAR_OF_MAMMON']
iProdType=iProdType+[1]
sProd = sProd + ['BUILDING_ADULARIA_CHAMBER','BUILDING_ADVENTURERS_GUILD','BUILDING_BLASTING_WORKSHOP','BUILDING_BREEDING_PIT','BUILDING_CAVE_OF_ANCESTORS','BUILDING_CHANCEL_OF_GUARDIANS','BUILDING_CITADEL_OF_LIGHT','BUILDING_COMMAND_POST']
iProdType=iProdType+[0,0,0,0,0,0,0,0]
sProd = sProd + ['BUILDING_HALL_OF_MIRRORS']
iProdType=iProdType+[0]
sProd = sProd + ['BUILDING_JEWELER','BUILDING_PALLENS_ENGINE','BUILDING_PLANAR_GATE','BUILDING_RELIQUARY']
iProdType=iProdType+[0,0,0,0]
sProd = sProd + ['BUILDING_SMUGGLERS_PORT','BUILDING_TAILOR','BUILDING_WARRENS','BUILDING_MONUMENT']
iProdType=iProdType+[0,0,0,0]
iValue=[0]
for i in range (len(sProd)):
iValue+=[0]
#City needs more Protection? (values 19001-20000)
if (pCity.AI_neededPermDefense(0)>0):
iValue[sProd.index('UNITCLASS_AXEMAN')]=19500
iValue[sProd.index('UNITCLASS_ARCHER')]=20000
iValue[sProd.index('UNITCLASS_HUNTER')]=19500
iValue[sProd.index('UNITCLASS_WARRIOR')]=19002
if (pCity.AI_neededPermDefense(1)>0):
iValue[sProd.index('UNITCLASS_AXEMAN')]=20000
iValue[sProd.index('UNITCLASS_ARCHER')]=19500
iValue[sProd.index('UNITCLASS_HUNTER')]=20000
iValue[sProd.index('UNITCLASS_WARRIOR')]=19003
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
iValue[sProd.index('UNITCLASS_AXEMAN')]=-20000
usw. ewig viel für Einheiten, Gebäude, Traits, zivspezifische Sachen...
PHP-Code:
infoCiv = gc.getCivilizationInfo(civtype)
iBestBuilding=-1
iBestBuildingValue=0
for i in range(len(sProd)):
if iValue[i]>iBestBuildingValue:
if iValue[i]>iBuildingthres:
if iProdType[i]==0:
if pCity.canConstruct(gc.getInfoTypeForString(sProd[i]),True,False,False):
iBestBuildingValue=iValue[i]
iBestBuilding=i
elif iProdType[i]==1:
iBuilding = infoCiv.getCivilizationBuildings(gc.getInfoTypeForString(sProd[i]))
if iBuilding != -1:
if pCity.canConstruct(iBuilding,True,False,False):
iBestBuildingValue=iValue[i]
iBestBuilding=i
elif iProdType[i]==2:
iUnit = infoCiv.getCivilizationUnits(gc.getInfoTypeForString(sProd[i]))
if iUnit != -1:
if pCity.canTrain(iUnit,True,False):
iBestBuildingValue=iValue[i]
iBestBuilding=i
elif iProdType[i]==3:
if pCity.canCreate(gc.getInfoTypeForString(sProd[i]),True,False):
iBestBuildingValue=iValue[i]
iBestBuilding=i
# if ePlayer==0:
# CyInterface().addMessage(0,true,25,"This is City %s: Our best Building is (%s), Value (%s). Threshold is (%s)!" %(pCity.getName(),sProd[iBestBuilding],iValue[iBestBuilding],iBuildingthres),'',0,'',ColorTypes(11), pPlot.getX(), pPlot.getY(), True,True)
# if pPlayer.isConquestMode():
# CyInterface().addMessage(0,true,25,"This is City %s: Our best Building is (%s), Value (%s). Threshold is (%s)!" %(pCity.getName(),sProd[iBestBuilding],iValue[iBestBuilding],iBuildingthres),'',0,'',ColorTypes(11), pPlot.getX(), pPlot.getY(), True,True)
# if civtype == gc.getInfoTypeForString('CIVILIZATION_AMURITES'):
# CyInterface().addMessage(0,true,25,"This is City %s: Our best Building is (%s), Value (%s). Threshold is (%s)!" %(pCity.getName(),sProd[iBestBuilding],iValue[iBestBuilding],iBuildingthres),'',0,'',ColorTypes(11), pPlot.getX(), pPlot.getY(), True,True)
# if ePlayer==0:
# CyInterface().addMessage(0,true,25,"We need this many Mages: %s !" %(cf.calculateMagesNeeded(ePlayer)),'',0,'',ColorTypes(11), pPlot.getX(), pPlot.getY(), True,True)
if iBestBuilding!=-1:
if iProdType[iBestBuilding]==0:
pCity.pushOrder(OrderTypes.ORDER_CONSTRUCT,gc.getInfoTypeForString(sProd[iBestBuilding]),-1, False, False, False, False)
return 1
elif iProdType[iBestBuilding]==1:
iBuilding = infoCiv.getCivilizationBuildings(gc.getInfoTypeForString(sProd[iBestBuilding]))
pCity.pushOrder(OrderTypes.ORDER_CONSTRUCT,iBuilding,-1, False, False, False, False)
return 1
elif iProdType[iBestBuilding]==2:
iUnit = infoCiv.getCivilizationUnits(gc.getInfoTypeForString(sProd[iBestBuilding]))
pCity.pushOrder(OrderTypes.ORDER_TRAIN,iUnit,-1, False, False, False, False)
return 1
elif iProdType[iBestBuilding]==3:
pCity.pushOrder(OrderTypes.ORDER_CREATE,gc.getInfoTypeForString(sProd[iBestBuilding]),-1, False, False, False, False)
return 1
return False