def spellAcceptChallenge(pCaster):
pPlot = pCaster.plot()
iChallengerProm = gc.getInfoTypeForString('PROMOTION_CHALLENGER')
iBronze = gc.getInfoTypeForString('PROMOTION_BRONZE_WEAPONS')
iIron = gc.getInfoTypeForString('PROMOTION_IRON_WEAPONS')
iMithril = gc.getInfoTypeForString('PROMOTION_MITHRIL_WEAPONS')
iRust = gc.getInfoTypeForString('PROMOTION_RUSTED')
iEnchant = gc.getInfoTypeForString('PROMOTION_ENCHANTED_BLADE')
iPoison = gc.getInfoTypeForString('PROMOTION_POISONED_BLADE')
for i in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(i)
if pCaster is not pUnit:
if pUnit.isHasPromotion(iChallengerProm) == True:
break
iRnd = CyGame().getSorenRandNum(100, "Doviello Duel")
iChallengerOdds = getCombatOdds(pUnit, pCaster)
iChallengerRnd = (iRnd + (iChallengerOdds * 2)) / 3
iDefenderOdds = getCombatOdds(pCaster, pUnit)
iDefenderRnd = (iRnd + (iDefenderOdds * 2)) / 3
if iDefenderOdds > iChallengerOdds:
iDefenseRnd = CyGame().getSorenRandNum(100, "Doviello Duel Defender")
iDefenseTieRnd = CyGame().getSorenRandNum(100, "Doviello Duel Defender Tie")
if iDefenseTieRnd < 10:
pCaster.changeExperience(pUnit.getExperience() / 10, -1, False, False, False)
pCaster.setDamage(75, pCaster.getOwner())
pUnit.changeExperience(pCaster.getExperience() / 10, -1, False, False, False)
pUnit.setDamage(75, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_DRAW", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
elif iDefenseTieRnd < 12 and iDefenseTieRnd >= 10:
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_ARENA_DEATH", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(7),pCaster.getX(),pCaster.getY(),True,True)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
pUnit.kill(True, PlayerTypes.NO_PLAYER)
elif iDefenseTieRnd > 12:
if iDefenseRnd > iDefenderOdds:
pUnit.changeExperience((pCaster.getExperience() / 4) + 2, -1, False, False, False)
pUnit.setDamage(25, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_LOSS", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pUnit.isHasPromotion(iEnchant):
if pCaster.isHasPromotion(iEnchant):
pUnit.setHasPromotion(iEnchant, True)
if not pUnit.isHasPromotion(iPoison):
if pCaster.isHasPromotion(iPoison):
pUnit.setHasPromotion(iPoison, True)
if not pUnit.isHasPromotion(iMithril):
if pCaster.isHasPromotion(iMithril) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 3:
pUnit.setHasPromotion(iMithril, True)
pUnit.setHasPromotion(iIron, False)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iIron):
if pCaster.isHasPromotion(iIron) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 2:
pUnit.setHasPromotion(iIron, True)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iBronze) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 1:
if pCaster.isHasPromotion(iBronze):
pUnit.setHasPromotion(iBronze, True)
pUnit.setHasPromotion(iRust, False)
if pUnit.isHasPromotion(iRust):
if not pCaster.isHasPromotion(iRust):
if (pUnit.isHasPromotion(iMithril) and pCaster.isHasPromotion(iMithril)) or (pUnit.isHasPromotion(iIron) and pCaster.isHasPromotion(iIron)) or (pUnit.isHasPromotion(iBronze) and pCaster.isHasPromotion(iBronze)):
pUnit.setHasPromotion(iRust, False)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
if iDefenseRnd < iDefenderOdds:
pCaster.changeExperience((pUnit.getExperience() / 4) + 2, -1, False, False, False)
pCaster.setDamage(25, pCaster.getOwner())
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_WIN", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pCaster.isHasPromotion(iEnchant):
if pUnit.isHasPromotion(iEnchant):
pCaster.setHasPromotion(iEnchant, True)
if not pCaster.isHasPromotion(iPoison):
if pUnit.isHasPromotion(iPoison):
pCaster.setHasPromotion(iPoison, True)
if not pCaster.isHasPromotion(iMithril):
if pUnit.isHasPromotion(iMithril) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 3:
pCaster.setHasPromotion(iMithril, True)
pCaster.setHasPromotion(iIron, False)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iIron):
if pUnit.isHasPromotion(iIron) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 2:
pCaster.setHasPromotion(iIron, True)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iBronze) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 1:
if pUnit.isHasPromotion(iBronze):
pCaster.setHasPromotion(iBronze, True)
pCaster.setHasPromotion(iRust, False)
if pCaster.isHasPromotion(iRust):
if not pUnit.isHasPromotion(iRust):
if (pCaster.isHasPromotion(iMithril) and pUnit.isHasPromotion(iMithril)) or (pCaster.isHasPromotion(iIron) and pUnit.isHasPromotion(iIron)) or (pCaster.isHasPromotion(iBronze) and pUnit.isHasPromotion(iBronze)):
pCaster.setHasPromotion(iRust, False)
pUnit.kill(True, PlayerTypes.NO_PLAYER)
if iChallengerOdds > iDefenderOdds:
iChallengeRnd = CyGame().getSorenRandNum(100, "Doviello Duel Challenger")
iChallengerTieRnd = CyGame().getSorenRandNum(100, "Doviello Duel Challenger Tie")
if iChallengerTieRnd < 10:
pCaster.changeExperience(pUnit.getExperience() / 10, -1, False, False, False)
pCaster.setDamage(75, pCaster.getOwner())
pUnit.changeExperience(pCaster.getExperience() / 10, -1, False, False, False)
pUnit.setDamage(75, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_DRAW", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
elif (iChallengerTieRnd < 12 and iChallengerTieRnd >= 10):
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_ARENA_DEATH", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(7),pCaster.getX(),pCaster.getY(),True,True)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
pUnit.kill(True, PlayerTypes.NO_PLAYER)
elif iChallengerTieRnd > 12:
if iChallengeRnd < iChallengerOdds:
pUnit.changeExperience((pCaster.getExperience() / 4) + 2, -1, False, False, False)
pUnit.setDamage(25, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_LOSS", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pUnit.isHasPromotion(iEnchant):
if pCaster.isHasPromotion(iEnchant):
pUnit.setHasPromotion(iEnchant, True)
if not pUnit.isHasPromotion(iPoison):
if pCaster.isHasPromotion(iPoison):
pUnit.setHasPromotion(iPoison, True)
if not pUnit.isHasPromotion(iMithril):
if pCaster.isHasPromotion(iMithril) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 3:
pUnit.setHasPromotion(iMithril, True)
pUnit.setHasPromotion(iIron, False)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iIron):
if pCaster.isHasPromotion(iIron) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 2:
pUnit.setHasPromotion(iIron, True)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iBronze) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 1:
if pCaster.isHasPromotion(iBronze):
pUnit.setHasPromotion(iBronze, True)
pUnit.setHasPromotion(iRust, False)
if pUnit.isHasPromotion(iRust):
if not pCaster.isHasPromotion(iRust):
if (pUnit.isHasPromotion(iMithril) and pCaster.isHasPromotion(iMithril)) or (pUnit.isHasPromotion(iIron) and pCaster.isHasPromotion(iIron)) or (pUnit.isHasPromotion(iBronze) and pCaster.isHasPromotion(iBronze)):
pUnit.setHasPromotion(iRust, False)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
if iChallengeRnd > iChallengerOdds:
pCaster.changeExperience((pUnit.getExperience() / 4) + 2, -1, False, False, False)
pCaster.setDamage(25, pCaster.getOwner())
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_WIN", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pCaster.isHasPromotion(iEnchant):
if pUnit.isHasPromotion(iEnchant):
pCaster.setHasPromotion(iEnchant, True)
if not pCaster.isHasPromotion(iPoison):
if pUnit.isHasPromotion(iPoison):
pCaster.setHasPromotion(iPoison, True)
if not pCaster.isHasPromotion(iMithril):
if pUnit.isHasPromotion(iMithril) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 3:
pCaster.setHasPromotion(iMithril, True)
pCaster.setHasPromotion(iIron, False)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iIron):
if pUnit.isHasPromotion(iIron) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 2:
pCaster.setHasPromotion(iIron, True)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iBronze) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 1:
if pUnit.isHasPromotion(iBronze):
pCaster.setHasPromotion(iBronze, True)
pCaster.setHasPromotion(iRust, False)
if pCaster.isHasPromotion(iRust):
if not pUnit.isHasPromotion(iRust):
if (pCaster.isHasPromotion(iMithril) and pUnit.isHasPromotion(iMithril)) or (pCaster.isHasPromotion(iIron) and pUnit.isHasPromotion(iIron)) or (pCaster.isHasPromotion(iBronze) and pUnit.isHasPromotion(iBronze)):
pCaster.setHasPromotion(iRust, False)
pUnit.kill(True, PlayerTypes.NO_PLAYER)
if iChallengerOdds == iDefenderOdds:
iEqualRnd = CyGame().getSorenRandNum(100, "Doviello Duel Equals")
iEqualTieRnd = CyGame().getSorenRandNum(100, "Doviello Duel Equals Tie")
if iEqualTieRnd < 10:
pCaster.changeExperience(pUnit.getExperience() / 10, -1, False, False, False)
pCaster.setDamage(75, pCaster.getOwner())
pUnit.changeExperience(pCaster.getExperience() / 10, -1, False, False, False)
pUnit.setDamage(75, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_DRAW", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
elif (iEqualTieRnd < 12 and iEqualTieRnd >= 10):
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_ARENA_DEATH", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(7),pCaster.getX(),pCaster.getY(),True,True)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
pUnit.kill(True, PlayerTypes.NO_PLAYER)
elif iEqualTieRnd > 12:
if iEqualRnd < 50:
pUnit.changeExperience((pCaster.getExperience() / 4) + 2, -1, False, False, False)
pUnit.setDamage(25, pUnit.getOwner())
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHALLENGER'), False)
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_LOSS", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pUnit.isHasPromotion(iEnchant):
if pCaster.isHasPromotion(iEnchant):
pUnit.setHasPromotion(iEnchant, True)
if not pUnit.isHasPromotion(iPoison):
if pCaster.isHasPromotion(iPoison):
pUnit.setHasPromotion(iPoison, True)
if not pUnit.isHasPromotion(iMithril):
if pCaster.isHasPromotion(iMithril) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 3:
pUnit.setHasPromotion(iMithril, True)
pUnit.setHasPromotion(iIron, False)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iIron):
if pCaster.isHasPromotion(iIron) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 2:
pUnit.setHasPromotion(iIron, True)
pUnit.setHasPromotion(iBronze, False)
pUnit.setHasPromotion(iRust, False)
elif not pUnit.isHasPromotion(iBronze) and gc.getUnitInfo(pUnit.getUnitType()).getWeaponTier() >= 1:
if pCaster.isHasPromotion(iBronze):
pUnit.setHasPromotion(iBronze, True)
pUnit.setHasPromotion(iRust, False)
if pUnit.isHasPromotion(iRust):
if not pCaster.isHasPromotion(iRust):
if (pUnit.isHasPromotion(iMithril) and pCaster.isHasPromotion(iMithril)) or (pUnit.isHasPromotion(iIron) and pCaster.isHasPromotion(iIron)) or (pUnit.isHasPromotion(iBronze) and pCaster.isHasPromotion(iBronze)):
pUnit.setHasPromotion(iRust, False)
pCaster.kill(True, PlayerTypes.NO_PLAYER)
if iEqualRnd >= 50:
pCaster.changeExperience((pUnit.getExperience() / 4) + 2, -1, False, False, False)
pCaster.setDamage(25, pCaster.getOwner())
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_DOVIELLO_DUEL_WIN", ()),'',1,'Art/Interface/Buttons/Buildings/Arena.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if not pCaster.isHasPromotion(iEnchant):
if pUnit.isHasPromotion(iEnchant):
pCaster.setHasPromotion(iEnchant, True)
if not pCaster.isHasPromotion(iPoison):
if pUnit.isHasPromotion(iPoison):
pCaster.setHasPromotion(iPoison, True)
if not pCaster.isHasPromotion(iMithril):
if pUnit.isHasPromotion(iMithril) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 3:
pCaster.setHasPromotion(iMithril, True)
pCaster.setHasPromotion(iIron, False)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iIron):
if pUnit.isHasPromotion(iIron) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 2:
pCaster.setHasPromotion(iIron, True)
pCaster.setHasPromotion(iBronze, False)
pCaster.setHasPromotion(iRust, False)
elif not pCaster.isHasPromotion(iBronze) and gc.getUnitInfo(pCaster.getUnitType()).getWeaponTier() >= 1:
if pUnit.isHasPromotion(iBronze):
pCaster.setHasPromotion(iBronze, True)
pCaster.setHasPromotion(iRust, False)
if pCaster.isHasPromotion(iRust):
if not pUnit.isHasPromotion(iRust):
if (pCaster.isHasPromotion(iMithril) and pUnit.isHasPromotion(iMithril)) or (pCaster.isHasPromotion(iIron) and pUnit.isHasPromotion(iIron)) or (pCaster.isHasPromotion(iBronze) and pUnit.isHasPromotion(iBronze)):
pCaster.setHasPromotion(iRust, False)
pUnit.kill(True, PlayerTypes.NO_PLAYER)