GUSTAVUS II
Chieftain
Hello, I have a error that occurs while using my own custom event python
with a revolutions mod combined with bugmod.
cyGame changePlayer is a Revolutions Special Function that is triggering
missing cyGame info instead of switching my civ with another civ like it should.
ChangePlayer works well in other mods. I think I am just leaving something out.
The rest of my code is functioning properly, I believe I must not be importing
something correctly or I am missing a class. The info I have questions about
I will show in bold below.
with a revolutions mod combined with bugmod.
cyGame changePlayer is a Revolutions Special Function that is triggering
missing cyGame info instead of switching my civ with another civ like it should.
Code:
AttributeError: 'CyGame' object has no attribute changePlayer
ChangePlayer works well in other mods. I think I am just leaving something out.
The rest of my code is functioning properly, I believe I must not be importing
something correctly or I am missing a class. The info I have questions about
I will show in bold below.
Code:
[INDENT]
[B]from CvPythonExtensions import *
import CvEventManager
import CvUtil
import PyHelpers
import Popup as PyPopup
import pickle
import random
import CvTranslator
import sys
import CvAlertManager
import RevDefs
import RevUtils
import RevInstances
import RevolutionInit
import SdToolKitCustom as SDTK
import RevData
import ChangePlayer[/B]
[B]# globals
gc = CyGlobalContext()
g = CyGame()
alert = CvAlertManager.CvAlertManager()
PyPlayer = PyHelpers.PyPlayer
PyInfo = PyHelpers.PyInfo
localText = CyTranslator()
game = CyGame()
#the main class
class CvGustavusEventManager:
def __init__(self, eventManager):
# initialize base class
eventManager.addEventHandler("BeginGameTurn", self.onBeginGameTurn)
# When a turn begins :
def onBeginGameTurn(self, argsList):
iGameTurn, = argsList[/B]
#BE CAREFULL :
#The Map I used to test the Mod is not so big :
# X : from 0 to 103
#Y : from 0 to 63
#
# I tested with create Germany at turn 1 and France + Spain at turn 4 => IT WORKS!
###############################################################
#
# ENTER YOUR INFOS HERE
#
###############################################################
#TURN 1 : Germany
if(iGameTurn == 1):
#Germany have to start
iNewPlayer = 7 # Player ID (= player's position in list) in your Map
self.CreateNewCivGermany(iNewPlayer, 87, 40) # 87 (X) and 40 (Y) are coordonates of the plot where the unit will be created
#TURN 4 : France
elif(iGameTurn == 4):
#France have to start
iNewPlayer = 8 # Player ID (= player's position in list) in your Map
self.CreateNewCivFrance(iNewPlayer, 90, 17) # 90 (X) and 17 (Y) are coordonates of the plot where the unit will be created
#TURN 5 : Spain
elif(iGameTurn == 5):
#Spain have to start too
iNewPlayer = 9 # Player ID (= player's position in list) in your Map
self.CreateNewCivSpain(iNewPlayer, 86, 19)
#TURN 6 : Birth of Christ
elif(iGameTurn == 6):
#Tech Christianity to be Granted
iNewPlayer = 1
self.CreateNewFaith(iNewPlayer, 80, 45)
iTechHappy28 = CvUtil.findInfoTypeNum(gc.getTechInfo,gc.getNumTechInfos(),'TECH_THEOLOGY')
pPlayer = gc.getPlayer(1)
pTeam = gc.getTeam(pPlayer.getTeam())
pTeam.setHasTech(iTechHappy28, true, 19, false, false)
#TURN 7 : Vikings turn into Rome
elif(iGameTurn == 7):
#Switching Civs With Same WBS Slot
playerIdx = 1
newCivType = 40
newLeaderType = 3
self.changeCiv(playerIdx,newCivType,newLeaderType)
#TURN 8 : MAKING A CIV RISE WHEN ANOTHER HAS FALLEN
elif(iGameTurn == 8):
#INFO
iNewPlayer = 12
iPlayer = 3
iPlayer2 = 4
iPlayer3 = 5
iPlayer4 = 6
self.CreateNewCivWhenAnotherisGoneMulti(iNewPlayer,iPlayer,iPlayer2,iPlayer3,iPlayer4, 86, 40)
#TURN 20 : MAKING A CIV RISE WHEN ANOTHER HAS FALLEN
elif(iGameTurn == 20):
#INFO
iNewPlayer = 11
iPlayer = 2
self.CreateNewCivWhenAnotherisGone(iNewPlayer,iPlayer, 49, 45)
#TURN 25 : in reverse
elif(iGameTurn == 25):
#INFO
iNewPlayer = 2
iPlayer = 11
self.CreateNewCivWhenAnotherisGone(iNewPlayer,iPlayer, 49, 45)
#INSERT THE OTHER TURNS/CIVS HERE...
#elif(iGameTurn == ??):
#Germany have to start
#iNewPlayer = ??
#self.CreateNewCiv(iNewPlayer, ??, ??)
###############################################################
#
# END YOUR INFOS HERE
#
###############################################################
# My function that creates the new unit :
def CreateNewCivGermany(self, iNewPlayer, iX, iY):
pCity = CyMap().plot(87,40).getPlotCity()
pNewPlayer = gc.getPlayer(iNewPlayer)
if(not pNewPlayer.isAlive()):
#Create new Player
pNewPlayer.setPlayable(True)
g.addPlayer(iNewPlayer,pNewPlayer.getPersonalityType(), pNewPlayer.getCivilizationType(),True)
#Create a settler
pCity=pNewPlayer.initCity( iX, iY)
pCity.setName("Berlin", False)
pCity.setPopulation(4)
pCity.setFood(533)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_SWORDSMAN"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: A new Civilization (%s) has been created !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
def CreateNewCivFrance(self, iNewPlayer, iX, iY):
pCity = CyMap().plot(90,17).getPlotCity()
pNewPlayer = gc.getPlayer(iNewPlayer)
if(not pNewPlayer.isAlive()):
#Create new Player
pNewPlayer.setPlayable(True)
g.addPlayer(iNewPlayer,pNewPlayer.getPersonalityType(), pNewPlayer.getCivilizationType(),True)
#Create a settler
pCity=pNewPlayer.initCity( iX, iY)
pCity.setName("Paris", False)
pCity.setPopulation(4)
pCity.setFood(533)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_SWORDSMAN"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_SWORDSMAN"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: A new Civilization (%s) has been created !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
def CreateNewCivSpain(self, iNewPlayer, iX, iY):
pCity = CyMap().plot(86,19).getPlotCity()
pNewPlayer = gc.getPlayer(iNewPlayer)
if(not pNewPlayer.isAlive()):
#Create new Player
pNewPlayer.setPlayable(True)
g.addPlayer(iNewPlayer,pNewPlayer.getPersonalityType(), pNewPlayer.getCivilizationType(),True)
#Create a settler
pCity=pNewPlayer.initCity( iX, iY)
pCity.setName("Madrid", False)
pCity.setPopulation(4)
pCity.setFood(533)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: A new Civilization (%s) has been created !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
def CreateNewCivWhenAnotherisGone(self, iNewPlayer,iPlayer, iX, iY):
pNewPlayer = gc.getPlayer(iNewPlayer)
ploopPlayer = gc.getPlayer(iPlayer)
if not ploopPlayer.isHuman() and not pNewPlayer.isAlive():
#Create new Player
pNewPlayer.setPlayable(True)
g.addPlayer(iNewPlayer,pNewPlayer.getPersonalityType(), pNewPlayer.getCivilizationType(),True)
#Create a settler
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_RAIDERTANK"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: A new Civilization (%s) has been created !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
def changeCiv(self,playerIdx,newCivType,newLeaderType):
newPlayer = gc.getPlayer(playerIdx)
newCivType = gc.getPlayer(newCivType)
teamIdx = gc.getPlayer(playerIdx).getTeam()
[B]success = game.changePlayer(playerIdx,newCivType,newLeaderType,teamIdx,0,True )[/B]
CyAudioGame().Play2DSound("AS2D_FANFARE2")
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year 400 BC: Rome has been liberated !",'',0,'',ColorTypes(11), 1, 1, True,True)
game.convertUnits( playerIdx )
return success
def CreateNewCivWhenAnotherisGoneMulti(self, iNewPlayer,iPlayer,iPlayer2,iPlayer3,iPlayer4, iX, iY):
pCity = CyMap().plot(87,40).getPlotCity()
pCity2 = CyMap().plot(85,35).getPlotCity()
pNewPlayer = gc.getPlayer(iNewPlayer)
ploopPlayer = gc.getPlayer(iPlayer)
ploopPlayer2 = gc.getPlayer(iPlayer2)
ploopPlayer3 = gc.getPlayer(iPlayer3)
ploopPlayer4 = gc.getPlayer(iPlayer4)
if not ploopPlayer.isHuman() and not ploopPlayer2.isHuman() and not ploopPlayer3.isHuman() and not ploopPlayer4.isHuman() and not pNewPlayer.isAlive():
#Create new Player
pNewPlayer.setPlayable(True)
g.addPlayer(iNewPlayer,pNewPlayer.getPersonalityType(), pNewPlayer.getCivilizationType(),True)
#Create a settler
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.acquireCity(pCity,true,false)
pCity.setName("New Berlin", False)
pCity.setPopulation(10)
pCity.setFood(533)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), 85, 35, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_INFANTRY"), 85, 35, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
pCity2=pNewPlayer.initCity( 85, 35)
pCity2.setName("Koln", False)
pCity2.setPopulation(6)
pCity2.setFood(133)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: A new Civilization (%s) has been created !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
def CreateNewFaith(self, iNewPlayer, iX, iY):
pNewPlayer = gc.getPlayer(iNewPlayer)
if(pNewPlayer.isAlive()):
#Rome is Alive
#Create a unit
pNewPlayer.initUnit(gc.getInfoTypeForString("UNIT_WORKER"), iX, iY, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
#Add a message on screen
CyInterface().addMessage(g.getActivePlayer(),true,15,"Year %s: The Catholic Church (%s) has been born !" %(g.getGameTurnYear(), pNewPlayer.getCivilizationDescription(pNewPlayer.getCivilizationType())),'',0,'',ColorTypes(11), 1, 1, True,True)
return
[/INDENT]