def onCityLost(self, argsList): 'City Lost' city = argsList[0] player = PyPlayer(city.getOwner()) CvUtil.pyPrint('City %s was lost by Player %d Civilization %s' %(city.getName(), player.getID(), player.getCivilizationName()))
def pickHumanHandler( self, iPlayerID, netUserData, popupReturn ) : CvUtil.pyPrint('Handling pick human popup') if( popupReturn.getButtonClicked() == 0 ): # if you pressed cancel CyInterface().addImmediateMessage("Kill your remaining units if you'd like to see end game screens","") return toKillPlayer = gc.getActivePlayer() newHumanIdx = popupReturn.getSelectedPullDownValue( 1 ) newPlayer = gc.getPlayer(newHumanIdx) # game.setActivePlayer( newHumanIdx, False ) # newPlayer.setIsHuman(True) # CvUtil.pyPrint("You now control the %s"%(newPlayer.getCivilizationDescription(0))) # CyInterface().addImmediateMessage("You now control the %s"%(newPlayer.getCivilizationDescription(0)),"") ChangePlayer.changeHuman( newHumanIdx, toKillPlayer.getID() ) if( toKillPlayer.getNumCities() == 0 ) : # Kills off the lion in the ice field CvUtil.pyPrint("Killing off player %d"%(toKillPlayer.getID())) toKillPlayer.killUnits() toKillPlayer.setIsHuman(False)
def changeHumanHandler( playerID, netUserData, popupReturn ) : 'Handles changeHuman popup' if( popupReturn.getButtonClicked() == 0 ): # if you pressed cancel return newHumanIdx = popupReturn.getSelectedPullDownValue( 1 ) newPlayer = gc.getPlayer(newHumanIdx) oldHumanIdx = playerID oldPlayer = gc.getPlayer(oldHumanIdx) if( newHumanIdx == oldHumanIdx ) : if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : You have selected the same civ, no change") CyInterface().addImmediateMessage("You retain control of the %s"%(oldPlayer.getCivilizationDescription(0)),"") return if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : You have selected player %d, the %s"%(newHumanIdx, newPlayer.getCivilizationDescription(0)) ) success = RevUtils.changeHuman( newHumanIdx, oldHumanIdx ) if( success ) : if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : Number of human players is now %d"%(game.getNumHumanPlayers()) ) if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : Active player is now %d"%(game.getActivePlayer()) ) ## for i in range(0,gc.getMAX_CIV_PLAYERS()) : ## if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : Player %d is human %d"%(i,gc.getPlayer(i).isHuman())) CyInterface().addImmediateMessage("You now control the %s"%(newPlayer.getCivilizationDescription(0)),"") else : if( LOG_DEBUG ) : CvUtil.pyPrint( " CP : Error occured, number of human players is now %d"%(game.getNumHumanPlayers()) ) CyInterface().addImmediateMessage("An error occured in changeHuman ...","")
def onVictory(self, argsList): 'Victory' iTeam, iVictory = argsList if (iVictory >= 0 and iVictory < gc.getNumVictoryInfos()): victoryInfo = gc.getVictoryInfo(int(iVictory)) CvUtil.pyPrint("Victory! Team %d achieves a %s victory" %(iTeam, victoryInfo.getDescription()))
def resetName( self, iPlayer, bVerbose = True ) : pPlayer = gc.getPlayer(iPlayer) civInfo = gc.getCivilizationInfo(pPlayer.getCivilizationType()) origDesc = civInfo.getDescription() origShort = civInfo.getShortDescription(0) origAdj = civInfo.getAdjective(0) if( not game.isOption(GameOptionTypes.GAMEOPTION_LEAD_ANY_CIV) ) : if( not self.bLeaveHumanName or not (pPlayer.isHuman() or game.getActivePlayer() == iPlayer) ) : if( pPlayer.getLeaderType() in LeaderCivNames.LeaderCivNames.keys() ) : [origDesc,origShort,origAdj] = LeaderCivNames.LeaderCivNames[pPlayer.getLeaderType()] newDesc = CvUtil.convertToStr(origDesc) newShort = CvUtil.convertToStr(origShort) newAdj = CvUtil.convertToStr(origAdj) newDesc = remove_diacriticals(newDesc) newShort = remove_diacriticals(newShort) newAdj = remove_diacriticals(newAdj) if( self.LOG_DEBUG ) : CvUtil.pyPrint(" Name - Re-setting civ name for player %d to %s"%(iPlayer,newDesc)) gc.getPlayer(iPlayer).setCivName( newDesc, newShort, newAdj )
def onUnitPromoted(self, argsList): 'Unit Promoted' pUnit, iPromotion = argsList player = gc.getPlayer(pUnit.getOwner()) if (not self.__LOG_UNITPROMOTED): return CvUtil.pyPrint('Unit Promotion Event: %s - %s' %(player.getCivilizationDescription(0), pUnit.getName(),))
def onCityBuildingBuilding(self, argsList): 'City begins building a Building' pCity = argsList[0] iBuildingType = argsList[1] if (not self.__LOG_CITYBUILDING): return CvUtil.pyPrint("%s has begun building a %s" %(pCity.getName(),gc.getBuildingInfo(iBuildingType).getDescription()))
def onImprovementDestroyed(self, argsList): 'Improvement Destroyed' iImprovement, iOwner, iX, iY = argsList if (not self.__LOG_IMPROVEMENT): return CvUtil.pyPrint('Improvement %s was Destroyed at %d, %d' %(gc.getImprovementInfo(iImprovement).getDescription(), iX, iY))
def onRouteBuilt(self, argsList): 'Route Built' iRoute, iX, iY = argsList if (not self.__LOG_IMPROVEMENT): return CvUtil.pyPrint('Route %s was built at %d, %d' %(gc.getRouteInfo(iRoute).getDescription(), iX, iY))
def onCombatLogCalc(self, argsList): 'Combat Result' genericArgs = argsList[0][0] cdAttacker = genericArgs[0] cdDefender = genericArgs[1] iCombatOdds = genericArgs[2] CvUtil.combatMessageBuilder(cdAttacker, cdDefender, iCombatOdds)
def onTechAcquired(self, argsList): 'Tech Acquired' iTechType, iTeam, iPlayer, bAnnounce = argsList # Note that iPlayer may be NULL (-1) and not a refer to a player object ### MyMod iFreeUnit = -1 if iTechType == gc.getInfoTypeForString('TECH_PHILOSOPHY'): iFreeUnit = gc.getInfoTypeForString('UNIT_TAOIST_MISSIONARY') if iTechType == gc.getInfoTypeForString('TECH_DIVINE_RIGHT'): iFreeUnit = gc.getInfoTypeForString('UNIT_ISLAMIC_MISSIONARY') if (iPlayer != -1 and iFreeUnit != -1): pPlayer = gc.getPlayer(iPlayer) if (pPlayer.isAlive()): py = PyPlayer(iPlayer) if pPlayer.getNumCities() > 0: pCity = py.getCityList()[0] pPlot = pCity.plot() newUnit = pPlayer.initUnit(iFreeUnit, pPlot.getX(), pPlot.getY(), UnitAITypes.UNITAI_MISSIONARY, DirectionTypes.DIRECTION_SOUTH) ### /MyMod # Show tech splash when applicable if (iPlayer > -1 and bAnnounce and not CyInterface().noTechSplash()): if (gc.getGame().isFinalInitialized() and not gc.getGame().GetWorldBuilderMode()): if ((not gc.getGame().isNetworkMultiPlayer()) and (iPlayer == gc.getGame().getActivePlayer())): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN) popupInfo.setData1(iTechType) popupInfo.setText(u"showTechSplash") popupInfo.addPopup(iPlayer) if (not self.__LOG_TECH): return CvUtil.pyPrint('%s was finished by Team %d' %(PyInfo.TechnologyInfo(iTechType).getDescription(), iTeam))
def reportEvent(self, entry, context, argsList): 'Report an Event to Events.log ' if (gc.getGame().getActivePlayer() != -1): message = "DEBUG Event: %s (%s)" %(entry[0], gc.getActivePlayer().getName()) CyInterface().addImmediateMessage(message,"") CvUtil.pyPrint(message) return 0
def addUpgradePath(self, graph, unitFrom, unitTo): # Check if unit numbers are valid if (unitFrom >= 0 and graph.has_key(unitFrom) and unitTo >= 0 and graph.has_key(unitTo)): graph[unitFrom].upgradesTo.add(unitTo) graph[unitTo].upgradesFrom.add(unitFrom) CvUtil.pyPrint(self.unitToString(unitFrom) + localText.getText("TXT_KEY_UNIT_UPGRADES_GRAPH_UPGRADE_TO",()) + self.unitToString(unitTo) + ".")
def calculateScore(self,argsList): ePlayer = argsList[0] bFinal = argsList[1] bVictory = argsList[2] FinalFrontier = CvEventInterface.getEventManager().FinalFrontier iMaxPopulation = FinalFrontier.iMaxPopulation iPopulationScore = CvUtil.getScoreComponent(gc.getPlayer(ePlayer).getPopScore(), gc.getGame().getInitPopulation(), iMaxPopulation, gc.getDefineINT("SCORE_POPULATION_FACTOR"), True, bFinal, bVictory) printd("Pop Score Stuff") printd(gc.getPlayer(ePlayer).getPopScore()) printd(gc.getGame().getInitPopulation()) printd(iMaxPopulation) printd(iPopulationScore) iPlayerLandScore = gc.getPlayer(ePlayer).getTotalLand() iLandScore = CvUtil.getScoreComponent(iPlayerLandScore , gc.getGame().getInitLand(), gc.getGame().getMaxLand(), gc.getDefineINT("SCORE_LAND_FACTOR"), True, bFinal, bVictory) printd("Land Score Stuff") printd(iPlayerLandScore) printd(gc.getGame().getInitLand()) printd(gc.getGame().getMaxLand()) printd(iLandScore) 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) iTotalScore = int(iLandScore + iWondersScore + iTechScore + iPopulationScore) printd("Player %d Score: %d Pop: %d Land: %d Tech: %d Wonders: %d" %(ePlayer, iTotalScore, iPopulationScore, iLandScore, iTechScore, iWondersScore)) return iTotalScore
def onImprovementBuilt(self, argsList): 'Improvement Built' iImprovement, iX, iY = argsList if (not self.__LOG_IMPROVEMENT): return CvUtil.pyPrint('Improvement %s was built at %d, %d' %(gc.getImprovementInfo(iImprovement).getDescription(), iX, iY))
def addUpgradePath(self, graph, unitFrom, unitTo): # Check if unit numbers are valid if (unitFrom >= 0 and graph.has_key(unitFrom) and unitTo >= 0 and graph.has_key(unitTo)): graph[unitFrom].upgradesTo.add(unitTo) graph[unitTo].upgradesFrom.add(unitFrom) CvUtil.pyPrint(self.unitToString(unitFrom) + " upgrades to " + self.unitToString(unitTo) + ".")
def onFirstContact(self, argsList): 'Contact' iTeamX,iHasMetTeamY = argsList if (not self.__LOG_CONTACT): return CvUtil.pyPrint('Team %d has met Team %d' %(iTeamX, iHasMetTeamY))
def init(): import sys import CvUtil sys.stderr = CvUtil.RedirectError() sys.excepthook = CvUtil.myExceptHook sys.stdout = CvUtil.RedirectDebug()
def onNukeExplosion(self, argsList): 'Nuke Explosion' pPlot, pNukeUnit = argsList CvUtil.pyPrint('Nuke detonated at %d, %d' %(pPlot.getX(), pPlot.getY()))
def onCityAcquiredAndKept(self, argsList): 'City Acquired and Kept' iOwner,pCity = argsList CvUtil.pyPrint('City Acquired and Kept Event: %s' %(pCity.getName()))
def onCultureExpansion(self, argsList): 'City Culture Expansion' pCity = argsList[0] iPlayer = argsList[1] CvUtil.pyPrint("City %s's culture has expanded" %(pCity.getName(),))
def onCityAcquired(self, argsList): 'City Acquired' iPreviousOwner,iNewOwner,pCity,bConquest,bTrade = argsList CvUtil.pyPrint('City Acquired Event: %s' %(pCity.getName()))
def onCityBuilt(self, argsList): 'City Built' city = argsList[0] if (city.getOwner() == gc.getGame().getActivePlayer()): self.__eventEditCityNameBegin(city, False) CvUtil.pyPrint('City Built Event: %s' %(city.getName()))
def onSetPlayerAlive(self, argsList): 'Set Player Alive Event' iPlayerID = argsList[0] bNewValue = argsList[1] CvUtil.pyPrint("Player %d's alive status set to: %d" %(iPlayerID, int(bNewValue)))
def onTechSelected(self, argsList): 'Tech Selected' iTechType, iPlayer = argsList if (not self.__LOG_TECH): return CvUtil.pyPrint('%s was selected by Player %d' %(PyInfo.TechnologyInfo(iTechType).getDescription(), iPlayer))
def onGoodyReceived(self, argsList): 'Goody received' iPlayer, pPlot, pUnit, iGoodyType = argsList if (not self.__LOG_GOODYRECEIVED): return CvUtil.pyPrint('%s received a goody' %(gc.getPlayer(iPlayer).getCivilizationDescription(0)),)
def onUnInit(self, argsList): 'Called when Civ shuts down' CvUtil.pyPrint('OnUnInit')
def onPlotPicked(self, argsList): 'Plot Picked' pPlot = argsList[0] CvUtil.pyPrint('Plot was picked at %d, %d' %(pPlot.getX(), pPlot.getY()))
## CvOverlayScreenUtils ## ## Controls the Strategy Overlay and provides as-yet unused sign overlay. ## ## Copyright (c) 2008 The BUG Mod. ## ## Author: Del69, EmperorFool from CvPythonExtensions import * import CvDotMapOverlayScreen import BugUtil import CvUtil ## Constants STRATEGY_OVERLAY_SCREEN = CvUtil.getNewScreenID() #GROUP_SIGNTXT = 0 ## Globals gc = CyGlobalContext() keys = None overlayScreen = CvDotMapOverlayScreen.CvDotMapOverlayScreen( STRATEGY_OVERLAY_SCREEN) def showOverlayScreen(): """ Shows the Overlay Screen from CvDotMapOverlayScreen.py """
def onPreSave(self, argsList): "called before a game is actually saved" CvUtil.pyPrint('OnPreSave')
def writeLog(): playername = CvUtil.convertToStr( gc.getPlayer(gc.getGame().getActivePlayer()).getName()) szNewFilename = BugPath.getRootDir() + "\\Logs\\" + "OOSLog - %s - " % ( playername) + "Turn %s" % (gc.getGame().getGameTurn()) + ".txt" pFile = open(szNewFilename, "w") # Backup current language iLanguage = CyGame().getCurrentLanguage() # Force english language for logs CyGame().setCurrentLanguage(0) # # Global data # pFile.write(SEPERATOR) pFile.write(SEPERATOR) pFile.write(" GLOBALS \n") pFile.write(SEPERATOR) pFile.write(SEPERATOR) pFile.write("\n\n") pFile.write("Next Map Rand Value: %d\n" % CyGame().getMapRand().get(10000, "OOS Log")) pFile.write("Next Soren Rand Value: %d\n" % CyGame().getSorenRand().get(10000, "OOS Log")) pFile.write("Total num cities: %d\n" % CyGame().getNumCities()) pFile.write("Total population: %d\n" % CyGame().getTotalPopulation()) pFile.write("Total Deals: %d\n" % CyGame().getNumDeals()) pFile.write("Total owned plots: %d\n" % CyMap().getOwnedPlots()) pFile.write("Total num areas: %d\n" % CyMap().getNumAreas()) pFile.write("\n\n") # # Player data # iPlayer = 0 for iPlayer in range(gc.getMAX_PLAYERS()): pPlayer = gc.getPlayer(iPlayer) if (pPlayer.isEverAlive()): pFile.write(SEPERATOR) pFile.write(SEPERATOR) pFile.write(" PLAYER %d: %s \n" % (iPlayer, CvUtil.convertToStr(pPlayer.getName()))) pFile.write( " Civilizations: %s \n" % (CvUtil.convertToStr(pPlayer.getCivilizationDescriptionKey()))) pFile.write(SEPERATOR) pFile.write(SEPERATOR) pFile.write("\n\n") pFile.write("Basic data:\n") pFile.write("-----------\n") pFile.write("Player %d Score: %d\n" % (iPlayer, gc.getGame().getPlayerScore(iPlayer))) pFile.write("Player %d Population: %d\n" % (iPlayer, pPlayer.getTotalPopulation())) pFile.write("Player %d Total Land: %d\n" % (iPlayer, pPlayer.getTotalLand())) pFile.write("Player %d Gold: %d\n" % (iPlayer, pPlayer.getGold())) pFile.write("Player %d Assets: %d\n" % (iPlayer, pPlayer.getAssets())) pFile.write("Player %d Power: %d\n" % (iPlayer, pPlayer.getPower())) pFile.write("Player %d Num Cities: %d\n" % (iPlayer, pPlayer.getNumCities())) pFile.write("Player %d Num Units: %d\n" % (iPlayer, pPlayer.getNumUnits())) pFile.write("Player %d Num Selection Groups: %d\n" % (iPlayer, pPlayer.getNumSelectionGroups())) pFile.write("Player %d Difficulty: %d\n" % (iPlayer, pPlayer.getHandicapType())) pFile.write("\n\n") pFile.write("Yields:\n") pFile.write("-------\n") for iYield in range(int(YieldTypes.NUM_YIELD_TYPES)): pFile.write("Player %d %s Total Yield: %d\n" % (iPlayer, gc.getYieldInfo(iYield).getDescription(), pPlayer.calculateTotalYield(iYield))) pFile.write("\n\n") pFile.write("Commerce:\n") pFile.write("---------\n") for iCommerce in range(int(CommerceTypes.NUM_COMMERCE_TYPES)): pFile.write( "Player %d %s Total Commerce: %d\n" % (iPlayer, gc.getCommerceInfo(iCommerce).getDescription(), pPlayer.getCommerceRate(CommerceTypes(iCommerce)))) pFile.write("\n\n") pFile.write("Bonus Info:\n") pFile.write("-----------\n") for iBonus in range(gc.getNumBonusInfos()): pFile.write("Player %d, %s, Number Available: %d\n" % (iPlayer, gc.getBonusInfo(iBonus).getDescription(), pPlayer.getNumAvailableBonuses(iBonus))) pFile.write("Player %d, %s, Import: %d\n" % (iPlayer, gc.getBonusInfo(iBonus).getDescription(), pPlayer.getBonusImport(iBonus))) pFile.write("Player %d, %s, Export: %d\n" % (iPlayer, gc.getBonusInfo(iBonus).getDescription(), pPlayer.getBonusExport(iBonus))) pFile.write("\n") pFile.write("\n\n") pFile.write("Improvement Info:\n") pFile.write("-----------------\n") for iImprovement in range(gc.getNumImprovementInfos()): pFile.write( "Player %d, %s, Improvement count: %d\n" % (iPlayer, CvUtil.convertToStr( gc.getImprovementInfo(iImprovement).getDescription()), pPlayer.getImprovementCount(iImprovement))) pFile.write("\n\n") pFile.write("Building Class Info:\n") pFile.write("--------------------\n") for iBuildingClass in range(gc.getNumBuildingClassInfos()): pFile.write( "Player %d, %s, Building class count plus building: %d\n" % (iPlayer, CvUtil.convertToStr( gc.getBuildingClassInfo( iBuildingClass).getDescription()), pPlayer.getBuildingClassCountPlusMaking(iBuildingClass))) pFile.write("\n\n") pFile.write("Unit Class Info:\n") pFile.write("--------------------\n") for iUnitClass in range(gc.getNumUnitClassInfos()): pFile.write( "Player %d, %s, Unit class count plus training: %d\n" % (iPlayer, CvUtil.convertToStr( gc.getUnitClassInfo(iUnitClass).getDescription()), pPlayer.getUnitClassCountPlusMaking(iUnitClass))) pFile.write("\n\n") pFile.write("UnitAI Types Info:\n") pFile.write("------------------\n") for iUnitAIType in range(int(UnitAITypes.NUM_UNITAI_TYPES)): pFile.write( "Player %d, %s, Unit AI Type count: %d\n" % (iPlayer, gc.getUnitAIInfo(iUnitAIType).getDescription(), pPlayer.AI_totalUnitAIs(UnitAITypes(iUnitAIType)))) pFile.write("\n\n") pFile.write("City Info:\n") pFile.write("----------\n") iNumCities = pPlayer.getNumCities() if (iNumCities == 0): pFile.write("No Cities") else: pLoopCityTuple = pPlayer.firstCity(False) while (pLoopCityTuple[0] != None): pCity = pLoopCityTuple[0] #pFile.write("Player %d, City ID: %d, %s, Plot Radius: %d\n" % (iPlayer, pCity.getID(), CvUtil.convertToStr(pCity.getName()), pCity.getPlotRadius() )) pFile.write("X: %d, Y: %d\n" % (pCity.getX(), pCity.getY())) pFile.write("Founded: %d\n" % pCity.getGameTurnFounded()) pFile.write("Population: %d\n" % pCity.getPopulation()) pFile.write("Buildings: %d\n" % pCity.getNumBuildings()) pFile.write("Improved Plots: %d\n" % pCity.countNumImprovedPlots()) pFile.write("Producing: %s\n" % pCity.getProductionName()) pFile.write( "%d Tiles Worked, %d Specialists, %d Great People\n" % (pCity.getWorkingPopulation(), pCity.getSpecialistPopulation(), pCity.getNumGreatPeople())) pLoopCityTuple = pPlayer.nextCity(pLoopCityTuple[1], False) pFile.write("\n") pFile.write("\n\n") pFile.write("Unit Info:\n") pFile.write("----------\n") iNumUnits = pPlayer.getNumUnits() if (iNumUnits == 0): pFile.write("No Units") else: pLoopUnitTuple = pPlayer.firstUnit(False) while (pLoopUnitTuple[0] != None): pUnit = pLoopUnitTuple[0] pFile.write("Player %d, Unit ID: %d, %s\n" % (iPlayer, pUnit.getID(), CvUtil.convertToStr(pUnit.getName()))) pFile.write("X: %d, Y: %d\n" % (pUnit.getX(), pUnit.getY())) pFile.write("Damage: %d\n" % pUnit.getDamage()) #pFile.write("Experience: %d\n" % pUnit.getExperienceTimes100() ) pFile.write("Experience: %d\n" % pUnit.getExperience()) pFile.write("Level: %d\n" % pUnit.getLevel()) pFile.write("Promotions:\n") for j in range(gc.getNumPromotionInfos()): if (pUnit.isHasPromotion(j)): pFile.write("%s\n" % (CvUtil.convertToStr( gc.getPromotionInfo(j).getDescription()))) pLoopUnitTuple = pPlayer.nextUnit(pLoopUnitTuple[1], False) pFile.write("\n") # Space at end of player's info pFile.write("\n\n") # Restore current language CyGame().setCurrentLanguage(iLanguage) # Close file pFile.close()
def onInit(self, argsList): 'Called when Civ starts up' CvUtil.pyPrint( 'OnInit' )
def onCityGrowth(self, argsList): 'City Population Growth' pCity = argsList[0] iPlayer = argsList[1] CvUtil.pyPrint("%s has grown" %(pCity.getName(),))
##------------------------------------------------------------------- from CvPythonExtensions import * import CvMainInterface import CvUtil import Popup as PyPopup import BugCore import BugUtil import PlayerUtil import SdToolKit SD_MOD_ID = "Reminders" SD_QUEUES_ID = "queues" SD_QUEUE_ID = "queue" # old format saves a single queue STORE_EVENT_ID = CvUtil.getNewEventID("Reminder.Store") RECALL_EVENT_ID = CvUtil.getNewEventID("Reminder.Recall") RECALL_AGAIN_EVENT_ID = CvUtil.getNewEventID("Reminder.RecallAgain") gc = CyGlobalContext() ReminderOpt = BugCore.game.Reminder g_eventMgr = None g_reminders = None # Used to display flashing end-of-turn text g_turnReminderTexts = None # Used to receive network messages g_hasNetMessage = hasattr(CyPlayer, "addReminder")
def onCityAcquired(self, argsList): iOwnerOld, iOwnerNew, CyCity, bConquest, bTrade = argsList if not bConquest: return iBasePercent = g_iBasePercent iPopPercent = g_iPopPercent if iBasePercent < 1 and iPopPercent < 1: return CyPlayerN = GC.getPlayer(iOwnerNew) if CyPlayerN.isNPC(): return if iPopPercent < 0: iPopPercent = 0 elif iPopPercent > 100: iPopPercent = 100 CyPlayerO = GC.getPlayer(iOwnerOld) CyTeamO = GC.getTeam(CyPlayerO.getTeam()) CyTeamN = GC.getTeam(CyPlayerN.getTeam()) bCheckPrereq = g_bCheckPrereq aList = [] iTechsBehind = 0 for iTech in range(GC.getNumTechInfos()): # Continue if the conquering team does have the tech if CyTeamN.isHasTech(iTech): continue # Continue if the old team doesn't have the tech if not CyTeamO.isHasTech(iTech): continue iTechsBehind += 1 # Continue if the conquerer cannot research the technology if bCheckPrereq and not CyPlayerN.canResearch(iTech, False): continue # Append the technology to the possible technology list iCost = CyTeamN.getResearchCost(iTech) iProgress = CyTeamN.getResearchProgress(iTech) iRemaining = iCost - iProgress - 1 if not iRemaining: continue # Append the technology to the possible technology list aList.append((iTech, iCost, iRemaining)) if aList: iBasePercent += iTechsBehind charBeaker = GC.getCommerceInfo( CommerceTypes.COMMERCE_RESEARCH).getChar() iPopulation = CyCity.getPopulation() + 1 fForce = (1 + iTechsBehind / 10.0) * iPopulation / ( CyPlayerO.getTotalPopulation() + iPopulation) iMax = (iPopulation * iPopPercent) iCount = 0 iLen = len(aList) szTxt = "" while iLen: iTech, iCost, iRemaining = aList.pop( GAME.getSorenRandNum(iLen, "random")) iLen -= 1 # Get the total number of technology points that will be transfered to the new city owner fTemp = 0 if iPopPercent: for i in xrange(iPopulation): fTemp += 100 * (1.0 + GAME.getSorenRandNum( iPopPercent, "TechConquest")) / iMax fPercent = iBasePercent + fTemp * fForce iBeakers = int(iCost * fPercent / (20 * (iCount + 5))) if iBeakers < 1: continue if iBeakers > iRemaining: iBeakers = iRemaining # Increase the research progress for the new city owner CyTeamN.changeResearchProgress(iTech, iBeakers, iOwnerNew) szTxt += "\n\t" + GC.getTechInfo(iTech).getDescription( ) + u" <-> %i%c" % (iBeakers, charBeaker) iCount += 1 if iOwnerNew == GAME.getActivePlayer(): if iCount: # Inform the player they got some new technology points szTxt = TRNSLTR.getText( "TXT_KEY_ENHANCED_TECH_CONQUEST_SUCESS", ()) % (CyCity.getName(), szTxt) else: # Inform the player they didn't get any new technologies szTxt = TRNSLTR.getText( "TXT_KEY_ENHANCED_TECH_CONQUEST_FAIL", ()) + " %s" % (CyCity.getName()) artPath = GC.getCivilizationInfo( CyPlayerO.getCivilizationType()).getButton() CvUtil.sendMessage(szTxt, iOwnerNew, 20, artPath, ColorTypes(12), CyCity.getX(), CyCity.getY(), True, True)
## ## 10. return name ##------------------------------------------------------------------- from CvPythonExtensions import * import CvUtil import BugUtil import BugCore import Roman import RandomNameUtils import random import Popup as PyPopup import BugData SD_MOD_ID = "UnitCnt" RENAME_EVENT_ID = CvUtil.getNewEventID() gc = CyGlobalContext() localText = CyTranslator() UnitNamingOpt = BugCore.game.UnitNaming phonetic_array = [ 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf', 'Hotel', 'India', 'Juliet', 'Kilo', 'Lima', 'Mike', 'November', 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango', 'Uniform', 'Victor', 'Whiskey', 'Xray', 'Yankee', 'Zulu' ] greek_array = [ 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta',