def reqRecruitMercenary(pCaster, sUnitClass):
pPlot = pCaster.plot()
pCity = pPlot.getPlotCity()
iTeam = pCaster.getTeam()
eTeam = gc.getTeam(iTeam)
if eTeam.isAtWar(pCity.getTeam()):
return False
iPlayer = pCaster.getOwner()
pPlayer = gc.getPlayer(iPlayer)
iPlayerC = pCity.findHighestCulture()
if iPlayerC == -1:
iPlayerC = iPlayer
iCivC = gc.getPlayer(iPlayerC).getCivilizationType()
if iCivC == gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
if pPlayer.getStateReligion() != gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL'):
return False
infoCiv = gc.getCivilizationInfo(iCivC)
iUnit = infoCiv.getCivilizationUnits(gc.getInfoTypeForString(sUnitClass))
if iUnit == -1:
return False
if not pPlayer.isHuman():
if eTeam.getAtWarCount(True) < 1:
return False
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KHAZAD'):
if pPlayer.getGold() / pPlayer.getNumCities() < 700:
return False
iCount = 0
for i in range(pPlot.getNumUnits(), 0, -1):
pUnit = pPlot.getUnit(i)
if iTeam == pUnit.getTeam():
iCount += 1
if iCount > 7:
return False
return True
def spellRecruitMercUnit(pCaster, sUnitClass, iCost):
iUnitClass = gc.getInfoTypeForString(sUnitClass)
iGold = iCost//10
pPlot = pCaster.plot()
pCity = pPlot.getPlotCity()
iPlayer = pCaster.getOwner()
pPlayer = gc.getPlayer(iPlayer)
iCiv = pPlayer.getCivilizationType()
iPlayerC = pCity.findHighestCulture()
if iPlayerC == -1:
iPlayerC = iPlayer
pPlayerC = gc.getPlayer(iPlayerC)
iCivC = pPlayerC.getCivilizationType()
infoCivC = gc.getCivilizationInfo(iCivC)
iUnit = infoCivC.getCivilizationUnits(iUnitClass)
newUnit = pPlayer.initUnit(iUnit, pCaster.getX(), pCaster.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
newUnit.finishMoves()
newUnit.setHasCasted(True)
pCity.applyBuildEffects(newUnit)
if iCivC != iCiv:
iArt = infoCivC.getArtStyleType()
if iArt != -1:
newUnit.setUnitArtStyleType(iArt)
infoCiv = gc.getCivilizationInfo(iCiv)
iRace = infoCiv.getDefaultRace()
if iRace != -1:
if newUnit.isHasPromotion(iRace):
newUnit.setHasPromotion(iRace, False)
iRace = infoCivC.getDefaultRace()
if iRace != -1:
if not newUnit.isHasPromotion(iRace):
newUnit.setHasPromotion(iRace, True)
iUnitCombat = newUnit.getUnitCombatType()
iTrait = infoCivC.getCivTrait()
if iTrait != -1:
if iTrait == gc.getInfoTypeForString('TRAIT_ARCANE'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_ADEPT'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ARCANE'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_GUARDSMAN'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_ARCHER') or iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_MELEE'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_GUARDSMAN'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_DEXTEROUS'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_ARCHER'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEXTEROUS'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_HORSELORD'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_MOUNTED'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HORSELORD'), True)
iGold *= 5
elif iTrait == gc.getInfoTypeForString('TRAIT_SEAFARING'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_NAVAL'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SEAFARING'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_SCAVENGER'):
if iUnitCombat == gc.getInfoTypeForString('"UNITCOMBAT_ANIMAL') or iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_BEAST') or iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_MELEE') or iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_RECON'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SCAVENGER'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_SINISTER'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_RECON'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SINISTER'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_SPIRITUAL'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_DISCIPLE'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), True)
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ZEAL'), True)
elif iTrait == gc.getInfoTypeForString('TRAIT_SUNDERED'):
if iUnitCombat == gc.getInfoTypeForString('UNITCOMBAT_ADEPT'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SUNDERED'), True)
if pCaster.getUnitType() == gc.getInfoTypeForString('UNIT_MAGNADINE'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MORALE'), True)
elif pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_HIPPUS'):
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MERCENARY'), True)
pPlayerC.changeGold(iGold)