def onCombatResult(self, argsList):
'Combat Result'
pWinner,pLoser = argsList
playerX = PyPlayer(pWinner.getOwner())
unitX = PyInfo.UnitInfo(pWinner.getUnitType())
playerY = PyPlayer(pLoser.getOwner())
unitY = PyInfo.UnitInfo(pLoser.getUnitType())
pPlayer = gc.getPlayer(pWinner.getOwner())
bUncaptured = True
if pPlayer.isHuman():
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_ACHERON'):
Trophies.addTrophy("TROPHY_DEFEATED_ACHERON")
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_BASIUM'):
Trophies.addTrophy("TROPHY_DEFEATED_BASIUM")
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_HYBOREM'):
Trophies.addTrophy("TROPHY_DEFEATED_HYBOREM")
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_ORTHUS'):
Trophies.addTrophy("TROPHY_DEFEATED_ORTHUS")
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_LOKI'):
pPlot = cf.FFHFindClearPlot(pLoser, -1)
if pPlot != -1:
pPlayer2 = gc.getPlayer(pLoser.getOwner())
newUnit = pPlayer2.initUnit(gc.getInfoTypeForString('UNIT_LOKI'), pPlot.getX(), pPlot.getY(), UnitAITypes.NO_UNITAI)
newUnit.setDamage(50, -1)
CyInterface().addMessage(pWinner.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_LOKI_RUNS",()),'AS2D_RUN_AWAY',1,'Art/Interface/Buttons/Units/Loki.dds',ColorTypes(7),pLoser.getX(),pLoser.getY(),True,True)
CyInterface().addMessage(pLoser.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_LOKI_RUNS",()),'AS2D_RUN_AWAY',1,'Art/Interface/Buttons/Units/Loki.dds',ColorTypes(7),pLoser.getX(),pLoser.getY(),True,True)
bUncaptured = False
if pWinner.isNoCapture():
bUncaptured = False
if pLoser.getCaptureUnitType(pPlayer.getCivilizationType()) != -1:
bUncaptured = False
if (pLoser.isAlive() and pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GIANT_SPIDER')):
bUncaptured = False
newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BABY_SPIDER'), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI)
newUnit.setMadeAttack(True)
newUnit.finishMoves()
newUnit.setDamage(50, -1)
CyInterface().addMessage(pWinner.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_BABY_SPIDER",()),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/GiantSpider.dds',ColorTypes(8),pWinner.getX(),pWinner.getY(),True,True)
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_BABY_SPIDER'), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI)
newUnit.setMadeAttack(True)
newUnit.finishMoves()
if (pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_LABOR')) == gc.getInfoTypeForString('CIVIC_SLAVERY') or pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_TASKMASTER'))):
if (bUncaptured and pLoser.isAlive() and pLoser.getUnitCombatType() != gc.getInfoTypeForString('UNITCOMBAT_ANIMAL') and pWinner.getSpecialUnitType() != gc.getInfoTypeForString('SPECIALUNIT_SPELL')):
if CyGame().getSorenRandNum(100, "Bob") <= gc.getDefineINT('SLAVERY_CHANCE'):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Slave captured.','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Slave.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
unitType = gc.getInfoTypeForString('UNIT_SLAVE')
if pLoser.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DWARF')):
unitType = gc.getInfoTypeForString('UNIT_SLAVE_DWARF')
if pLoser.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ELF')):
unitType = gc.getInfoTypeForString('UNIT_SLAVE_ELF')
if pLoser.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ORC')):
unitType = gc.getInfoTypeForString('UNIT_SLAVE_ORC')
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, unitType, False)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_COMMAND')) and bUncaptured):
if pLoser.isAlive():
if CyGame().getSorenRandNum(100, "Bob") <= 50:
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, pLoser.getUnitType(), True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN') and bUncaptured):
if (pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF') or pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF_PACK')):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_WORG_RIDER'), True)
pWinner.setDamage(100, True)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUBDUE_ANIMAL')) and bUncaptured):
if pLoser.isAnimal() and pLoser.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ANIMAL'):
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, pLoser.getUnitType(), True)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUBDUE_ORC')) and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_ORC_WARRIOR')and bUncaptured):
if CyGame().getSorenRandNum(100, "Bob") <= gc.getDefineINT('SLAVERY_CHANCE'):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Goblins liberated.','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Goblin.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
unitType = gc.getInfoTypeForString('UNIT_GOBLIN_RENEGADE')
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, unitType, False)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUBDUE_ORC')) and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN')and bUncaptured):
if CyGame().getSorenRandNum(100, "Bob") <= gc.getDefineINT('SLAVERY_CHANCE'):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Goblins liberated.','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Goblin.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
unitType = gc.getInfoTypeForString('UNIT_GOBLIN_RENEGADE')
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, unitType, False)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUBDUE_GIANT')) and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_HILL_GIANT')and bUncaptured):
if CyGame().getSorenRandNum(100, "Bob") <= gc.getDefineINT('SLAVERY_CHANCE'):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Hill Giant pursuaded.','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Goblin.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
unitType = gc.getInfoTypeForString('UNIT_HILL_GIANT')
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, unitType, False)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_SCOUT') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_GOBLIN_TRACKER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_SCOUT') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF_PACK') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_WOLF_RIDER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_TRACKER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_WOLFMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_TRACKER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF_PACK') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_WOLFMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_SCOUT') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_BABY_SPIDER') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_GOBLIN_TRAPPER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_HUNTER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_HUNTMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_HUNTER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_WOLF_PACK') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_HUNTMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_HUNTER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_BABY_SPIDER') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_SPIDERMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_GOBLIN_HUNTER') and pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_GIANT_SPIDER') and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pWinner, gc.getInfoTypeForString('UNIT_SPIDERMASTER'), True)
pWinner.setDamage(100, True)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_WEREWOLF')) and pLoser.isAlive() and pLoser.getUnitCombatType() != gc.getInfoTypeForString('UNITCOMBAT_ANIMAL') and pLoser.getUnitCombatType() != gc.getInfoTypeForString('UNITCOMBAT_BEAST') and bUncaptured):
iNumWW = pPlayer.getUnitClassCount(gc.getInfoTypeForString('UNITCLASS_RAVENOUS_WEREWOLF')) + pPlayer.getUnitClassCount(gc.getInfoTypeForString('UNITCLASS_WEREWOLF')) + pPlayer.getUnitClassCount(gc.getInfoTypeForString('UNITCLASS_GREATER_WEREWOLF'))
iRand = CyGame().getSorenRandNum(100, "Bob")
if (iRand <= gc.getDefineINT('WEREWOLF_BASE_CHANCE') - (gc.getDefineINT('WEREWOLF_MINUS_PER_WEREWOLF') * iNumWW)):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Lycanthropy has spread.','AS2D_WOLF',1,'Art/Interface/Buttons/Units/Ravenouswerewolf.dds',ColorTypes(8),pWinner.getX(),pWinner.getY(),True,True)
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, gc.getInfoTypeForString('UNIT_RAVENOUS_WEREWOLF'), False)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_RAVENOUS_WEREWOLF') and pLoser.isAlive()):
CyInterface().addMessage(pWinner.getOwner(),True,25,'A Werewolf has become stronger.','AS2D_WOLF',1,'Art/Interface/Buttons/Units/Werewolf.dds',ColorTypes(8),pWinner.getX(),pWinner.getY(),True,True)
newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_WEREWOLF'), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI)
newUnit.finishMoves()
newUnit.setExperience(pWinner.getExperience(), -1)
newUnit.setLevel(pWinner.getLevel())
newUnit.setDamage(pWinner.getDamage(), False)
for iCount in range(gc.getNumPromotionInfos()):
if (pWinner.isHasPromotion(iCount)):
newUnit.setHasPromotion(iCount, True)
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENRAGED'), False)
pWinner.setDamage(100, True)
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_WEREWOLF') and pLoser.isAlive()):
iRand = CyGame().getSorenRandNum(100, "Bob")
if (iRand <= 5):
CyInterface().addMessage(pWinner.getOwner(),True,25,'A Werewolf has become stronger.','AS2D_WOLF',1,'Art/Interface/Buttons/Units/Greaterwerewolf.dds',ColorTypes(8),pWinner.getX(),pWinner.getY(),True,True)
newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_GREATER_WEREWOLF'), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI)
newUnit.finishMoves()
newUnit.setExperience(pWinner.getExperience(), -1)
newUnit.setLevel(pWinner.getLevel())
newUnit.setDamage(pWinner.getDamage(), False)
for iCount in range(gc.getNumPromotionInfos()):
if (pWinner.isHasPromotion(iCount)):
newUnit.setHasPromotion(iCount, True)
pWinner.setDamage(100, True)
if (pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_BOARDING')) and pLoser.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_NAVAL') and bUncaptured):
CyInterface().addMessage(pWinner.getOwner(),True,25,'Ship Captured.','AS2D_GOODY_GOLD',1,'Art/Interface/Buttons/Promotions/Boarding.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, pLoser.getUnitType(), True)
if (pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_BASIUM') or pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_HYBOREM')):
if pLoser.isHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL')) == False:
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_BASIUM'):
CyInterface().addMessage(pLoser.getOwner(),True,25,'Basium has Died!','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Basium.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
if pLoser.getUnitType() == gc.getInfoTypeForString('UNIT_HYBOREM'):
CyInterface().addMessage(pLoser.getOwner(),True,25,'Hyborem has Died!','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Hyborem.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
p2Player = gc.getPlayer(pLoser.getOwner())
for iTrait in range(gc.getNumTraitInfos()):
if iTrait != gc.getInfoTypeForString('TRAIT_FALLOW'):
CyMessageControl().sendApplyEvent(5012, EventContextTypes.EVENTCONTEXT_ALL, (pLoser.getOwner(),iTrait,False))
if (pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_MAGNADINE') and bUncaptured):
if (pLoser.isAlive() and pLoser.getOwner() == gc.getBARBARIAN_PLAYER() and pLoser.getUnitCombatType() != gc.getInfoTypeForString('UNITCOMBAT_ANIMAL')):
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, pLoser.getUnitType(), True)
if pWinner.getUnitType() == gc.getInfoTypeForString('UNIT_ARS'):
if (pLoser.isAlive() and bUncaptured):
bUncaptured = False
cf.FFHConvert(pWinner, pLoser, gc.getInfoTypeForString('UNIT_WRAITH'), False)
if (pLoser.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_TAR_DEMON') and bUncaptured):
bUncaptured = False
iStr = pLoser.baseCombatStr(false) - 2
if iStr > 1:
pPlayer2 = gc.getPlayer(pLoser.getOwner())
newUnit = pPlayer2.initUnit(gc.getInfoTypeForString('UNIT_TAR_DEMON'), pLoser.getX(), pLoser.getY(), UnitAITypes.NO_UNITAI)
newUnit.setDamage(50, -1)
newUnit.setMadeAttack(True)
newUnit.changeExtraCombatDefense(iStr - newUnit.baseCombatStr(false))
newUnit = pPlayer2.initUnit(gc.getInfoTypeForString('UNIT_TAR_DEMON'), pLoser.getX(), pLoser.getY(), UnitAITypes.NO_UNITAI)
newUnit.changeExtraCombatDefense(iStr - newUnit.baseCombatStr(false))
newUnit.setDamage(50, -1)
newUnit.setMadeAttack(True)
CyInterface().addMessage(pWinner.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_TAR_DEMON_SPLIT",()),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Tar Demon.dds',ColorTypes(7),pLoser.getX(),pLoser.getY(),True,True)
CyInterface().addMessage(pLoser.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_TAR_DEMON_SPLIT",()),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Units/Tar Demon.dds',ColorTypes(8),pLoser.getX(),pLoser.getY(),True,True)
if pLoser.isHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL')):
if bUncaptured == False:
pLoser.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
if (not self.__LOG_COMBAT):
return
if playerX and playerX and unitX and playerY:
CvUtil.pyPrint('Player %d Civilization %s Unit %s has defeated Player %d Civilization %s Unit %s'
%(playerX.getID(), playerX.getCivilizationName(), unitX.getDescription(),
playerY.getID(), playerY.getCivilizationName(), unitY.getDescription()))