Python Problem: Classic Literature quest reward

Blitzconfusion

Chieftain
Joined
Jul 30, 2014
Messages
70
I ran into a problem when I tried to edit Classic literature quest reward option 2: gain an ancient era tech.
I have never seen anyone actually accomplish this quest (11 libraries on huge) while still having unresearched ancient techs, so I tried to make it give a classical tech instead. I edited the text files to say classical and so on, but:

I made (in entrypoints/CvRandomEventInterface) the following changes, above=original, below modified:
==========================
Spoiler :
def canApplyClassicLiteratureDone2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
player = gc.getPlayer(kTriggeredData.ePlayer)

iEraAncient = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), 'ERA_ANCIENT')

for iTech in range(gc.getNumTechInfos()):
if gc.getTechInfo(iTech).getEra() == iEraAncient and player.canResearch(iTech, false):
return true

return false

def applyClassicLiteratureDone2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
player = gc.getPlayer(kTriggeredData.ePlayer)

iEraAncient = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), 'ERA_ANCIENT')

listTechs = []
for iTech in range(gc.getNumTechInfos()):
if gc.getTechInfo(iTech).getEra() == iEraAncient and player.canResearch(iTech, false):
listTechs.append(iTech)

if len(listTechs) > 0:
iTech = listTechs[gc.getGame().getSorenRandNum(len(listTechs), "Classic Literature Event Tech selection")]
gc.getTeam(player.getTeam()).setHasTech(iTech, true, kTriggeredData.ePlayer, true, true)

======================================
Spoiler :
def canApplyClassicLiteratureDone2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
player = gc.getPlayer(kTriggeredData.ePlayer)

iEraClassical = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), 'ERA_CLASSICAL')

for iTech in range(gc.getNumTechInfos()):
if gc.getTechInfo(iTech).getEra() == iEraClassical and player.canResearch(iTech, false):
return true

return false

def applyClassicLiteratureDone2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
player = gc.getPlayer(kTriggeredData.ePlayer)

iEraAncient = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), 'ERA_CLASSICAL')

listTechs = []
for iTech in range(gc.getNumTechInfos()):
if gc.getTechInfo(iTech).getEra() == iEraClassical and player.canResearch(iTech, false):
listTechs.append(iTech)

if len(listTechs) > 0:
iTech = listTechs[gc.getGame().getSorenRandNum(len(listTechs), "Classic Literature Event Tech selection")]
gc.getTeam(player.getTeam()).setHasTech(iTech, true, kTriggeredData.ePlayer, true, true)

=====
So basically each ancient became classical, but no free tech screen shows up in my games when I choose reward 2, nor do I actually get anything. What is missing?
 
Codes should be put in between codes tags (the # symbol when you type a message). It would respect the indentation (very important in Python). Long ones should go in spoilers.

You should have Python exception popups enabled in your main CivilizationIV.ini file. It would tell you what's wrong. Here, if you really typed this:

Code:
iEraAncient = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), 'ERA_CLASSICAL')

iEraClassical will be undefined.
 
Back
Top Bottom