Victory Points

Shiggs713

Immortal
Joined
Mar 11, 2007
Messages
2,361
Location
Indianapolis
I'm trying to recreate the score victory how it is in the Rise of Rome mod that came with Warlords. I got everything to load up, I don't get any python exceptions or crashes or anything like that, but its just not doing anything. I must be missing something or have overlooked something so here is what I've done so far.

in BugEventManager.py (my main one)
Code:
...
import InputUtil
import types
import MongolCamp
import WinterModEventManager
[COLOR="Blue"]import AmericanCivilWarEventManager[/COLOR]
# BUG - Mac Support - start
BugUtil.fixSets(globals())
...

Code:
...
		# --> INSERT EVENT HANDLER INITIALIZATION HERE <--				
		MongolCamp.MongolCamp(self)
		WinterModEventManager.WinterModEventManager(self)	
		[COLOR="Blue"]AmericanCivilWarEventManager.AmericanCivilWarEventManager(self)[/COLOR]
		
		# add new core events; see unused sample handlers below for argument lists
		self.addEvent("PreGameStart")
		self.addEvent("BeginActivePlayerTurn")
...

then over in my AmericanCivilWarEventManager I have this;
Code:
# American Civil War
# Civilization 4 (c) 2005 Firaxis Games

from CvPythonExtensions import *
import CvUtil
import CvRiseOfRomeGameUtils
import CvAdvisorUtils
import CvScreensInterface
import CvWBPopups
import pickle
import PyHelpers
import Popup as PyPopup
import CvTopCivs
import sys


gc = CyGlobalContext()
localText = CyTranslator()
PyPlayer = PyHelpers.PyPlayer
PyInfo = PyHelpers.PyInfo

# globals
###################################################
class AmericanCivilWarEventManager:
	def __init__(self, eventManager):
		eventManager.addEventHandler("BeginGameTurn", self.onGameStart)	
		
		
		#self.gameUtils =  CvGameUtils.CvGameUtils()
		
		# private
		
		# Boolean
	
	def onGameStart(self, argsList):
		'Called at the start of the game'
		if (gc.getGame().getGameTurnYear() == gc.getDefineINT("START_YEAR")):
			for iPlayer in range(gc.getMAX_PLAYERS()):
				player = gc.getPlayer(iPlayer)
				if (player.isAlive() and player.isHuman()):
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_AMERICA"):
						self.__doClearPlot(83,54)
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_CONFEDERATES"):
						self.__doClearPlot(77,41)
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_MEXICO"):
						self.__doClearPlot(32,15)
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_ENGLAND"):
						self.__doClearPlot(81,67)
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_FRANCE"):
						self.__doClearPlot(59,15)
					if player.getCivilizationType() == CvUtil.findInfoTypeNum(gc.getCivilizationInfo,gc.getNumCivilizationInfos(),"CIVILIZATION_SPAIN"):
						self.__doClearPlot(87,19)	
					popupInfo = CyPopupInfo()
					popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
					popupInfo.setText(u"showDawnOfMan")
					popupInfo.addPopup(iPlayer)
					
		if gc.getGame().isPbem():
			for iPlayer in range(gc.getMAX_PLAYERS()):
				player = gc.getPlayer(iPlayer)
				if (player.isAlive() and player.isHuman()):
					popupInfo = CyPopupInfo()
					popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_DETAILS)
					popupInfo.setOption1(true)
					popupInfo.addPopup(iPlayer)
		
		if gc.getGame().isGameMultiPlayer():
			self.__doClearPlot(26,23)
			self.__doClearPlot(13,39)
			self.__doClearPlot(23,10)
			self.__doClearPlot(52,3)
			self.__doClearPlot(41,18)
			
		for i in range(8):
			self.setPlayerScore(i, 0)

	def onBeginPlayerTurn(self, argsList):
		'Called at the beginning of a players turn'
		iGameTurn, iPlayer = argsList
		
		if iPlayer == 0 and iGameTurn == 9:
			if not (gc.getGame().isGameMultiPlayer()):
				self.doPopup("TXT_KEY_ROR_SCORING_POPUP")

	def onEndPlayerTurn(self, argsList):
		'Called at the end of a players turn'
		iGameTurn, iPlayer = argsList
		pyPlayer = gc.getPlayer(iPlayer)
		
		if pyPlayer.getScriptData == "":
			self.setPlayerScore(iPlayer, 0)
		
		score = self.getPlayerScore(iPlayer)
		
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_UNION")):
			score = score + 10
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_CONFEDERATE")):
			score = score + 10
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_BRITISH")):
			score = score + 10
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_FRENCH")):
			score = score + 10
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_MEXICAN")):
			score = score + 10
		if pyPlayer.getCapitalCity().hasBonus(CvUtil.findInfoTypeNum(gc.getBonusInfo, gc.getNumBonusInfos(),"BONUS_VICTORY_SPANISH")):
			score = score + 10
			
		self.setPlayerScore(iPlayer, score)	
		
		if (gc.getGame().getElapsedGameTurns() == 1):
			if (gc.getPlayer(iPlayer).isHuman()):
				if (gc.getPlayer(iPlayer).canRevolution(0)):
					popupInfo = CyPopupInfo()
					popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_CHANGECIVIC)
					popupInfo.addPopup(iPlayer)
		
		CvAdvisorUtils.resetAdvisorNags()
		CvAdvisorUtils.endTurnFeats(iPlayer)


	def __doClearPlot(self, x, y):
		gc.getMap().plot(x, y).setBonusType(-1)
		gc.getMap().plot(x, y).setImprovementType(-1)

	def doPopup(self, text):
			
		popup = PyPopup.PyPopup()
		popup.setBodyString(localText.getText(text, ()))
		popup.launch()	

#################### TRIGGERED EVENTS ##################	
	def getPlayerScore(self, iPlayer):
		
		pPlayer = gc.getPlayer(iPlayer)
		
		if (pPlayer.getScriptData() == ""):
			return 0
		
		# Load Script Data - Score
		szScriptData = pickle.loads(pPlayer.getScriptData())
		iScore = szScriptData[0]
		
		return iScore
		
	def setPlayerScore(self, iPlayer, iValue):
		
		pPlayer = gc.getPlayer(iPlayer)
		szScriptData=[0]
		# Save Script Data - Score
		szScriptData[0] = iValue
		pPlayer.setScriptData(pickle.dumps(szScriptData))	
		
	def calculateScore(self,argsList):
		ePlayer = argsList[0]
		bFinal = argsList[1]
		bVictory = argsList[2]
		pyPlayer = gc.getPlayer(ePlayer)
		
		print("pyPlayer.getScriptData()")
		print(pyPlayer.getScriptData())
		
		if (pyPlayer.getScriptData() == ""):
			setPlayerScore(ePlayer, 0)
		
		if gc.getGame().isGameMultiPlayer():
			iPopulationScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getPopScore(), gc.getGame().getInitPopulation(), gc.getGame().getMaxPopulation(), gc.getDefineINT("SCORE_POPULATION_FACTOR"), True, bFinal, bVictory)
			iLandScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getLandScore(), gc.getGame().getInitLand(), gc.getGame().getMaxLand(), gc.getDefineINT("SCORE_LAND_FACTOR"), True, bFinal, bVictory)
			iTechScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getTechScore(), gc.getGame().getInitTech(), gc.getGame().getMaxTech(), gc.getDefineINT("SCORE_TECH_FACTOR"), True, bFinal, bVictory)
			iWondersScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getWondersScore(), gc.getGame().getInitWonders(), gc.getGame().getMaxWonders(), gc.getDefineINT("SCORE_WONDER_FACTOR"), False, bFinal, bVictory)
			return int(iPopulationScore + iLandScore + iWondersScore + iTechScore)
		else:
			iSinglePlayerScore = getPlayerScore(ePlayer)
			return iSinglePlayerScore
this is basically the pieces of the RiseOfRomeEventManager that I thought I needed, and edited to my needs. There are new improvements and resources to provide the said victory points, and they are on the plots I have listed. There may be a problem with that initial if statement for onGameStart, I'm not sure but just so you know, I'm using calendar_weeks, and the game turn is 8 on game start, with a game year of 1861, so that it starts: Week 1, March 1861. Its scenario only.

Also the points are not setting to zero for everyone at gamestart like I want them to.

and the cvRiseOfRomeGameUtils

Code:
## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
##
## Implementaion of miscellaneous game functions

import CvUtil
import AmericanCivilWarEventManager
import CvEventManager
import CvScreensInterface
from CvPythonExtensions import *
import CvWBPopups
import PyHelpers
import Popup as PyPopup
import CvCameraControls
import CvTopCivs
import sys

# globals
gc = CyGlobalContext()

class CvGameUtils:
	"Miscellaneous game functions"
	def __init__(self):
		return
	
	def isVictoryTest(self):
		if ( gc.getGame().getElapsedGameTurns() > 10 ):
			return True
		else:
			return False

	def isPlayerResearch(self, argsList):
		ePlayer = argsList[0]
		return True

	def getExtraCost(self, argsList):
		ePlayer = argsList[0]
		return 0

	def createBarbarianCities(self):
		return False
		
	def createBarbarianUnits(self):
		return False
		
	def skipResearchPopup(self,argsList):
		ePlayer = argsList[0]
		return False
		
	def showTechChooserButton(self,argsList):
		ePlayer = argsList[0]
		return True

	def getFirstRecommendedTech(self,argsList):
		ePlayer = argsList[0]
		return TechTypes.NO_TECH

	def getSecondRecommendedTech(self,argsList):
		ePlayer = argsList[0]
		eFirstTech = argsList[1]
		return TechTypes.NO_TECH

	def skipProductionPopup(self,argsList):
		pCity = argsList[0]
		return False
		
	def showExamineCityButton(self,argsList):
		pCity = argsList[0]
		return True

	def getRecommendedUnit(self,argsList):
		pCity = argsList[0]
		return UnitTypes.NO_UNIT

	def getRecommendedBuilding(self,argsList):
		pCity = argsList[0]
		return BuildingTypes.NO_BUILDING

	def updateColoredPlots(self):
		return False

	def isActionRecommended(self,argsList):
		pUnit = argsList[0]
		iAction = argsList[1]
		return False

	def cannotHandleAction(self,argsList):
		pPlot = argsList[0]
		iAction = argsList[1]
		bTestVisible = argsList[2]
		return False

	def cannotSelectionListMove(self,argsList):
		pPlot = argsList[0]
		bAlt = argsList[1]
		bShift = argsList[2]
		bCtrl = argsList[3]
		return False

	def cannotSelectionListGameNetMessage(self,argsList):
		eMessage = argsList[0]
		iData2 = argsList[1]
		iData3 = argsList[2]
		iData4 = argsList[3]
		iFlags = argsList[4]
		bAlt = argsList[5]
		bShift = argsList[6]
		return False

	def cannotDoControl(self,argsList):
		eControl = argsList[0]
		return False

	def canResearch(self,argsList):
		ePlayer = argsList[0]
		eTech = argsList[1]
		bTrade = argsList[2]
		return False

	def cannotResearch(self,argsList):
		ePlayer = argsList[0]
		eTech = argsList[1]
		bTrade = argsList[2]
		return False

	def canDoCivic(self,argsList):
		ePlayer = argsList[0]
		eCivic = argsList[1]
		return False

	def cannotDoCivic(self,argsList):
		ePlayer = argsList[0]
		eCivic = argsList[1]
		return False
		
	def canTrain(self,argsList):
		pCity = argsList[0]
		eUnit = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		return False

	def cannotTrain(self,argsList):
		pCity = argsList[0]
		eUnit = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		return False

	def canConstruct(self,argsList):
		pCity = argsList[0]
		eBuilding = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		bIgnoreCost = argsList[4]
		return False

	def cannotConstruct(self,argsList):
		pCity = argsList[0]
		eBuilding = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		bIgnoreCost = argsList[4]
		return False

	def canCreate(self,argsList):
		pCity = argsList[0]
		eProject = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		return False

	def cannotCreate(self,argsList):
		pCity = argsList[0]
		eProject = argsList[1]
		bContinue = argsList[2]
		bTestVisible = argsList[3]
		return False

	def canMaintain(self,argsList):
		pCity = argsList[0]
		eProcess = argsList[1]
		bContinue = argsList[2]
		return False

	def cannotMaintain(self,argsList):
		pCity = argsList[0]
		eProcess = argsList[1]
		bContinue = argsList[2]
		return False

	def AI_chooseTech(self,argsList):
		ePlayer = argsList[0]
		bFree = argsList[1]
		return TechTypes.NO_TECH

	def AI_chooseProduction(self,argsList):
		pCity = argsList[0]
		return False

	def AI_unitUpdate(self,argsList):
		pUnit = argsList[0]
		return False

	def AI_doWar(self,argsList):
		eTeam = argsList[0]
		return False

	def AI_doDiplo(self,argsList):
		ePlayer = argsList[0]
		return False

	def calculateScore(self,argsList):
		ePlayer = argsList[0]
		bFinal = argsList[1]
		bVictory = argsList[2]
		pyPlayer = gc.getPlayer(ePlayer)
		
		print("pyPlayer.getScriptData()")
		print(pyPlayer.getScriptData())
		
		if (pyPlayer.getScriptData() == ""):
			CvRiseOfRomeEventManager.CvRiseOfRomeEventManager().setPlayerScore(ePlayer, 0)
		
		if gc.getGame().isGameMultiPlayer():
			iPopulationScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getPopScore(), gc.getGame().getInitPopulation(), gc.getGame().getMaxPopulation(), gc.getDefineINT("SCORE_POPULATION_FACTOR"), True, bFinal, bVictory)
			iLandScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getLandScore(), gc.getGame().getInitLand(), gc.getGame().getMaxLand(), gc.getDefineINT("SCORE_LAND_FACTOR"), True, bFinal, bVictory)
			iTechScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getTechScore(), gc.getGame().getInitTech(), gc.getGame().getMaxTech(), gc.getDefineINT("SCORE_TECH_FACTOR"), True, bFinal, bVictory)
			iWondersScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getWondersScore(), gc.getGame().getInitWonders(), gc.getGame().getMaxWonders(), gc.getDefineINT("SCORE_WONDER_FACTOR"), False, bFinal, bVictory)
			return int(iPopulationScore + iLandScore + iWondersScore + iTechScore)
		else:
			iSinglePlayerScore = CvRiseOfRomeEventManager.CvRiseOfRomeEventManager().getPlayerScore(ePlayer)
			return iSinglePlayerScore
			
		
		
	def doHolyCity(self):
		return False

	def doHolyCityTech(self,argsList):
		eTeam = argsList[0]
		ePlayer = argsList[1]
		eTech = argsList[2]
		bFirst = argsList[3]
		return False

	def doGold(self,argsList):
		ePlayer = argsList[0]
		return False

	def doResearch(self,argsList):
		ePlayer = argsList[0]
		return False

	def doGoody(self,argsList):
		ePlayer = argsList[0]
		pPlot = argsList[1]
		pUnit = argsList[2]
		return False

	def doGrowth(self,argsList):
		pCity = argsList[0]
		return False

	def doProduction(self,argsList):
		pCity = argsList[0]
		return False

	def doCulture(self,argsList):
		pCity = argsList[0]
		return False

	def doPlotCulture(self,argsList):
		pCity = argsList[0]
		bUpdate = argsList[1]
		return False

	def doReligion(self,argsList):
		pCity = argsList[0]
		return False

	def doGreatPeople(self,argsList):
		pCity = argsList[0]
		return False

	def doMeltdown(self,argsList):
		pCity = argsList[0]
		return False
	
	def doReviveActivePlayer(self,argsList):
		"allows you to perform an action after an AIAutoPlay"
		iPlayer = argsList[0]
		return False

	def doPillageGold(self, argsList):
		"controls the gold result of pillaging"
		pPlot = argsList[0]
		pUnit = argsList[1]
		
		iPillageGold = 0
		iPillageGold = CyGame().getSorenRandNum(gc.getImprovementInfo(pPlot.getImprovementType()).getPillageGold(), "Pillage Gold 1")
		iPillageGold += CyGame().getSorenRandNum(gc.getImprovementInfo(pPlot.getImprovementType()).getPillageGold(), "Pillage Gold 2")

		iPillageGold += (pUnit.getPillageChange() * iPillageGold) / 100
		
		return iPillageGold
	
	def doCityCaptureGold(self, argsList):
		"controls the gold result of capturing a city"
		
		pOldCity = argsList[0]
		
		iCaptureGold = 0
		
		iCaptureGold += gc.getDefineINT("BASE_CAPTURE_GOLD")
		iCaptureGold += (pOldCity.getPopulation() * gc.getDefineINT("CAPTURE_GOLD_PER_POPULATION"))
		iCaptureGold += CyGame().getSorenRandNum(gc.getDefineINT("CAPTURE_GOLD_RAND1"), "Capture Gold 1")
		iCaptureGold += CyGame().getSorenRandNum(gc.getDefineINT("CAPTURE_GOLD_RAND2"), "Capture Gold 2")

		if (gc.getDefineINT("CAPTURE_GOLD_MAX_TURNS") > 0):
			iCaptureGold *= cyIntRange((CyGame().getGameTurn() - pOldCity.getGameTurnAcquired()), 0, gc.getDefineINT("CAPTURE_GOLD_MAX_TURNS"))
			iCaptureGold /= gc.getDefineINT("CAPTURE_GOLD_MAX_TURNS")
		
		return iCaptureGold

g_GameUtils = CvGameUtils()
I know thats screwball having cvRiseofRomeGameUtil and AmericanCivilWarEventManager importing each other, but thats how RoR was so thats how I put it. I guess I could change cvRiseofRomeGameUtil to cvACWGameUtil but I didn't think it would make a difference really. I also have a feeling I may need to merge cvRiseofRomeGameUtil.py into the bugGameUtil maybe. Thanks for any help,

Shiggs
 
no dawn of man. I know for a fact its initializing the AmericanCivilWarEventManager, If I mess it up I lose the interface...

its pretty weird. I might try to simply things, say just try to get all players score at zero, and work from there.
 
yea, the way BUG is written and the way RoR was written are like polar opposites. Honestly it looks like RoR is basically all hacked together, sloppy as hell. Tons of code still in there that isn't even doing anything or is commented out and still there for no apparent reason.

I just commented my initialize statement out for now, maybe I'll figure it out eventually. This would be more of a bonus to the mod anyways, not exactly necessary, since in civ you kinda decide your own victories anyways I think.
 
Top Bottom