def getDmgReduceImprovements( self ):
l_sDmgReduceImprovements = [ "CASTLE", "CITADEL", "CITADEL_OF_LIGHT", "FORT", "GOBLIN_FORT", "TOWER", "MARNOK_HILLGIANT_STEADING", "DWARVEN_MINE", "DWARVEN_SETTLEMENT", "DWARVEN_HALL", "DWARVEN_FORTRESS", "GOBLIN_FORT_CLEARED" ]
l_iDmgReduceImprovements = [ gc.getInfoTypeForString( "IMPROVEMENT_" + sDmgReduceImprovements ) for sDmgReduceImprovements in l_sDmgReduceImprovements ]
return l_iDmgReduceImprovements
def getAntiTeleImprovements( self ):
l_sAntiTeleImprovements = [ "BROKEN_SEPULCHER", "BROKEN_SEPULCHER_EXPLORED", "CAGE", "CASTLE", "CITADEL", "CITADEL_OF_LIGHT", "FORT", "GOBLIN_FORT", "GUARDIAN", "RING_OF_CARCER", "TOWER", "MARNOK_HILLGIANT_STEADING", "DWARVEN_MINE", "DWARVEN_SETTLEMENT", "DWARVEN_HALL", "DWARVEN_FORTRESS", "TOWER_OF_EYES", "GOBLIN_FORT_CLEARED" ]
l_iAntiTeleImprovements = [ gc.getInfoTypeForString( "IMPROVEMENT_" + sAntiTeleImprovements ) for sAntiTeleImprovements in l_sAntiTeleImprovements ]
return l_iAntiTeleImprovements
def isHasAntiTelePromotions( self, pUnit ):
l_sAntiTelePromotions = [ "HELD", "AVATAR", "DRAGON" ]
l_iAntiTelePromotions = [ gc.getInfoTypeForString( "PROMOTION_" + sAntiTelePromotions ) for sAntiTelePromotions in l_sAntiTelePromotions ]
for i in range(len(l_iAntiTelePromotions)):
if pUnit.isHasPromotion(l_iAntiTelePromotions[i]) == True:
return True
return False
def getl_iLandTerrainType( self, b_isWater, b_isImpassable ):
l_iLandTerrainType = []
iLenlListElement = gc.getNumTerrainInfos()
for iNumInfos in range(iLenlListElement):
if gc.getTerrainInfo(iNumInfos).isWater() == b_isWater:
if gc.getTerrainInfo(iNumInfos).isImpassable() == b_isImpassable:
l_iLandTerrainType.append(iNumInfos)
return l_iLandTerrainType
def isHasSRPromotion( self, pUnit ):
l_sSRPromotion = [ "AVATAR", "DRAGON", "ELEMENTAL", "GOLEM", "ILLUSION", "PUPPET" ]
l_iSRPromotion = [ gc.getInfoTypeForString( "PROMOTION_" + sSRPromotion ) for sSRPromotion in l_sSRPromotion ]
for i in range(len(l_iSRPromotion)):
if pUnit.isHasPromotion(l_iSRPromotion[i]) == True:
return True
return False
def isSRUnitCombat( self, pUnit ):
l_sSRUnitCombat = [ "ARCHER", "MELEE", "MOUNTED", "RECON", "ADEPT", "ANIMAL", "BEAST", "DISCIPLE" ]
l_iSRUnitCombat = [ gc.getInfoTypeForString( "UNITCOMBAT_" + sSRUnitCombat ) for sSRUnitCombat in l_sSRUnitCombat ]
if pUnit.getUnitCombatType() in l_iSRUnitCombat:
return True
return False
def doSpellChanceZE( self, iChanceNoEvent, iChanceEvent, bEvent, pUnit, iSpell ):
iChance = iChanceEvent
if bEvent == False or bEvent == -1:
iChance = iChanceNoEvent
chance = CyGame().getSorenRandNum( 100, "chance")
if (chance + 1) <= iChance:
pUnit.cast(iSpell)
# #########################################################
# ### Mana Flares: Start ###
# #########################################################
def doFlareAirNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
eTeam = gc.getTeam(pPlayer.getTeam())
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString('EFFECT_SPELL1'),point)
CyAudioGame().Play3DSound("AS3D_SPELL_MAELSTROM",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
i_uctNaval = gc.getInfoTypeForString("UNITCOMBAT_NAVAL")
i_utAirElemental = gc.getInfoTypeForString("UNIT_AIR_ELEMENTAL")
i_utLightningElemental = gc.getInfoTypeForString("UNIT_LIGHTNING_ELEMENTAL")
l_iAntiTeleImprovements = self.getAntiTeleImprovements()
i_ptFairWinds = gc.getInfoTypeForString("PROMOTION_FAIR_WINDS")
i_ptHasted = gc.getInfoTypeForString("PROMOTION_HASTED")
i_stHastedZE = gc.getInfoTypeForString("SPELL_HASTE_ZE")
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_PLAYER_BLUE")
i_DmgType = gc.getInfoTypeForString("DAMAGE_LIGHTNING")
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_AIR")
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
# ### Sammle Gewichtungsplots ###
i_Gewichtung = -1
l_iPlots0 = []
l_iPlots1 = []
l_Gewichtung = [
0,0,0,0,0,
0,1,1,1,0,
0,1,2,1,0,
0,1,1,1,0,
0,0,0,0,0
]
###369
###258
###147
for iXLoop in range(iX - 2, iX + 3, 1):
for iYLoop in range(iY - 2, iY + 3, 1):
i_Gewichtung += 1
pLoopPlot = CyMap().plot(iXLoop, iYLoop)
if pLoopPlot.isNone() == False:
iPlot = iXLoop * 1000 + iYLoop
if ( l_Gewichtung[i_Gewichtung] == 0 ):
l_iPlots0.append( iPlot )
elif ( l_Gewichtung[i_Gewichtung] == 1 ):
l_iPlots1.append( iPlot )
# ### Ring 0 --> Ring 1 --> Plot 2 ###
iRing = -1
while ( iRing < 2 ):
iRing += 1
i_Gewichtung = -1
for iXLoop in range(iX - 2, iX + 3, 1):
for iYLoop in range(iY - 2, iY + 3, 1):
i_Gewichtung += 1
pLoopPlot = CyMap().plot(iXLoop, iYLoop)
if ( l_Gewichtung[i_Gewichtung] == iRing ):
if pLoopPlot.isNone() == False:
if pLoopPlot.isCity() == False:
if not pLoopPlot.getImprovementType() in l_iAntiTeleImprovements:
iNumUnits = pLoopPlot.getNumUnits()
for i_nUnits in range(iNumUnits):
# ### i in range() beginnt mit 0 --> zB i in range(2) --> ergibt 0, dann 1 ###
pUnit = pLoopPlot.getUnit(iNumUnits - (1+i_nUnits))
if self.isHasAntiTelePromotions( pUnit ) == False:
iUnit = gc.getUnitInfo(pUnit.getUnitType())
pPlayer2 = gc.getPlayer(pUnit.getOwner())
iPlayer2 = pPlayer2.getID()
l_MoglicherNeuerPlot = []
for iiXLoop in range(iXLoop - 1, iXLoop + 2, 1):
for iiYLoop in range(iYLoop - 1, iYLoop + 2, 1):
pLoopPlot2 = CyMap().plot(iiXLoop, iiYLoop)
if pLoopPlot2.isVisibleEnemyUnit(iPlayer2) == False:
if (pLoopPlot2.isWater() == pLoopPlot.isWater() and pLoopPlot2.isPeak() == False and pLoopPlot2.isCity() == False):
iLoopPlot2 = iiXLoop * 1000 + iiYLoop
bNeuerPlot = False
if iRing == 0:
if not iLoopPlot2 in l_iPlots0:
if not iLoopPlot2 in l_iPlots1:
bNeuerPlot = True
elif iRing == 1:
if iLoopPlot2 in l_iPlots0:
bNeuerPlot = True
elif iRing == 2:
if iLoopPlot2 in l_iPlots1:
bNeuerPlot = True
if bNeuerPlot == True:
l_MoglicherNeuerPlot.append(pLoopPlot2)
if len(l_MoglicherNeuerPlot) > 0:
iRand = CyGame().getSorenRandNum( len(l_MoglicherNeuerPlot), "Random pPlot")
pLoopPlot2 = l_MoglicherNeuerPlot[iRand]
iiXLoop = pLoopPlot2.getX()
iiYLoop = pLoopPlot2.getY()
pUnit.setXY(iiXLoop, iiYLoop, true, true, true)
szText = localText.getText("TXT_KEY_DOFLAREAIRNODEZE_GAMETXT5",())
### msg: Unit blown away. ### (log only)
CyInterface().addMessage(iPlayer2,True,-1,szText,'',0,'Art/Interface/Buttons/units/air elemental.dds',ColorTypes(i_ctNodeMsg),iiXLoop,iiYLoop,True,True)
if pUnit.getUnitCombatType() == i_uctNaval:
self.doPromotionZE( pPlayer, pUnit, i_ptFairWinds, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop )
if bEvent == True:
chance = CyGame().getSorenRandNum( 4, "chance")
if chance > 0:
pUnit.setHasPromotion(i_ptHasted, true)
self.doSpellChanceZE( 100, 100, bEvent, pUnit, i_stHastedZE )
if pUnit.getUnitType() == i_utAirElemental or pUnit.getUnitType() == i_utLightningElemental:
self.doEmpowerElementalZE( pPlayer, pUnit, bEvent, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop )
pUnit.setHasPromotion(i_ptFairWinds, true)
self.doHealZE( pPlayer, pUnit, -1, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop, bEvent )
if pUnit.getUnitType() != i_utAirElemental and pUnit.getUnitType() != i_utLightningElemental:
i_rDmg = 0 + 2 * iRadius
i_sDmg = iRing * 10
self.doDamageZE( pPlayer, pUnit, i_rDmg, i_sDmg, i_DmgType, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop )
iRand = 100
if bEvent == True:
iRand = 15
chance = CyGame().getSorenRandNum( iRand, "chance")
if chance == 1:
iPromotion = gc.getInfoTypeForString("PROMOTION_LIGHTNING_RESISTANCE")
self.doPromotionZE( pPlayer, pUnit, iPromotion, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop )
elif chance == 2:
iPromotion = gc.getInfoTypeForString("PROMOTION_IMMUNE_LIGHTNING")
self.doPromotionZE( pPlayer, pUnit, iPromotion, i_ctNodeMsg, i_ctBadMsg, iiXLoop, iiYLoop )
def doFlareBodyNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
eTeam = gc.getTeam(pPlayer.getTeam())
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString("EFFECT_SPELL1"),point)
CyAudioGame().Play3DSound("AS3D_SPELL_HASTE",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
i_ptSlow = gc.getInfoTypeForString("PROMOTION_SLOW")
l_iPromotions = [
gc.getInfoTypeForString("PROMOTION_DISEASED"),
gc.getInfoTypeForString("PROMOTION_WITHERED"),
gc.getInfoTypeForString("PROMOTION_POISONED"),
i_ptSlow
]
i_ptHasted = gc.getInfoTypeForString("PROMOTION_HASTED")
i_ptHastedZE = gc.getInfoTypeForString("PROMOTION_HASTED_ZE")
i_stHastedZE = gc.getInfoTypeForString("SPELL_HASTE_ZE")
i_ptRegeneration = gc.getInfoTypeForString("PROMOTION_REGENERATION")
i_ptGolem = gc.getInfoTypeForString("PROMOTION_GOLEM")
i_utFleshGolem = gc.getInfoTypeForString("UNIT_FLESH_GOLEM")
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_PLAYER_RED_TEXT")
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_BODY")
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
for iiX in range(iX-(iRadius), iX+(1+iRadius), 1):
for iiY in range(iY-(iRadius), iY+(1+iRadius), 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.isNone() == False:
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
iUnit = gc.getUnitInfo(pUnit.getUnitType())
if pUnit.isHasPromotion(i_ptGolem) == False or pUnit.getUnitType() == i_utFleshGolem:
self.doPromotionChanceZE( 25, -1, pPlayer, pUnit, i_ptHasted, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
self.doPromotionChanceZE( 25, bEvent, pPlayer, pUnit, i_ptRegeneration, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if bEvent == True:
self.doSpellChanceZE( -1, 75, bEvent, pUnit, i_stHastedZE )
if bEvent == True:
if pUnit.getUnitType() == i_utFleshGolem:
self.doHealZE( pPlayer, pUnit, -1, i_ctNodeMsg, i_ctBadMsg, iiX, iiY, bEvent )
self.doEmpowerZE( pPlayer, pUnit, bEvent, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if self.isSRUnitCombat( pUnit ) == True:
if self.isHasSRPromotion( pUnit ) == False:
self.doPromotionChanceZE( 50, bEvent, pPlayer, pUnit, i_ptHasted, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
for ii in range(len(l_iPromotions)):
if pUnit.isHasPromotion(l_iPromotions[ii]) == True:
chance = CyGame().getSorenRandNum( 10, "remove Promotion")
if chance <= 7 or bEvent == True or l_iPromotions[ii] == i_ptSlow:
self.doRemovePromotionZE( pPlayer, pUnit, l_iPromotions[ii], i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
### msg: %s1 removed. ### (log only)
def doFlareChaosNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString("EFFECT_SPELL1"),point)
CyAudioGame().Play3DSound("AS3D_SPELL_HASTE",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
i_ttSnow = gc.getInfoTypeForString("TERRAIN_SNOW")
i_ptMutated = gc.getInfoTypeForString("PROMOTION_MUTATED")
i_ptDanceOfBlades = gc.getInfoTypeForString("PROMOTION_DANCE_OF_BLADES")
i_ptPoisoned = gc.getInfoTypeForString("PROMOTION_POISONED")
i_uctSiege = gc.getInfoTypeForString("UNITCOMBAT_SIEGE")
i_uctNaval = gc.getInfoTypeForString("UNITCOMBAT_NAVAL")
i_dtPoison = gc.getInfoTypeForString("DAMAGE_POISON")
i_dtFire = gc.getInfoTypeForString("DAMAGE_FIRE")
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_PLAYER_DARK_GREEN_TEXT")
l_iPromotions = [
gc.getInfoTypeForString("PROMOTION_BLESSED"),
gc.getInfoTypeForString("PROMOTION_BLUR"),
gc.getInfoTypeForString("PROMOTION_COURAGE"),
gc.getInfoTypeForString("PROMOTION_CROWN_OF_BRILLANCE"),
gc.getInfoTypeForString("PROMOTION_DANCE_OF_BLADES"),
gc.getInfoTypeForString("PROMOTION_HASTED"),
gc.getInfoTypeForString("PROMOTION_LOYALTY"),
gc.getInfoTypeForString("PROMOTION_MORALE"),
gc.getInfoTypeForString("PROMOTION_REGENERATION"),
gc.getInfoTypeForString("PROMOTION_SHADOWWALK"),
gc.getInfoTypeForString("PROMOTION_SHIELD_OF_FAITH"),
gc.getInfoTypeForString("PROMOTION_VALOR"),
gc.getInfoTypeForString("PROMOTION_WARCRY"),
gc.getInfoTypeForString("PROMOTION_CHARMED"),
gc.getInfoTypeForString("PROMOTION_FATIGUED"),
gc.getInfoTypeForString("PROMOTION_POISONED"),
gc.getInfoTypeForString("PROMOTION_RUSTED"),
gc.getInfoTypeForString("PROMOTION_SLOW"),
gc.getInfoTypeForString("PROMOTION_WITHERED"),
gc.getInfoTypeForString("PROMOTION_DISEASED")
]
l_iDamageTypes = [
i_dtFire,
i_dtPoison,
gc.getInfoTypeForString("DAMAGE_COLD"),
gc.getInfoTypeForString("DAMAGE_DEATH"),
gc.getInfoTypeForString("DAMAGE_HOLY"),
gc.getInfoTypeForString("DAMAGE_LIGHTNING"),
gc.getInfoTypeForString("DAMAGE_PHYSICAL"),
gc.getInfoTypeForString("DAMAGE_UNHOLY")
]
l_iTerrain = self.getl_iLandTerrainType( b_isWater = False, b_isImpassable = False )
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_CHAOS")
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
i_Terrain = l_iTerrain[CyGame().getSorenRandNum( len(l_iTerrain), "terrain")]
if pPlot.getTerrainType() != i_Terrain:
pPlot.setTerrainType(i_Terrain,true,true)
if gc.getTerrainInfo(i_Terrain).isHell() == True:
if pPlot.getPlotCounter() < 50:
pPlot.changePlotCounter(100)
else:
if pPlot.getPlotCounter() > 50:
pPlot.changePlotCounter(-100)
pPlot.rebuildGraphics()
#pPlot.setTempTerrainType(i_Terrain, CyGame().getSorenRandNum(10, "timer") + 10)
#pPlot.setTempTerrainTypeFM(i_Terrain, CyGame().getSorenRandNum(10, "timer") + 10, False, False)
self.printMsg( -1, -1, -1, -1, i_Terrain, pPlot, pPlayer, -1, i_ctNodeMsg, -1, -1 )
### msg: %s1 ### (log only)
for iiX in range(iX-(iRadius), iX+(1+iRadius), 1):
for iiY in range(iY-(iRadius), iY+(1+iRadius), 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.isNone() == False:
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
pPlayer2 = gc.getPlayer(pUnit.getOwner())
iPlayer2 = pPlayer2.getID()
i_rDmg = 3 + 3 * iRadius
i_sDmg = 3 + 3 * iRadius
i_DmgType = l_iDamageTypes[CyGame().getSorenRandNum( len(l_iDamageTypes), "rand DmgType")]
if pUnit.getUnitCombatType() == i_uctNaval or pUnit.getUnitCombatType() == i_uctSiege:
if i_DmgType == i_dtPoison:
i_DmgType = i_dtFire
self.doDamageZE( pPlayer, pUnit, i_rDmg, i_sDmg, i_DmgType, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if i_DmgType == i_dtPoison:
pUnit.setHasPromotion(i_ptPoisoned, True)
self.doPromotionZE( pPlayer, pUnit, i_ptDanceOfBlades, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if pUnit.getUnitCombatType() != i_uctNaval or pUnit.getUnitCombatType() != i_uctSiege:
iRand = 25
if bEvent == True:
iRand = 5
chance = CyGame().getSorenRandNum( iRand, "Wonder")
if chance == 0 or bEvent == True:
chance = CyGame().getSorenRandNum( 5, "n")
for ii in range(chance + 1):
chance = CyGame().getSorenRandNum( len(l_iPromotions), "Promotion")
self.doPromotionZE( pPlayer, pUnit, l_iPromotions[chance], i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
iRand = -1
if iRand != -1:
self.doPromotionChanceZE( 15, bEvent, pPlayer, pUnit, i_ptMutated, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
def doFlareCreationNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
eTeam = gc.getTeam(pPlayer.getTeam())
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString("EFFECT_SPELL1"),point)
CyAudioGame().Play3DSound("AS2D_POSITIVE_DINK",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
l_iBonusLandA = [
gc.getInfoTypeForString("BONUS_COW"),
gc.getInfoTypeForString("BONUS_PIG"),
gc.getInfoTypeForString("BONUS_BISON"),
gc.getInfoTypeForString("BONUS_SHEEP")
]
l_iBonusLandB = [
gc.getInfoTypeForString("BONUS_WHEAT"),
gc.getInfoTypeForString("BONUS_RICE"),
gc.getInfoTypeForString("BONUS_CORN")
]
l_iBonusSea = [
gc.getInfoTypeForString("BONUS_CLAM"),
gc.getInfoTypeForString("BONUS_CRAB"),
gc.getInfoTypeForString("BONUS_FISH"),
gc.getInfoTypeForString("BONUS_SHRIMP")
]
i_DmgType = gc.getInfoTypeForString("DAMAGE_PHYSICAL")
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_PLAYER_DARK_GREEN")
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_CREATION")
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
iRadius += 1
if bEvent == True:
CyGame().setPlotExtraYield(iX, iY, YieldTypes.YIELD_FOOD, 1)
CyInterface().addMessage(iPlayer,false,15,localText.getText("TXT_KEY_DOFLARECREATIONNODEZE_GAMETXT3",()),'',0,CyArtFileMgr().getImprovementArtInfo(gc.getImprovementInfo(i_itNode).getArtDefineTag()).getButton(),ColorTypes(i_ctNodeMsg),iX,iY,True,True)
### msg: +1[ICON_FOOD] on this plot. ###
for iiX in range(iX-(iRadius), iX+(1+iRadius), 1):
for iiY in range(iY-(iRadius), iY+(1+iRadius), 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.isNone() == False:
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
pPlayer2 = gc.getPlayer(pUnit.getOwner())
iPlayer2 = pPlayer2.getID()
i_rDmg = 3 + 2 * iRadius
i_sDmg = 3 + 2 * iRadius
if bEvent == True:
i_rDmg = 1
self.doDamageZE( pPlayer, pUnit, i_rDmg, i_sDmg, i_DmgType, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if pPlot.isCity() == True:
l_sPromotions = [ "CREATION1" ]
self.getTempIllusion( iiX, iiY, -1, bEvent, l_sPromotions, -1 )
pCity = pPlot.getPlotCity()
i_stBirth = gc.getInfoTypeForString("SPELL_BIRTH")
iBuilding = gc.getInfoTypeForString("BUILDING_GROWTH")
self.doBuildingZE( pPlot, iBuilding, i_ctNodeMsg )
if bEvent == True:
iAddPop = 1
pCity.changePopulation(iAddPop)
CyInterface().addMessage(pPlot.getOwner(),false,15,localText.getText("TXT_KEY_DOFLARECREATIONNODEZE_GAMETXT1",( gc.getSpellInfo(i_stBirth).getDescription(), iAddPop, pCity.getName() )),'',0,gc.getSpellInfo(i_stBirth).getButton(),ColorTypes(i_ctNodeMsg),iiX,iiY,True,True)
### msg: Due to %s1 we received +%d2 population in %s3. ###
elif bEvent == False:
chance = CyGame().getSorenRandNum( 4, "25% chance")
if chance == 0:
iOldFood = pCity.getFood()
iAdditionalFood = int( iOldFood / 10 ) + 1 ### 10%
pCity.changeFood(iAdditionalFood)
CyInterface().addMessage(pPlot.getOwner(),false,15,localText.getText("TXT_KEY_DOFLARECREATIONNODEZE_GAMETXT2",( gc.getSpellInfo(i_stBirth).getDescription(), iAdditionalFood, pCity.getName() )),'',0,gc.getSpellInfo(i_stBirth).getButton(),ColorTypes(i_ctNodeMsg),iiX,iiY,True,True)
### msg: Due to %s1 we received +%d2[ICON_FOOD] in %s3. ###
chance = CyGame().getSorenRandNum( 5, "20% chance")
if bEvent == True or chance == 0:
iOldBonus = pPlot.getBonusType(-1)
if iOldBonus in l_iBonusLandA or iOldBonus in l_iBonusLandB or iOldBonus in l_iBonusSea:
l_iBonus2 = []
for irun in range(3):
if irun == 0:
l_iBonus = l_iBonusLandA
elif irun == 1:
l_iBonus = l_iBonusLandB
elif irun == 2:
l_iBonus = l_iBonusSea
if iOldBonus in l_iBonus:
for i in range(len(l_iBonus)):
if iOldBonus != l_iBonus[i]:
l_iBonus2.append(l_iBonus[i])
if len(l_iBonus2) > 0:
iRand = CyGame().getSorenRandNum( len(l_iBonus2), "Random iBonus")
iBonus = l_iBonus2[iRand]
pPlot.setBonusType(-1)
pPlot.setBonusType(iBonus)
if pPlot.isOwned():
i_stFertility = gc.getInfoTypeForString("SPELL_FERTILITY")
CyInterface().addMessage(pPlot.getOwner(),false,15,localText.getText("TXT_KEY_DOFLARECREATIONNODEZE_GAMETXT4",( gc.getSpellInfo(i_stFertility).getDescription(), gc.getBonusInfo(iOldBonus).getDescription(), gc.getBonusInfo(iBonus).getDescription() )),'',0,gc.getSpellInfo(i_stFertility).getButton(),ColorTypes(i_ctNodeMsg),iiX,iiY,True,True)
### msg: %s1 affects the surrounding area and changes %s2 to %s3. ##
def doFlareDeathNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
eTeam = gc.getTeam(pPlayer.getTeam())
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString('EFFECT_SPELL1'),point)
CyAudioGame().Play3DSound("AS3D_SPELL_WRAITH",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_LIGHT_GREY")
i_ptUndead = gc.getInfoTypeForString("PROMOTION_UNDEAD")
i_ptStrong = gc.getInfoTypeForString("PROMOTION_STRONG")
i_itCityRuins = gc.getInfoTypeForString("IMPROVEMENT_CITY_RUINS")
i_itGraveyard = gc.getInfoTypeForString("IMPROVEMENT_GRAVEYARD")
i_utSkeleton = gc.getInfoTypeForString("UNIT_SKELETON")
i_DmgType = gc.getInfoTypeForString("DAMAGE_DEATH")
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_DEATH")
szNodeButton = CyArtFileMgr().getImprovementArtInfo(gc.getImprovementInfo(i_itNode).getArtDefineTag()).getButton()
if pPlayer.getAlignment() == gc.getInfoTypeForString('ALIGNMENT_GOOD'):
i_ctMsg = i_ctBadMsg
elif pPlayer.getAlignment() == gc.getInfoTypeForString('ALIGNMENT_EVIL'):
i_ctMsg = i_ctNodeMsg
else:
i_ctMsg = i_ctNodeMsg
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
for iiX in range(iX-(iRadius), iX+(1+iRadius), 1):
for iiY in range(iY-(iRadius), iY+(1+iRadius), 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.isNone() == False:
if pPlot.getImprovementType() == i_itGraveyard:
pPlot2 = self.canSetUnitZE( iPlayer, pPlot )
if pPlot2 != -1:
iNewUnit = 1
if bEvent == True:
iNewUnit = iRadius
pPlot.setImprovementType(-1)
if bEvent == True:
CyGame().changeGlobalCounter(iNewUnit)
for i in range(iNewUnit):
newUnit = pPlayer.initUnit(i_utSkeleton, pPlot2.getX(), pPlot2.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
newUnit.finishMoves()
szBuffer1 = gc.getUnitInfo(i_utSkeleton).getDescription()
if iNewUnit == 1:
szText = localText.getText("TXT_KEY_DOFLAREDEATHNODEZE_GAMETXT3",(szBuffer1,szBuffer1))
### msg: The graveyard grants a free %s1. ### (only log msg)
else:
szText = localText.getText("TXT_KEY_DOFLAREDEATHNODEZE_GAMETXT4",(iNewUnit,szBuffer1))
### msg: The graveyard grants %d1 free %s2 s. ### (only log msg)
CyInterface().addMessage(iPlayer,True,-1,szText,'',0,szNodeButton,ColorTypes(i_ctNodeMsg),pPlot2.getX(),pPlot2.getY(),True,True)
elif pPlot.getImprovementType() == i_itCityRuins:
pPlot2 = self.canSetUnitZE( iPlayer, pPlot )
if pPlot2 != -1:
pPlot.setImprovementType(-1)
CyGame().changeGlobalCounter(1)
newUnit = pPlayer.initUnit(i_utSkeleton, pPlot2.getX(), pPlot2.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
newUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_RUSTED"), True)
newUnit.setDamage(90, PlayerTypes.NO_PLAYER)
newUnit.finishMoves()
if bEvent == False:
newUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_WEAK"), True)
szBuffer1 = gc.getUnitInfo(i_utSkeleton).getDescription()
szText = localText.getText("TXT_KEY_DOFLAREDEATHNODEZE_GAMETXT5",(szBuffer1,szBuffer1))
CyInterface().addMessage(iPlayer,True,-1,szText,'',0,szNodeButton,ColorTypes(i_ctNodeMsg),pPlot2.getX(),pPlot2.getY(),True,True)
### msg: The city ruins grants a free %s1. ### (only log msg)
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
iUnit = gc.getUnitInfo(pUnit.getUnitType())
pPlayer2 = gc.getPlayer(pUnit.getOwner())
iPlayer2 = pPlayer2.getID()
if pUnit.isAlive() == True:
if iUnit.getMoves() >= 1:
iRand = CyGame().getSorenRandNum( 2, "rand Slow")
if iRand == 0:
pUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_SLOW"), true)
i_rDmg = 10 + 2 * iRadius
i_sDmg = 8 + 2 * iRadius
self.doDamageZE( pPlayer, pUnit, i_rDmg, i_sDmg, i_DmgType, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if bEvent == True:
self.doPromotionChanceZE( 2, -1, pPlayer, pUnit, i_ptUndead, i_ctMsg, i_ctBadMsg, iiX, iiY )
elif pUnit.isHasPromotion(i_ptUndead):
self.doHealZE( pPlayer, pUnit, -1, i_ctNodeMsg, i_ctBadMsg, iiX, iiY, bEvent )
if bEvent == True:
self.doPromotionChanceZE( 2, -1, pPlayer, pUnit, i_ptStrong, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
def doFlareDimensionalNodeZE( self, pPlayer, pPlot, bEvent ):
iPlayer = pPlayer.getID()
eTeam = gc.getTeam(pPlayer.getTeam())
point = pPlot.getPoint()
CyEngine().triggerEffect(gc.getInfoTypeForString("EFFECT_SPELL2"),point)
CyAudioGame().Play3DSound("AS3D_SPELL_ESCAPE",point.x,point.y,point.z)
iX = pPlot.getX()
iY = pPlot.getY()
i_DmgType = gc.getInfoTypeForString("DAMAGE_LIGHTNING")
i_ctBadMsg = gc.getInfoTypeForString("COLOR_RED")
i_ctNodeMsg = gc.getInfoTypeForString("COLOR_CITY_BLUE")
i_itNode = gc.getInfoTypeForString("IMPROVEMENT_MANA_DIMENSIONAL")
i_utThade = gc.getInfoTypeForString("UNIT_THADE")
i_stEscape = gc.getInfoTypeForString("SPELL_ESCAPE")
l_pUnits = []
l_iAntiTeleImprovements = self.getAntiTeleImprovements()
iRadius = self.getRadiusZE( bEvent )
self.screenMsgZE( iPlayer, iRadius, i_itNode, i_ctNodeMsg, i_ctBadMsg, bEvent, iX, iY )
for iiX in range(iX-(iRadius), iX+(1+iRadius), 1):
for iiY in range(iY-(iRadius), iY+(1+iRadius), 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.isNone() == False:
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
if pUnit.getUnitType() != i_utThade:
i_rDmg = 8 + 2 * iRadius
i_sDmg = 6 + 2 * iRadius
if bEvent == True:
i_rDmg = 2 + 2 * iRadius
self.doDamageZE( pPlayer, pUnit, i_rDmg, i_sDmg, i_DmgType, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
if pUnit.getUnitType() == i_utThade and bEvent == True:
self.doEmpowerElementalZE( pPlayer, pUnit, bEvent, i_ctNodeMsg, i_ctBadMsg, iiX, iiY )
self.doHealZE( pPlayer, pUnit, -1, i_ctNodeMsg, i_ctBadMsg, iiX, iiY, bEvent )
if pPlot.isCity() == False:
chance = CyGame().getSorenRandNum( 20, "5% chance")
if chance == 0:
if not pPlot.getImprovementType() in l_iAntiTeleImprovements:
if self.isHasAntiTelePromotions( pUnit ) == False:
l_pUnits.append(pUnit)
if pPlot.isCity() == True:
l_sPromotions = [ "DIMENSIONAL3" ]
self.getTempIllusion( iiX, iiY, -1, bEvent, l_sPromotions, -1 )
iBuilding = gc.getInfoTypeForString("BUILDING_DIMENSIONAL_GATE")
self.doBuildingZE( pPlot, iBuilding, i_ctNodeMsg )