Need Python Help!

derwin

Chieftain
Joined
Aug 2, 2006
Messages
3
I was trying to modify a mod I found here that changed the tech exchange to function not by trade by by open borders. I was wondering if anyone could point out any errors I have in my code, as I have been attempting to debug it for a few days and am banging my head against the wall...

Thanks in advance for your help...

Code:
## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
## OpenTech by Naf, with minor edits by Derwin


from CvPythonExtensions import *
import CvUtil
import PyHelpers
import Popup as PyPopup

# globals
gc = CyGlobalContext()
PyInfo = PyHelpers.PyInfo
PyPlayer = PyHelpers.PyPlayer

class OpenTech:

	def onTechSelected(self, argsList):
		'Tech Selected'
		iTechType, iPlayer = argsList
		
		player = gc.getPlayer(iPlayer)
		cutOut = False
	
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			listTech = []
			if cutOut != True:
				if oTeam.isHasTech(iTechType) and eTeam.isOpenBorders(iTechType) == True and player.isResearchingTech(iTechType):	
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
					cutOut = True
				else:	
					for i in range(player.getNumCities()):				
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
		cutOut = False
		for iteam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iteam)
			eTeam = gc.getTeam(player.getTeam())
			if cutOut != True:
				if oTeam.isHasTech(iTechType) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iTechType):
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
					cutOut = True
				else:	
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
		cutOut = False
		h=0
		for iteam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iteam)
			eTeam = gc.getTeam(player.getTeam())
			if oTeam.isHasTech(iTechType) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iTechType):
				h=h+1
		hbar = (gc.countCivPlayersAlive()/2)
		hbar2 = (3*gc.countCivPlayersAlive()/4)
		if (h>hbar):
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
		else:
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
		if (h>hbar2):
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
		else:
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)			
	

	def onBeginPlayerTurn(self, argsList):
		'Called at the beginning of a players turn'
		iGameTurn, iPlayer = argsList
		player = gc.getPlayer(iPlayer)
		cutOut = False
		pyPrint("Being player turn)
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			for iLoopTech in range(gc.getNumTechInfos()):
				listTech = []
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and eTeam.isOpenBorders(iTeam) == True and player.isResearchingTech(iLoopTech):	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
							cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
				cutOut = False
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
						cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
				cutOut = False
				h=0
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						h += 1
				hbar = (gc.countCivPlayersAlive()/2)
				hbar2 = (3*gc.countCivPlayersAlive()/4)
				if h>hbar:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
				if h>hbar2:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)			

				
	def onEndPlayerTurn(self, argsList):
		'Called at the end of the beginning of a players turn'
		iGameTurn, iPlayer = argsList
		player = gc.getPlayer(iPlayer)
		cutOut = False
	
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			for iLoopTech in range(gc.getNumTechInfos()):
				listTech = []
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and eTeam.isOpenBorders(iTeam) == True and player.isResearchingTech(iLoopTech):	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
							cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
				cutOut=False
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
						cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
				cutOut = False
				h=0
				if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
					h += 1
				hbar = (gc.countCivPlayersAlive())/2
				hbar2 = 3*(gc.countCivPlayersAlive())/4
				if h>hbar:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
				if h>hbar2:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)
 
derwin said:
I was trying to modify a mod I found here that changed the tech exchange to function not by trade by by open borders. I was wondering if anyone could point out any errors I have in my code, as I have been attempting to debug it for a few days and am banging my head against the wall...

Thanks in advance for your help...

Code:
## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
## OpenTech by Naf, with minor edits by Derwin


from CvPythonExtensions import *
import CvUtil
import PyHelpers
import Popup as PyPopup

# globals
gc = CyGlobalContext()
PyInfo = PyHelpers.PyInfo
PyPlayer = PyHelpers.PyPlayer

class OpenTech:

	def onTechSelected(self, argsList):
		'Tech Selected'
		iTechType, iPlayer = argsList
		
		player = gc.getPlayer(iPlayer)
		cutOut = False
	
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			listTech = []
			if cutOut != True:
				if oTeam.isHasTech(iTechType) and eTeam.isOpenBorders(iTechType) == True and player.isResearchingTech(iTechType):	
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
					cutOut = True
				else:	
					for i in range(player.getNumCities()):				
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
		cutOut = False
		for iteam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iteam)
			eTeam = gc.getTeam(player.getTeam())
			if cutOut != True:
				if oTeam.isHasTech(iTechType) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iTechType):
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
					cutOut = True
				else:	
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
		cutOut = False
		h=0
		for iteam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iteam)
			eTeam = gc.getTeam(player.getTeam())
			if oTeam.isHasTech(iTechType) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iTechType):
				h=h+1
		hbar = (gc.countCivPlayersAlive()/2)
		hbar2 = (3*gc.countCivPlayersAlive()/4)
		if (h>hbar):
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
		else:
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
		if (h>hbar2):
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
		else:
			for i in range(player.getNumCities()):
				player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)			
	

	def onBeginPlayerTurn(self, argsList):
		'Called at the beginning of a players turn'
		iGameTurn, iPlayer = argsList
		player = gc.getPlayer(iPlayer)
		cutOut = False
		pyPrint("Being player turn)
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			for iLoopTech in range(gc.getNumTechInfos()):
				listTech = []
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and eTeam.isOpenBorders(iTeam) == True and player.isResearchingTech(iLoopTech):	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
							cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
				cutOut = False
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
						cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
				cutOut = False
				h=0
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						h += 1
				hbar = (gc.countCivPlayersAlive()/2)
				hbar2 = (3*gc.countCivPlayersAlive()/4)
				if h>hbar:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
				if h>hbar2:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)			

				
	def onEndPlayerTurn(self, argsList):
		'Called at the end of the beginning of a players turn'
		iGameTurn, iPlayer = argsList
		player = gc.getPlayer(iPlayer)

		cutOut = False
	
		for iTeam in range(gc.getMAX_TEAMS()):
			oTeam = gc.getTeam(iTeam)
			eTeam = gc.getTeam(player.getTeam())
			for iLoopTech in range(gc.getNumTechInfos()):
				listTech = []
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and eTeam.isOpenBorders(iTeam) == True and player.isResearchingTech(iLoopTech):	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 1)
							cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE"), 0)
				cutOut=False
				if cutOut != True:
					if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 1)
						cutOut = True
					else:	
						for i in range(player.getNumCities()):
							player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE2"), 0)
				cutOut = False
				h=0
				if oTeam.isHasTech(iLoopTech) and oTeam.canContact(TeamType eTeam) == True and player.isResearchingTech(iLoopTech):
					h += 1
				hbar = (gc.countCivPlayersAlive())/2
				hbar2 = 3*(gc.countCivPlayersAlive())/4
				if h>hbar:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE3"), 0)
				if h>hbar2:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 1)
				else:
					for i in range(player.getNumCities()):
						player.getCity(i).setHasRealBuilding(gc.getInfoTypeForString("BUILDING_ACADEMY_EXCHANGE4"), 0)

That's a lot of code to be sifting through without any specific errors to be looking for :P
 
Yep, you should be able to narrow down the problem yourself. Do you run Civ IV in debug mode? Anyway, I had a look at the beginning of the code and found a fishy thing:

Code:
				if oTeam.isHasTech(iTechType) and [B]eTeam.isOpenBorders(iTechType)[/B] == True and player.isResearchingTech(iTechType):	
					for i in range(player.getNumCities()):

eTeam.isOpenBorders(iTechType) should probably be eTeam.isOpenBorders(iTeam). Dunno of that's the only problem with your code.
 
Teg_Navanis said:
Yep, you should be able to narrow down the problem yourself. Do you run Civ IV in debug mode? Anyway, I had a look at the beginning of the code and found a fishy thing:

Code:
				if oTeam.isHasTech(iTechType) and [B]eTeam.isOpenBorders(iTechType)[/B] == True and player.isResearchingTech(iTechType):	
					for i in range(player.getNumCities()):

eTeam.isOpenBorders(iTechType) should probably be eTeam.isOpenBorders(iTeam). Dunno of that's the only problem with your code.

Yes, that does look wrong doesn't it.:)
 
A bit later in the code:

Code:
				if oTeam.isHasTech(iTechType) and [B]oTeam.canContact(TeamType eTeam)[/B] == True and player.isResearchingTech(iTechType):

You don't have to write TeamType, just make it oTeam.canContact(eTeam)
 
Back
Top Bottom