示例#1
0
def playerCityLost(CyPlayer, CyCity, bConquest = True):

	if CyPlayer.isNPC() or CyPlayer.getNumCities() < 1:
		return

	revIdxChange = (GAME.getGameTurn() - CyCity.getGameTurnAcquired()) * 100.0 / GC.getGameSpeedInfo(GAME.getGameSpeedType()).getSpeedPercent()
	revIdxChange += CyCity.getHighestPopulation()
	revIdxChange *= CyCity.plot().calculateCulturePercent(CyPlayer.getID()) / 100.0

	if revIdxChange > 500:
		revIdxChange = 500
	elif revIdxChange < 0:
		revIdxChange = 0

	if revIdxChange > 0:
		if not bConquest:
			revIdxChange = revIdxChange/4.0

		if CyPlayer.isRebel():
			revIdxChange /= 2.0

	revIdxChange = int(cityLostModifier*revIdxChange + .5)

	print "[REV] Loss of %s by %s (%d bConq): %d rev idx change" %(CyCity.getName(), CyPlayer.getCivilizationDescription(0), bConquest, revIdxChange)

	for cityX in CyPlayer.cities():
		cityX.changeRevolutionIndex(revIdxChange)
		revIdxHist = RevData.getCityVal(cityX,'RevIdxHistory')
		revIdxHist['Events'][0] += revIdxChange
		RevData.updateCityVal(cityX, 'RevIdxHistory', revIdxHist)
示例#2
0
def onBuildingBuilt(argsList):
	pCity, iBuildingType = argsList

	buildingInfo = GC.getBuildingInfo(iBuildingType)

	if buildingInfo.getMaxGlobalInstances() == 1 and buildingInfo.getPrereqReligion() < 0 and buildingInfo.getProductionCost() > 10:
		if LOG_DEBUG:
			print"[REV] World wonder %s build in %s"%(buildingInfo.getDescription(), pCity.getName())
		curRevIdx = pCity.getRevolutionIndex()
		pCity.changeRevolutionIndex(-max([150, curRevIdx / 4]))

		for cityX in GC.getPlayer(pCity.getOwner()).cities():
			curRevIdx = cityX.getRevolutionIndex()
			iRevIdxChange = -max([75, curRevIdx * 12/100])
			cityX.changeRevolutionIndex(iRevIdxChange)
			revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
			revIdxHist['Events'][0] += iRevIdxChange
			RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)

	elif buildingInfo.getMaxPlayerInstances() == 1 and buildingInfo.getPrereqReligion() < 0 and buildingInfo.getProductionCost() > 10:
		if LOG_DEBUG:
			print "[REV] National wonder %s build in %s"%(buildingInfo.getDescription(), pCity.getName())
		curRevIdx = pCity.getRevolutionIndex()
		pCity.changeRevolutionIndex(-max([80, curRevIdx * 12/100]))

		for cityX in GC.getPlayer(pCity.getOwner()).cities():
			curRevIdx = cityX.getRevolutionIndex()
			iRevIdxChange = -max([50, curRevIdx * 7/100])
			cityX.changeRevolutionIndex(iRevIdxChange)
			revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
			revIdxHist['Events'][0] += iRevIdxChange
			RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)
示例#3
0
def onBuildingBuilt(argsList):
	pCity, iBuildingType = argsList

	buildingInfo = GC.getBuildingInfo(iBuildingType)
	buildingClassInfo = GC.getBuildingClassInfo(buildingInfo.getBuildingClassType())

	if( buildingClassInfo.getMaxGlobalInstances() == 1 and buildingInfo.getPrereqReligion() < 0 and buildingInfo.getProductionCost() > 10 ) :
		if( LOG_DEBUG ) : CvUtil.pyPrint("  Revolt - World wonder %s build in %s"%(buildingInfo.getDescription(),pCity.getName()))
		curRevIdx = pCity.getRevolutionIndex()
		pCity.changeRevolutionIndex( -max([150,int(0.25*curRevIdx)]) )
		for city in PyPlayer(pCity.getOwner()).getCityList() :
			listCity = city.GetCy()
			curRevIdx = listCity.getRevolutionIndex()
			iRevIdxChange = -max([75,int(0.12*curRevIdx)])
			listCity.changeRevolutionIndex( iRevIdxChange )
			revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
			revIdxHist['Events'][0] += iRevIdxChange
			RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )

	elif( buildingClassInfo.getMaxPlayerInstances() == 1 and buildingInfo.getPrereqReligion() < 0 and buildingInfo.getProductionCost() > 10 ) :
		if( LOG_DEBUG ) : CvUtil.pyPrint("  Revolt - National wonder %s build in %s"%(buildingInfo.getDescription(),pCity.getName()))
		curRevIdx = pCity.getRevolutionIndex()
		pCity.changeRevolutionIndex( -max([80,int(0.12*curRevIdx)]) )
		for city in PyPlayer(pCity.getOwner()).getCityList() :
			listCity = city.GetCy()
			curRevIdx = listCity.getRevolutionIndex()
			iRevIdxChange = -max([50,int(0.07*curRevIdx)])
			listCity.changeRevolutionIndex( iRevIdxChange )
			revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
			revIdxHist['Events'][0] += iRevIdxChange
			RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )
示例#4
0
def playerCityLost(CyPlayer, CyCity, bConquest = True):

	if CyPlayer.isNPC() or CyPlayer.getNumCities() < 1:
		return

	iPlayer = CyPlayer.getID()

	revIdxChange = (GAME.getGameTurn() - CyCity.getGameTurnAcquired())*100.0/GC.getGameSpeedInfo(GAME.getGameSpeedType()).getAnarchyPercent()
	revIdxChange += CyCity.getHighestPopulation()
	revIdxChange *= CyCity.plot().calculateCulturePercent(iPlayer)/100.0

	if revIdxChange > 500:
		revIdxChange = 500
	elif revIdxChange < 0:
		revIdxChange = 0

	if revIdxChange > 0:
		if not bConquest:
			revIdxChange = revIdxChange/4.0

		if CyPlayer.isRebel():
			revIdxChange /= 2.0

	revIdxChange = int(cityLostModifier*revIdxChange + .5)

	print "	Revolt - Loss of %s by %s (%d bConq): %d rev idx change" %(CyCity.getName(), CyPlayer.getCivilizationDescription(0), bConquest, revIdxChange)

	CyCityX, i = CyPlayer.firstCity(False)
	while CyCityX:
		if not CyCityX.isNone() and CyCityX.getOwner() == iPlayer:
			CyCityX.changeRevolutionIndex(revIdxChange)
			revIdxHist = RevData.getCityVal(CyCityX,'RevIdxHistory')
			revIdxHist['Events'][0] += revIdxChange
			RevData.updateCityVal(CyCityX, 'RevIdxHistory', revIdxHist)
		CyCityX, i = CyPlayer.nextCity(i, False)
示例#5
0
def updateRevolutionIndices( argsList ) :
	owner,playerType,pCity,bConquest,bTrade = argsList

	newOwnerID = pCity.getOwner()
	newOwner = GC.getPlayer(newOwnerID)
	newOwnerCiv = newOwner.getCivilizationType()
	oldOwnerID = pCity.getPreviousOwner()
	orgOwnerID = pCity.getOriginalOwner()

	if( newOwner.isNPC() ) :
		return

	newRevIdx = 400
	changeRevIdx = -40

	if( bConquest ) :
		# Occupied cities also rack up rev points each turn
		newRevIdx += pCity.getRevolutionIndex()/4
		newRevIdx = min( [newRevIdx, 600] )

		if( pCity.plot().calculateCulturePercent( newOwnerID ) > 90 ) :
			changeRevIdx -= 75
			newRevIdx -= 100
		elif( pCity.plot().calculateCulturePercent( newOwnerID ) > 40 ) :
			changeRevIdx -= 35
			newRevIdx -= 60
		elif( pCity.plot().calculateCulturePercent( newOwnerID ) > 20 ) :
			changeRevIdx -= 30

	elif( bTrade ) :
		newRevIdx += pCity.getRevolutionIndex()/3
		newRevIdx = min( [newRevIdx, 650] )

		if( pCity.plot().calculateCulturePercent( newOwnerID ) > 90 ) :
			newRevIdx -= 50

	else :
		# Probably cultural conversion
		newRevIdx -= 100
		if( pCity.plot().calculateCulturePercent( newOwnerID ) > 50 ) :
			changeRevIdx -= 25


	if( newOwner.isRebel() and newOwnerCiv == RevData.getCityVal(pCity, 'RevolutionCiv') ) :
		changeRevIdx -= 50
		newRevIdx -= 200
	elif( newOwnerID == pCity.getOriginalOwner() ) :
		changeRevIdx -= 25
		newRevIdx -= 100

	if( pCity.getHighestPopulation() < 6 ) :
		changeRevIdx += 20
		newRevIdx -= 50

	changeRevIdx = int(math.floor( cityAcquiredModifier*changeRevIdx + .5 ))

	print "	Revolt - Acquisition of %s by %s reduces rev indices by %d" %(pCity.getName(), newOwner.getCivilizationDescription(0), changeRevIdx)

	iCityID = pCity.getID()
	for pListCity in newOwner.cities():
		if pListCity.getID() != iCityID:
			pListCity.changeRevolutionIndex(changeRevIdx)
			revIdxHist = RevData.getCityVal(pListCity,'RevIdxHistory')
			revIdxHist['Events'][0] += changeRevIdx
			RevData.updateCityVal(pListCity, 'RevIdxHistory', revIdxHist)

	print "	Revolt - New rev idx for %s is %d" %(pCity.getName(), newRevIdx)

	pCity.setRevolutionIndex( newRevIdx )
	pCity.setRevIndexAverage( newRevIdx )
	pCity.setRevolutionCounter( acquiredTurns )
	pCity.setReinforcementCounter( 0 )
	RevData.updateCityVal( pCity, 'RevIdxHistory', RevDefs.initRevIdxHistory() )

	if newOwner.isRebel():
		if newOwner.getNumCities() > 1 and RevData.revObjectGetVal(newOwner, 'CapitalName') == CvUtil.convertToStr(pCity.getName()):
			# Rebel has captured their instigator city, make this their capital
			print "[REV] Rebel %s have captured their instigator city, %s!  Moving capital." %(newOwner.getCivilizationDescription(0), pCity.getName())
			if newOwner.isHuman():
				# TODO: support this with a popup question
				pass
			else:
				eCapitalBuilding = GC.getInfoTypeForString(RevDefs.sXMLPalace)
				oldCapital = newOwner.getCapitalCity()
				oldCapital.setNumRealBuilding(eCapitalBuilding, 0)
				pCity.setNumRealBuilding(eCapitalBuilding, 1)

		# Ripple effects through other rebellious cities
		for cityX in GC.getPlayer(oldOwnerID).cities():
			reinfCount = cityX.getReinforcementCounter()
			if reinfCount > 2 and RevData.getCityVal(cityX, 'RevolutionCiv') == newOwner.getCivilizationType():
				if reinfCount < 5:
					reinfCount = 2
				else: reinfCount -= 2

				print "[REV] Accelerating reinforcement in " + cityX.getName()
				# Setting below two will turn off reinforcement
				if reinfCount < 2: reinfCount = 2
				cityX.setReinforcementCounter(reinfCount)
示例#6
0
def onChangeWar(argsList):

	if argsList[0]: return # War declarations are of no interest
	iTeam = argsList[1]
	iRivalTeam = argsList[2]

	# Check if this is peaceful end to a revolution
	onTeamList = []
	onTeamCivs = []
	onRivalTeamList = []
	onRivalTeamCivs = []
	for i in xrange(MAX_PC_PLAYERS):
		pPlayer = GC.getPlayer(i)
		if pPlayer.isAlive():
			if pPlayer.getTeam() == iTeam:
				# On team declaring peace
				onTeamList.append(pPlayer)
				onTeamCivs.append(pPlayer.getCivilizationType())

			elif pPlayer.getTeam() == iRivalTeam:
				# On team accepting peace
				onRivalTeamList.append(pPlayer)
				onRivalTeamCivs.append(pPlayer.getCivilizationType())

	for pPlayer in onTeamList:
		for pCity in pPlayer.cities():

			revCiv = RevData.getCityVal(pCity, "RevolutionCiv")

			if (revCiv in onRivalTeamCivs
			and RevData.getCityVal(pCity, "RevolutionTurn") is not None
			and GAME.getGameTurn() - RevData.getCityVal(pCity, "RevolutionTurn") < 30
			):
				# City recently rebelled for civ now at peace
				localIdx = pCity.getLocalRevIndex()
				revIdx = pCity.getRevolutionIndex()
				revCnt = pCity.getNumRevolts(pCity.getOwner())
				if LOG_DEBUG:
					print "[REV] Rebels in %s have agreed to peace (%d, %d, %d)"%(pCity.getName(), revIdx, localIdx, revCnt)
				iDividend = 20
				if localIdx < 0:
					iDividend += 10
				if revIdx > RevOpt.getAlwaysViolentThreshold():
					iDividend += 10
				if revCnt > 2: # Hardened, stubborn populace
					iDividend -= 5

				changeRevIdx = -revIdx * iDividend / 100
				pCity.changeRevolutionIndex(changeRevIdx)
				pCity.setRevolutionIndex(min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]))
				revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
				revIdxHist['Events'][0] += changeRevIdx
				RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)
				pCity.setOccupationTimer(0)
				if LOG_DEBUG:
					print "[REV] Rev index in %s decreased to %d (from %d)"%(pCity.getName(), pCity.getRevolutionIndex(), revIdx)

		GC.getTeam(pPlayer.getTeam()).setRebelAgainst(iRivalTeam, False)

	for pPlayer in onRivalTeamList:
		for pCity in pPlayer.cities():

			revCiv = RevData.getCityVal( pCity, "RevolutionCiv" )
			if (revCiv in onTeamCivs
			and RevData.getCityVal( pCity, "RevolutionTurn" ) is not None
			and GAME.getGameTurn() - RevData.getCityVal(pCity, "RevolutionTurn") < 30
			):
				# City recently rebelled for civ now at peace
				localIdx = pCity.getLocalRevIndex()
				revIdx = pCity.getRevolutionIndex()
				revCnt = pCity.getNumRevolts(pCity.getOwner())
				if LOG_DEBUG:
					print "[REV] Rebels in %s have sued for peace" % pCity.getName()
				iDividend = 20
				if localIdx < 0:
					iDividend += 10
				if revIdx > RevOpt.getAlwaysViolentThreshold():
					iDividend += 10
				if revCnt > 2: # Hardened, stubborn populace
					iDividend -= 5

				changeRevIdx = -revIdx * iDividend / 100
				pCity.changeRevolutionIndex( changeRevIdx )
				pCity.setRevolutionIndex(min([pCity.getRevolutionIndex(), RevOpt.getAlwaysViolentThreshold()]))
				revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
				revIdxHist['Events'][0] += changeRevIdx
				RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)
				pCity.setOccupationTimer(0)
				if LOG_DEBUG:
					print "[REV] Rev index in %s decreased to %d (from %d)"%(pCity.getName(), pCity.getRevolutionIndex(), revIdx)

		GC.getTeam(pPlayer.getTeam()).setRebelAgainst(iTeam, False)
示例#7
0
def onSetPlayerAlive(argsList):

	if argsList[1] != False:
		return
	iPlayerID = argsList[0]
	pPlayer = GC.getPlayer(iPlayerID)

	print '[REV] %s are dead, %d cities lost, %d founded a city'%(pPlayer.getCivilizationDescription(0),pPlayer.getCitiesLost(),pPlayer.isFoundedFirstCity())

	# Check if this was a put down revolution
	for iPlayerX in xrange(MAX_PC_PLAYERS):
		playerX = GC.getPlayer(iPlayerX)
		if not playerX.isAlive():
			continue
		for pCity in playerX.cities():

			revCiv = RevData.getCityVal(pCity, "RevolutionCiv")
			revTurn = RevData.getCityVal(pCity, "RevolutionTurn")

			if revCiv == pPlayer.getCivilizationType() and revTurn > 0:
				if LOG_DEBUG:
					print "[REV] The dying %s are the rebel type for %s"%(pPlayer.getCivilizationDescription(0), pCity.getName())

				if GC.getTeam(pPlayer.getTeam()).isAtWar(pCity.getTeam()):
					revIdx = pCity.getRevolutionIndex()
					localIdx = pCity.getLocalRevIndex()
					revCnt = pCity.getNumRevolts(iPlayerX)
					if pCity.getReinforcementCounter() > 0:
						# Put down while still fresh
						print "Rev - Revolution put down while still actively revolting"
						iDividend = 30
						if localIdx < 0:
							iDividend += 10
						if revIdx > RevOpt.getAlwaysViolentThreshold():
							iDividend += 10
						if revCnt > 2: # Hardened, stubborn populace
							iDividend -= 8

						changeRevIdx = -revIdx * iDividend / 100
						pCity.changeRevolutionIndex(changeRevIdx)
						pCity.changeRevRequestAngerTimer(-pCity.getRevRequestAngerTimer())
						pCity.setRevolutionIndex(min([pCity.getRevolutionIndex(), RevOpt.getAlwaysViolentThreshold()]))
						revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
						revIdxHist['Events'][0] += changeRevIdx
						RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)
						pCity.setReinforcementCounter(0)
						pCity.setOccupationTimer(0)
						if LOG_DEBUG:
							print "[REV] Rev index in %s decreased to %d (from %d)"%(pCity.getName(), pCity.getRevolutionIndex(), revIdx)

					elif GAME.getGameTurn() - revTurn < 30:
						# Put down after a while
						if LOG_DEBUG: print "[REV] Revolution put down after going dormant"
						iDividend = 20
						if localIdx < 0:
							if LOG_DEBUG: print "[REV] Local conditions are improving"
							iDividend += 10
						if revIdx > RevOpt.getAlwaysViolentThreshold():
							iDividend += 10
						if revCnt > 2: # Hardened, stubborn populace
							iDividend -= 5

						changeRevIdx = -revIdx * iDividend / 100
						pCity.changeRevolutionIndex(changeRevIdx)
						pCity.changeRevRequestAngerTimer(-pCity.getRevRequestAngerTimer())
						pCity.setRevolutionIndex(min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]))
						revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
						revIdxHist['Events'][0] += changeRevIdx
						RevData.updateCityVal(pCity, 'RevIdxHistory', revIdxHist)
						pCity.setOccupationTimer(0)
						if LOG_DEBUG:
							print "[REV] Rev index in %s decreased to %d (from %d)"%(pCity.getName(), pCity.getRevolutionIndex(), revIdx)


	if not pPlayer.isFoundedFirstCity():
		# Add +1 for this turn?
		for turnID in xrange(GAME.getGameTurn()):
			if pPlayer.getAgricultureHistory(turnID) > 0:
				print '[REV] Setting founded city to True for failed reincarnation of rebel player %d'%(iPlayerID)
				pPlayer.setFoundedFirstCity(True)
				break

	pTeam = GC.getTeam(pPlayer.getTeam())
	if endWarsOnDeath and (pTeam.getNumMembers() == 1 or not pTeam.isAlive()):
		for idx in xrange(MAX_PC_TEAMS):
			if idx != pTeam.getID() and not GC.getTeam(idx).isMinorCiv() and pTeam.isAtWar(idx):
				pTeam.makePeace(idx)

	if pPlayer.isMinorCiv():
		print '[REV] %s were minor civ'%(pPlayer.getCivilizationDescription(0))
		pTeam.setIsMinorCiv(False, False)

	if LOG_DEBUG and pPlayer.isRebel():
		print "[REV] %s (%d) is no longer a rebel by death"%(pPlayer.getCivilizationDescription(0), iPlayerID)
	pPlayer.setIsRebel(False)

	# Appears to be too late, game is already ending before this popup can take effect
	if iPlayerID == GAME.getActivePlayer() and GAME.getAIAutoPlay(iPlayerID) == 0:
		try:
			GAME.setAIAutoPlay(iPlayerID, 1)
			#ChangePlayer.changeHumanPopup(True)
		except: pass
示例#8
0
def onChangeWar( argsList ):
	bIsWar = argsList[0]
	iTeam = argsList[1]
	iRivalTeam = argsList[2]

	if( False and LOG_DEBUG ) :
		if (bIsWar):
				strStatus = "declared war"
		else:
				strStatus = "declared peace"
		CvUtil.pyPrint('Team %d has %s on Team %d'
				%(iTeam, strStatus, iRivalTeam))

	if( not bIsWar ) :
		# Check if this is peaceful end to a revolution
		onTeamList = list()
		onTeamCivs = list()
		onRivalTeamList = list()
		onRivalTeamCivs = list()
		for i in xrange(MAX_PC_PLAYERS):
			pPlayer = GC.getPlayer(i)
			if( pPlayer.getTeam() == iTeam and pPlayer.isAlive() ) :
				# On team declaring peace
				onTeamList.append(pPlayer)
				onTeamCivs.append(pPlayer.getCivilizationType())

			elif( pPlayer.getTeam() == iRivalTeam and pPlayer.isAlive() ) :
				# On team accepting peace
				onRivalTeamList.append(pPlayer)
				onRivalTeamCivs.append(pPlayer.getCivilizationType())

		for pPlayer in onTeamList :

			playerPy = PyPlayer(pPlayer.getID())

			cityList = playerPy.getCityList()
			for city in cityList :
				pCity = city.GetCy()
				revCiv = RevData.getCityVal( pCity, "RevolutionCiv" )
				if( revCiv in onRivalTeamCivs ) :
					if( not RevData.getCityVal( pCity, "RevolutionTurn" ) == None ) :
						if( GAME.getGameTurn() - RevData.getCityVal( pCity, "RevolutionTurn" ) < 30 ) :
							# City recently rebelled for civ now at peace
							localIdx = pCity.getLocalRevIndex()
							revIdx = pCity.getRevolutionIndex()
							revCnt = pCity.getNumRevolts(pCity.getOwner())
							if( LOG_DEBUG ) : CvUtil.pyPrint("Rev - Rebels in %s have agreed to peace (%d, %d, %d)"%(pCity.getName(),revIdx,localIdx,revCnt))
							frac = .2
							if( localIdx < 0 ) :
								frac += .1
							if( revIdx > RevOpt.getAlwaysViolentThreshold() ) :
								frac += .1
							if( revCnt > 2 ) :
								# Hardened, stubborn populace
								frac -= .05
							changeRevIdx = -int(frac*revIdx)
							pCity.changeRevolutionIndex( changeRevIdx )
							pCity.setRevolutionIndex( min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]) )
							revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
							revIdxHist['Events'][0] += changeRevIdx
							RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )
							pCity.setOccupationTimer(0)
							if( LOG_DEBUG ) : CvUtil.pyPrint("Rev index in %s decreased to %d (from %d)"%(pCity.getName(),pCity.getRevolutionIndex(),revIdx))

			GC.getTeam(pPlayer.getTeam()).setRebelAgainst( iRivalTeam, False )

		for pPlayer in onRivalTeamList :
			playerPy = PyPlayer(pPlayer.getID())

			cityList = playerPy.getCityList()
			for city in cityList :
				pCity = city.GetCy()
				revCiv = RevData.getCityVal( pCity, "RevolutionCiv" )
				if( revCiv in onTeamCivs ) :
					if( not RevData.getCityVal( pCity, "RevolutionTurn" ) == None ) :
						if( GAME.getGameTurn() - RevData.getCityVal( pCity, "RevolutionTurn" ) < 30 ) :
							# City recently rebelled for civ now at peace
							localIdx = pCity.getLocalRevIndex()
							revIdx = pCity.getRevolutionIndex()
							revCnt = pCity.getNumRevolts(pCity.getOwner())
							if( LOG_DEBUG ) : CvUtil.pyPrint("Rev - Rebels in %s have sued for peace"%(pCity.getName()))
							frac = .2
							if( localIdx < 0 ) :
								frac += .1
							if( revIdx > RevOpt.getAlwaysViolentThreshold() ) :
								frac += .1
							if( revCnt > 2 ) :
								# Hardened, stubborn populace
								frac -= .05
							changeRevIdx = -int(frac*revIdx)
							pCity.changeRevolutionIndex( changeRevIdx )
							pCity.setRevolutionIndex( min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]) )
							revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
							revIdxHist['Events'][0] += changeRevIdx
							RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )
							pCity.setOccupationTimer(0)
							if( LOG_DEBUG ) : CvUtil.pyPrint("Rev index in %s decreased to %d (from %d)"%(pCity.getName(),pCity.getRevolutionIndex(),revIdx))

			GC.getTeam(pPlayer.getTeam()).setRebelAgainst( iTeam, False )
示例#9
0
def onSetPlayerAlive( argsList ) :

	iPlayerID = argsList[0]
	bNewValue = argsList[1]

	pPlayer = GC.getPlayer( iPlayerID )

	if( bNewValue == False ) :

		print 'Rev - %s are dead, %d cities lost, %d founded a city'%(pPlayer.getCivilizationDescription(0),pPlayer.getCitiesLost(),pPlayer.isFoundedFirstCity())

		# Check if this was a put down revolution
		for i in xrange(MAX_PC_PLAYERS) :
			playerI = GC.getPlayer(i)
			if( playerI.isAlive() and playerI.getNumCities() > 0 ) :
				playerIPy = PyPlayer( i )
				cityList = playerIPy.getCityList()
				for city in cityList :
					pCity = city.GetCy()
					revCiv = RevData.getCityVal( pCity, "RevolutionCiv" )
					revTurn = RevData.getCityVal( pCity, "RevolutionTurn" )
					if( revCiv == pPlayer.getCivilizationType() and revTurn > 0 ) :
						if( LOG_DEBUG ) : CvUtil.pyPrint("Rev - The dying %s are the rebel type for %s"%(pPlayer.getCivilizationDescription(0),pCity.getName()))
						if( GC.getTeam(pPlayer.getTeam()).isAtWar(pCity.getOwner()) ) :
							revIdx = pCity.getRevolutionIndex()
							localIdx = pCity.getLocalRevIndex()
							revCnt = pCity.getNumRevolts(pCity.getOwner())
							if( pCity.getReinforcementCounter() > 0 ) :
								# Put down while still fresh
								print "Rev - Revolution put down while still actively revolting"
								frac = .3
								if localIdx < 0:
									frac += .1
								if revIdx > RevOpt.getAlwaysViolentThreshold():
									frac += .1
								if( revCnt > 2 ) :
									# Hardened, stubborn populace
									frac -= .08
								changeRevIdx = -int(frac*revIdx)
								pCity.changeRevolutionIndex( changeRevIdx )
								pCity.changeRevRequestAngerTimer( -pCity.getRevRequestAngerTimer() )
								pCity.setRevolutionIndex( min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]) )
								revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
								revIdxHist['Events'][0] += changeRevIdx
								RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )
								pCity.setReinforcementCounter( 0 )
								pCity.setOccupationTimer(0)
								if( LOG_DEBUG ) : CvUtil.pyPrint("Rev index in %s decreased to %d (from %d)"%(pCity.getName(),pCity.getRevolutionIndex(),revIdx))
							elif( GAME.getGameTurn() - revTurn < 30 ) :
								# Put down after a while
								if( LOG_DEBUG ) : CvUtil.pyPrint("Rev - Revolution put down after going dormant")
								frac = .2
								if( localIdx < 0 ) :
									if( LOG_DEBUG ) : CvUtil.pyPrint("Rev - Local conditions are improving")
									frac += .1
								if( revIdx > RevOpt.getAlwaysViolentThreshold() ) :
									frac += .1
								if( revCnt > 2 ) :
									# Hardened, stubborn populace
									frac -= .05
								changeRevIdx = -int(frac*revIdx)
								pCity.changeRevolutionIndex( changeRevIdx )
								pCity.changeRevRequestAngerTimer( -pCity.getRevRequestAngerTimer() )
								pCity.setRevolutionIndex( min([pCity.getRevolutionIndex(),RevOpt.getAlwaysViolentThreshold()]) )
								revIdxHist = RevData.getCityVal(pCity,'RevIdxHistory')
								revIdxHist['Events'][0] += changeRevIdx
								RevData.updateCityVal( pCity, 'RevIdxHistory', revIdxHist )
								pCity.setOccupationTimer(0)
								if( LOG_DEBUG ) : CvUtil.pyPrint("Rev index in %s decreased to %d (from %d)"%(pCity.getName(),pCity.getRevolutionIndex(),revIdx))


		if( not pPlayer.isFoundedFirstCity() ) :
			# Add +1 for this turn?
			for turnID in xrange(0,GAME.getGameTurn()) :
				if( pPlayer.getAgricultureHistory(turnID) > 0 ) :
					print 'Rev - Setting founded city to True for failed reincarnation of rebel player %d'%(iPlayerID)
					pPlayer.setFoundedFirstCity( True )
					break

		pTeam = GC.getTeam(pPlayer.getTeam())
		if( endWarsOnDeath ) :
			if( pTeam.getNumMembers() == 1 or not pTeam.isAlive() ) :
				for idx in xrange(MAX_PC_TEAMS):
					if( not idx == pTeam.getID() and not GC.getTeam(idx).isMinorCiv() ) :
						if( pTeam.isAtWar(idx) ) :
							pTeam.makePeace(idx)

		if( pPlayer.isMinorCiv() ) :
			print 'Rev - %s were minor civ'%(pPlayer.getCivilizationDescription(0))
			pTeam.setIsMinorCiv(False, False)

		if( LOG_DEBUG and pPlayer.isRebel() ) : CvUtil.pyPrint("Rev - %s (%d) is no longer a rebel by death"%(pPlayer.getCivilizationDescription(0),pPlayer.getID()))
		pPlayer.setIsRebel( False )
#-------------------------------------------------------------------------------------------------
# Lemmy101 RevolutionMP edit
#-------------------------------------------------------------------------------------------------

		# Appears to be too late, game is already ending before this popup can take effect
		if( iPlayerID == GAME.getActivePlayer() and GAME.getAIAutoPlay(iPlayerID) == 0 ) :
			try :
				GAME.setAIAutoPlay(iPlayerID, 1)
#-------------------------------------------------------------------------------------------------
# END Lemmy101 RevolutionMP edit
#-------------------------------------------------------------------------------------------------
				#ChangePlayer.changeHumanPopup( True )
			except :
				pass