## CvWonderEventManager
## This file is part of Civilization IV Sanguo196AD mod.
from CvPythonExtensions import *
import CvScreensInterface
import CvUtil
import PyHelpers
import Popup as PyPopup
import sys
gc = CyGlobalContext()
localText = CyTranslator()
PyPlayer = PyHelpers.PyPlayer
PyInfo = PyHelpers.PyInfo
# globals
###################################################
class CvTraitEventManager:
def __init__(self, eventManager):
# private
self.eventManager = eventManager
eventManager.addEventHandler("combatResult", self.onCombatResult)
eventManager.addEventHandler("religionFounded", self.onReligionFounded)
eventManager.addEventHandler("cityBuilt", self.onCityBuilt)
eventManager.addEventHandler("cityAcquiredAndKept", self.onCityAcquiredAndKept)
eventManager.addEventHandler("unitPromoted", self.onUnitPromoted)
eventManager.addEventHandler("cityDoTurn", self.onCityDoTurn)
#################### ON EVENTS ######################
#### Unique Leader Trait, start, added by poyuzhe 11.15.08
## TRAIT_GENERAL ##
def onCombatResult(self, argsList):
'Combat Result'
pWinner,pLoser = argsList
pWinnerPlayer = gc.getPlayer(pWinner.getOwner())
if pWinnerPlayer.hasTrait(gc.getInfoTypeForString("TRAIT_GENERAL")):
if CyGame().getSorenRandNum(100, "Random Unit Allegience Number.") > 20:
return
winnerCombatType = pWinner.getUnitCombatType()
loserCombatType = pLoser.getUnitCombatType()
winnerUnitType = pWinner.getUnitType()
unitList = [gc.getInfoTypeForString("UNIT_MACEMAN"),
gc.getInfoTypeForString("UNIT_MACEMAN_1"),
gc.getInfoTypeForString("UNIT_MACEMAN_2")]
if winnerCombatType != gc.getInfoTypeForString("UNITCOMBAT_NAVAL"):
if winnerUnitType not in unitList:
return
elif pWinner.plot().isWater() and pLoser.getUnitType() not in unitList:
return
elif loserCombatType == gc.getInfoTypeForString("UNITCOMBAT_NAVAL"):
return
objNewUnit = pWinnerPlayer.initUnit(pLoser.getUnitType(), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
objNewUnit.finishMoves()
objNewUnit.setDamage(99, False)
objNewUnit.setExperience(pLoser.getExperience(), -1)
objNewUnit.setLevel(pLoser.getLevel())
for iPromotion in range(gc.getNumPromotionInfos()):
if (pLoser.isHasPromotion(iPromotion)):
objNewUnit.setHasPromotion(iPromotion, True)
## TRAIT_IRON_WILL ##
def onReligionFounded(self, argsList):
'Religion Founded'
iReligion, iFounder = argsList
iGoodReligion = gc.getInfoTypeForString("RELIGION_REVIVAL")
if iReligion == iGoodReligion:
for iLoopPlayer in range(gc.getMAX_CIV_PLAYERS()):
loopPlayer = gc.getPlayer(iLoopPlayer)
iGoodTrait = gc.getInfoTypeForString("TRAIT_IRON_WILL")
if loopPlayer.isAlive() and not loopPlayer.isMinorCiv() and not loopPlayer.isBarbarian():
if loopPlayer.hasTrait(iGoodTrait):
iCivicOption = gc.getInfoTypeForString("CIVICOPTION_RELIGION")
if loopPlayer.getCivics(iCivicOption) == gc.getInfoTypeForString("CIVIC_PAGANISM"):
loopPlayer.setCivics(iCivicOption, gc.getInfoTypeForString("CIVIC_THEOCRACY"))
loopPlayer.setLastStateReligion(iGoodReligion)
(loopCity, iter) = loopPlayer.firstCity(false)
while(loopCity):
if CyGame().getSorenRandNum(100, "Chance to get Religion") > 50:
loopCity.setHasReligion(iGoodReligion, True, True, True)
(loopCity, iter) = loopPlayer.nextCity(iter, false)
def onCityBuilt(self, argsList):
'City Built'
city = argsList[0]
pPlayer = gc.getPlayer(city.getOwner())
iGoodTrait = gc.getInfoTypeForString("TRAIT_IRON_WILL")
if pPlayer.hasTrait(iGoodTrait):
iGoodReligion = gc.getInfoTypeForString("RELIGION_REVIVAL")
if pPlayer.getStateReligion() == iGoodReligion:
city.setHasReligion(iGoodReligion, True, True, True)
def onCityAcquiredAndKept(self, argsList):
'City Acquired and Kept'
iOwner,pCity = argsList
pPlayer = gc.getPlayer(iOwner)
iGoodTrait = gc.getInfoTypeForString("TRAIT_IRON_WILL")
if pPlayer.hasTrait(iGoodTrait):
iGoodReligion = gc.getInfoTypeForString("RELIGION_REVIVAL")
if pPlayer.getStateReligion() == iGoodReligion:
if pCity.isHasReligion(iGoodReligion) == 0:
pCity.setHasReligion(iGoodReligion, True, True, True)
else:
if pCity.isHasReligion(iGoodReligion) == 1:
if pPlayer.canConvert(iGoodReligion):
pPlayer.setLastStateReligion(iGoodReligion)
## TRAIT_STRONG_RIDER ##
def onUnitPromoted(self, argsList):
'Unit Promoted'
pUnit, iPromotion = argsList
if gc.getPlayer(pUnit.getOwner()).hasTrait(gc.getInfoTypeForString("TRAIT_STRONG_RIDER")):
if pUnit.getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_MOUNTED"):
if pUnit.getLevel() >= 4:
pUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_BLITZ"), True)
## TRAIT_ASPIRATION ##
def onCityDoTurn(self, argsList):
'City Production'
pCity = argsList[0]
iPlayer = argsList[1]
if not pCity.isWeLoveTheKingDay():
pPlayer = gc.getPlayer(iPlayer)
if pPlayer.hasTrait(gc.getInfoTypeForString("TRAIT_ASPIRATION")):
if not pCity.isOccupation() and pCity.angryPopulation(0) <= 0 and pCity.healthRate(False, 0) == 0:
if CyGame().getSorenRandNum(100, "Do We Love The King?") > 75:
pCity.setWeLoveTheKingDay(True)
#### Unique Leader Trait, End
#################### TRIGGERED EVENTS ##################
#################### AUXILIARY METHOD ##################
def doDebug(self,text):
CyInterface().addMessage(0, False, 0, '#DEBUG# ' + text, "", 0, "", CyGame().getReplayMessageColor(0), 0, 0, False, False)
def doPopup(self, text):
popup = PyPopup.PyPopup()
popup.setBodyString(text)
popup.launch()