setImprovementType onCityRazed

openyourmind

Chieftain
Joined
Feb 22, 2016
Messages
51
Hello,

i am trying to merge next war python features with Better Bat AI ( based on BUG mod). All is ok, but part of event manager refuses to work. Upon raze, if city has one of three buildings (arcology), it should create a different ruin (by game definition, improvement).

From python debug, I can see 2 improvements are built if one of surviving buildings is arcology. My only guess is that game builds 2 ruins and replaces my custom one. I tried to raze city without the buildings that would cause creation of special ruins, and debug shows only one improvement built

Here is the log

Spoiler :

Code:
19:51:25 DEBUG: Timer - scores took 15 ms
19:51:25 DEBUG: Timer - scores took 15 ms
19:51:27 DEBUG: BugEventManager - event gotoPlotSet: (<CvPythonExtensions.CyPlot object at 0x1F1F95E0>, 0)
19:51:28 DEBUG: BugEventManager - event gotoPlotSet: (<CvPythonExtensions.CyPlot object at 0x1F1F96C0>, 0)
19:51:29 DEBUG: BugEventManager - event changeWar: (1, 0, 1)
19:51:29 DEBUG: BugEventManager - event improvementBuilt: (2, 98, 15)
19:51:29 DEBUG: BugEventManager - event cityLost: (<CvPythonExtensions.CyCity object at 0x1F1F95E0>,)
19:51:29 DEBUG: BugEventManager - event improvementDestroyed: (2, 0, 98, 15)
19:51:29 DEBUG: BugEventManager - event cityAcquired: (1, 0, <CvPythonExtensions.CyCity object at 0x1F1F95E0>, 1, 0)
PY:City Acquired Event: Moscow
19:51:29 DEBUG: BugEventManager - event unitMove: (<CvPythonExtensions.CyPlot object at 0x1F1F95E0>, <CvPythonExtensions.CyUnit object at 0x1F45B260>, <CvPythonExtensions.CyPlot object at 0x1F45B3E8>)
19:51:29 DEBUG: BugEventManager - event selectionGroupPushMission: (0, 0, 1, [49157])
19:51:29 DEBUG: Timer - scores took 16 ms
19:51:29 DEBUG: Timer - scores took 15 ms
19:51:32 DEBUG: Timer - scores took 16 ms
19:51:34 DEBUG: BugEventManager - event cityRazed: (<CvPythonExtensions.CyCity object at 0x1F200378>, 0)
PY:City Razed Event: Moscow
PY:City Razed Event: Moscow
19:51:34 DEBUG: BugEventManager - event improvementBuilt: (2, 98, 15)
19:51:34 DEBUG: BugEventManager - event cityLost: (<CvPythonExtensions.CyCity object at 0x1F200378>,)
19:51:35 DEBUG: Timer - scores took 15 ms
19:51:36 DEBUG: BugEventManager - event windowActivation: (0,)
19:52:05 DEBUG: BugEventManager - event windowActivation: (1,)
99 SCREEN TURNED ON

19:52:06 DEBUG: Timer - scores took 25 ms
19:52:12 DEBUG: BugEventManager - event gotoPlotSet: (<CvPythonExtensions.CyPlot object at 0x1F1F3F48>, 0)
19:52:12 DEBUG: BugEventManager - event gotoPlotSet: (<CvPythonExtensions.CyPlot object at 0x1F1F3FB8>, 0)
19:52:12 DEBUG: BugEventManager - event improvementBuilt: (2, 101, 16)
19:52:12 DEBUG: BugEventManager - event cityLost: (<CvPythonExtensions.CyCity object at 0x1F1F3FB8>,)
19:52:12 DEBUG: BugEventManager - event improvementDestroyed: (2, 0, 101, 16)
19:52:12 DEBUG: BugEventManager - event cityAcquired: (1, 0, <CvPythonExtensions.CyCity object at 0x1F1F3FB8>, 1, 0)
PY:City Acquired Event: Rostov
19:52:12 DEBUG: BugEventManager - event unitMove: (<CvPythonExtensions.CyPlot object at 0x1F1F3FB8>, <CvPythonExtensions.CyUnit object at 0x1F1F3880>, <CvPythonExtensions.CyPlot object at 0x1F1F3810>)
19:52:12 DEBUG: BugEventManager - event selectionGroupPushMission: (0, 0, 1, [57350])
19:52:12 DEBUG: Timer - scores took 15 ms
19:52:14 DEBUG: Timer - scores took 16 ms
19:52:16 DEBUG: BugEventManager - event cityRazed: (<CvPythonExtensions.CyCity object at 0x1F45B7D8>, 0)
PY:City Razed Event: Rostov
PY:City Razed Event: Rostov
19:52:16 DEBUG: BugEventManager - event improvementBuilt: (3, 101, 16)
19:52:16 DEBUG: BugEventManager - event improvementBuilt: (2, 101, 16)
19:52:16 DEBUG: BugEventManager - event cityLost: (<CvPythonExtensions.CyCity object at 0x1F45B7D8>,)
19:52:16 DEBUG: Timer - scores took 15 ms
19:52:17 DEBUG: BugEventManager - event windowActivation: (0,)

Here is original eventmanager code
Spoiler :
Code:
   def onCityRazed(self, argsList):
       'City Razed'
       city, iPlayer = argsList
       iOwner = city.findHighestCulture()

       # Partisans!
       if city.getPopulation > 1 and iOwner != -1 and iPlayer != -1:
           owner = gc.getPlayer(iOwner)
           if not owner.isBarbarian() and owner.getNumCities() > 0:
               if gc.getTeam(owner.getTeam()).isAtWar(gc.getPlayer(iPlayer).getTeam()):
                   if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error
                       iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_PARTISANS')
                       if iEvent != -1 and gc.getGame().isEventActive(iEvent) and owner.getEventTriggerWeight(iEvent) < 0:
                           triggerData = owner.initTriggeredData(iEvent, true, -1, city.getX(), city.getY(), iPlayer, city.getID(), -1, -1, -1, -1)
         
       #Raze the Arcology
       owner = PyPlayer(city.getOwner())
       razor = PyPlayer(iPlayer)
     
       self.iArcologyCityID = -1
     
       if city.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_ARCOLOGY")) or city.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_ARCOLOGY_SHIELDING")) or city.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_DEFLECTOR_SHIELDING")):
           self.iArcologyCityID = city.getID()
     
       CvUtil.pyPrint('Player %d Civilization %s City %s was razed by Player %d'
           %(owner.getID(), owner.getCivilizationName(), city.getName(), razor.getID())) 
       CvUtil.pyPrint("City Razed Event: %s" %(city.getName(),))

    def onCityLost(self, argsList):
       'City Lost'
       city = argsList[0]
       player = PyPlayer(city.getOwner())
       
       if city.getID() == self.iArcologyCityID:
           city.plot().setImprovementType(gc.getInfoTypeForString("IMPROVEMENT_CITY_RUINS_ARCOLOGY"))

here is the one created for the merge, kindly provided by Dancing Hoskuld.
Spoiler :

Code:
def onCityRazed( argsList):
   'City Razed'
   city, iPlayer = argsList
   iOwner = city.findHighestCulture()
   
   #Raze the Arcology
   owner = PyPlayer(city.getOwner())
   razor = PyPlayer(iPlayer)
   self.iArcologyCityID = -1
   
   if city.getNumRealBuilding(g_iArcologyID) or city.getNumRealBuilding(g_iArcologyShieldingID) or city.getNumRealBuilding(g_iDeflectorShieldingID):
       city.plot().setImprovementType(gc.getInfoTypeForString("IMPROVEMENT_CITY_RUINS_ARCOLOGY")):
           self.iArcologyCityID = city.getID()
           
def onCityLost(self, argsList):
   'City Lost'
   city = argsList[0]
   player = PyPlayer(city.getOwner())
       
   if city.getID() == self.iArcologyCityID:
       city.plot().setImprovementType(gc.getInfoTypeForString("IMPROVEMENT_CITY_RUINS_ARCOLOGY"))

any help is appreciated.
 
Last edited:
Top Bottom