def reqBarrage(caster):
pPlayer = gc.getPlayer(caster.getOwner())
eTeam = gc.getTeam(pPlayer.getTeam())
iDamageLimit = caster.collateralDamageLimit()
pPlot=caster.plot()
bValid = False
iX = caster.getX()
iY = caster.getY()
if pPlot.isCity() or pPlot.isHills or pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_CITY_RUINS') or gc.getInfoTypeForString('IMPROVEMENT_TOWER') or gc.getInfoTypeForString('IMPROVEMENT_FORT') or gc.getInfoTypeForString('IMPROVEMENT_CASTLE') or gc.getInfoTypeForString('IMPROVEMENT_CITADEL'):
for iiX in range(iX-1, iX+2, 1):
for iiY in range(iY-1, iY+2, 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.getNumUnits() > 0:
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
e2Team = gc.getPlayer(pUnit.getOwner()).getTeam()
if (eTeam.isAtWar(e2Team) and pUnit.getDamage() < iDamageLimit):
if caster.isMadeAttack() == False:
return True
return False
def spellBarrage(caster):
caster.setMadeAttack(True)
iPlayer = caster.getOwner()
pPlayer = gc.getPlayer(iPlayer)
eTeam = gc.getTeam(pPlayer.getTeam())
iDamageLimit = caster.collateralDamageLimit()
iMaxUnits = 3 * caster.collateralDamageMaxUnits()
pPlot=caster.plot()
advantage = 1
if pPlot.isCity():
advantage = advantage *2.5
if pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_CITY_RUINS'):
advantage = advantage *1.5
if pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_TOWER'):
advantage = advantage *1.5
if pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_FORT'):
advantage = advantage *1.5
if pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_CASTLE'):
advantage = advantage *2
if pPlot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_CITADEL'):
advantage = advantage *2.5
if pPlot.isHills() or pPlot.isPeak():
advantage = advantage *1.5
iX = caster.getX()
iY = caster.getY()
for iiX in range(iX-1, iX+2, 1):
for iiY in range(iY-1, iY+2, 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.getNumUnits() > 0:
bHit = False
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
e2Team = gc.getPlayer(pUnit.getOwner()).getTeam()
if (eTeam.isAtWar(e2Team) and pUnit.getDamage() < iDamageLimit and iMaxUnits > 0):
iMaxUnits -= 1
iDmg = advantage (CyUnit.firstStrikes() +1) * CyGame().getSorenRandNum(8 * caster.baseCombatStr(), "Barrage")
iDmg -= 2 * pUnit.baseCombatStr()
if iDmg < 1:
iDmg = 1
if iDmg + pUnit.getDamage() > iDamageLimit:
iDmg = iDamageLimit - pUnit.getDamage()
pUnit.changeDamage(iDmg, iPlayer)
sMessage = PyHelpers.PyInfo.UnitInfo(pUnit.getUnitType()).getDescription() + " " + CyTranslator().getText("hit by a Barrage", (iDmg, ()))
CyInterface().addMessage(iPlayer,True,25,sMessage,'AS2D_ARCHERY_BARRAGE',1,'Art/Interface/Buttons/Spells/Barrage.dds',ColorTypes(8),pUnit.getX(),pUnit.getY(),True,True)
CyInterface().addMessage(pUnit.getOwner(),True,25,sMessage,'AS2D_ARCHERY_BARRAGE',1,'Art/Interface/Buttons/Spells/Barrage.dds',ColorTypes(7),pUnit.getX(),pUnit.getY(),True,True)
#bHit == True
#CyInterface().selectUnit(caster, true, true, true)
# if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FLAMING_ARROWS')) and ((pPlot.getFeatureType() == gc.getInfoTypeForString('FEATURE_FOREST_ANCIENT') or pPlot.getFeatureType() == gc.getInfoTypeForString('FEATURE_FOREST') or pPlot.getFeatureType() == gc.getInfoTypeForString('FEATURE_JUNGLE'))):
# if CyGame().getSorenRandNum(100, "Flames Spread") <= gc.getDefineINT('FLAMES_SPREAD_CHANCE'):
# pPlot.setImprovementType(gc.getInfoTypeForString('IMPROVEMENT_SMOKE'))