def initAppFolder():
    """
	Locates the directory that contains the BTS application.
	"""
    global _appFolderInitDone
    if _appFolderInitDone:
        return
    BugUtil.debug("BugPath - initializing application folder")
    global _appDir, _appFolder

    # Determine the app directory that holds the executable and Mods
    # as well as the folder name inside MY_GAMES_FOLDER that holds CustomAssets and Mods.
    if isMac():
        _appDir = os.getcwd()
    else:
        if isfile(sys.executable):
            # BugUtil.debug("BugPath - exe is '%s'", sys.executable)
            _appDir = dirname(sys.executable)
    if _appDir:
        _appFolder = basename(_appDir)
        safeInfoPath("BugPath - app dir is '%s'", _appDir)
        safeDebugPath("BugPath - app folder is '%s'", _appFolder)
    else:
        BugUtil.warn("BugPath - no executable found")
    _appFolderInitDone = True
def initNoCustomAssetsSetting():
    """
	Checks if the NoCustomAssets setting is enabled when running as a mod.
	"""
    global _noCustomAssetsSettingInitDone
    if _noCustomAssetsSettingInitDone:
        return
    if isMod():
        global _noCustomAssets
        # EF: don't check game option because BUG is initialized only once at startup
        # 		if CyGame().isOption(GameOptionTypes.GAMEOPTION_LOCK_MODS):
        # 			_noCustomAssets = True
        # 			BugUtil.debug("BugPath - Lock Modified Assets is set")
        # 		else:
        if getModDir() and getModFolder():
            BugUtil.debug("BugPath - checking for NoCustomAssets")
            try:
                from configobj import ConfigObj

                config = ConfigObj(join(getModDir(), getModFolder() + ".ini"), encoding="utf_8")
                _noCustomAssets = config["CONFIG"].as_bool("NoCustomAssets")
            except:
                BugUtil.trace("BugPath - failed to parse mod INI file for NoCustomAssets")
        BugUtil.info("BugPath - NoCustomAssets is %s", _noCustomAssets)
    _noCustomAssetsSettingInitDone = True
Beispiel #3
0
	def run(self):
		try:
			self._rev = _getRemoteRevision(self._url)
			BugUtil.debug("RemoteRevisionThread.run - found revision %d", self._rev)
		except BugError, e:
			self._error = e
			BugUtil.debug("RemoteRevisionThread.run - %s", self._error.message)
Beispiel #4
0
	def _getAlertMessageIcon(self, city, passes):
		if (passes):
			BugUtil.debug("%s passed occupation test, ignoring", city.getName())
			return (None, None)
		else:
			return (localText.getText("TXT_KEY_CIV4LERTS_ON_CITY_PACIFIED", (city.getName(), )),
					HAPPY_ICON)
def dispatchEvent(eComment, eFromPlayer, eToPlayer, args):
    event = g_eventsByCommentType.get(eComment, None)
    if event:
        event.dispatch(eFromPlayer, eToPlayer, args)
    else:
        key = gc.getDiplomacyInfo(eComment).getType()
        BugUtil.debug("DiplomacyUtil - ignoring %s from %d to %d with %r", key, eFromPlayer, eToPlayer, args)
Beispiel #6
0
def init():
	"""
	Segregates units into two sets: those that require resources and those that don't.
	Creates a map of units from ID to the set of tech prerequisites.
	"""
	global NUM_UNITS, NUM_CLASSES
	NUM_UNITS = gc.getNumUnitInfos()
	NUM_CLASSES = gc.getNumUnitClassInfos()
	global NUM_OR_BONUSES, NUM_AND_TECHS
	NUM_OR_BONUSES = gc.getNUM_UNIT_PREREQ_OR_BONUSES()
	NUM_AND_TECHS = gc.getNUM_UNIT_AND_TECH_PREREQS()
	for eUnit in range(NUM_UNITS):
		unitInfo = gc.getUnitInfo(eUnit)
		BugUtil.debug("==== %s ====", unitInfo.getDescription())
		
		# generic unit
		classInfo = gc.getUnitClassInfo(unitInfo.getUnitClassType())
		eGenericUnit = classInfo.getDefaultUnitIndex()
		genericUnitIDs[eUnit] = eGenericUnit
		if eUnit == eGenericUnit:
			genericUnits.add(eUnit)
		else:
			BugUtil.debug("  unique of %s",
					gc.getUnitInfo(eGenericUnit).getDescription())
		
		# resource sets
		found = False
		eBonus = unitInfo.getPrereqAndBonus()
		if eBonus != -1:
			found = True
			strategicBonuses.add(eBonus)
			BugUtil.debug("  requires %s", gc.getBonusInfo(eBonus).getDescription())
		for i in range(NUM_OR_BONUSES):
			eBonus = unitInfo.getPrereqOrBonuses(i)
			if eBonus != -1:
				found = True
				strategicBonuses.add(eBonus)
				BugUtil.debug("  requires %s", gc.getBonusInfo(eBonus).getDescription())
		if found:
			unitsWithBonuses.add(eUnit)
		else:
			unitsWithoutBonuses.add(eUnit)
		
		# tech map
		techs = set()
		unitTechs[eUnit] = techs
		eTech = unitInfo.getPrereqAndTech()
		if eTech != -1:
			techs.add(eTech)
		for i in range(NUM_AND_TECHS):
			eTech = unitInfo.getPrereqAndTechs(i)
			if eTech != -1:
				techs.add(eTech)
		for eTech in techs:
			BugUtil.debug("  requires %s", gc.getTechInfo(eTech).getDescription())
		
	# upgrade maps
	for eUnit in range(NUM_UNITS):
		getOlderUnits(eUnit)
		getNewerUnits(eUnit)
Beispiel #7
0
	def _setValue(self, value, *args):
		"""Sets the actual value in the INI file."""
		BugUtil.debug("BugOptions - setting %s to %r", self.getID(), value)
		if args:
			return TYPE_SETTER_MAP[self.type](self.file, self.section, self.key % args, value)
		else:
			return TYPE_SETTER_MAP[self.type](self.file, self.section, self.key, value)
Beispiel #8
0
	def _findTable(self, key):
		if self._hasTable(key):
			BugUtil.debug("BugTable - found %s in %s", key, self)
			return self._getTable(key)
		else:
			BugUtil.debug("BugTable - %s not found in %s", key, self)
			return None
Beispiel #9
0
	def __init__ (self, iThisPlayer, iTargetPlayer):
		pActiveTeam = gc.getTeam(gc.getActivePlayer().getTeam())
		iThisTeam = gc.getPlayer(iThisPlayer).getTeam()
		pThisTeam = gc.getTeam(iThisTeam)
		iTargetTeam = gc.getPlayer(iTargetPlayer).getTeam()
		self.iThisPlayer = iThisPlayer
		self.iTargetPlayer = iTargetPlayer
		self.iAttitudeSum = 0
		self.iAttitudeModifiers = {}
		self.bHasActiveMetBoth = CyGame().isDebugMode() or (pActiveTeam.isHasMet(iThisTeam) and pActiveTeam.isHasMet(iTargetTeam)) 
		self.eAttitudeType = AttitudeTypes.NO_ATTITUDE
		# This might be better off being something descriptive such as
		# "players have not met" or "players are the same"
		self.sAttitudeString = ""
		if (iThisPlayer != iTargetPlayer and pThisTeam.isHasMet(iTargetTeam)):
			self.eAttitudeType = gc.getPlayer(iThisPlayer).AI_getAttitude(iTargetPlayer)
			self.sAttitudeString = CyGameTextMgr().getAttitudeString(iThisPlayer, iTargetPlayer)
			for sLine in self.sAttitudeString.split("\n"):
				#BugUtil.debug(u"LINE: %s" % (sLine))
				pMatch = re.match("^.*>([-\+]\d+)\s?:\s+(\".+\")<.*$", sLine, re.UNICODE)
				if (pMatch):
					#BugUtil.debug(u"MATCH: (%s) (%s)" %(pMatch.group(1), pMatch.group(2)))
					iValue = int(pMatch.group(1))
					sString = unicode(pMatch.group(2))
					if sString in MODIFIER_STRING_TO_KEY:
						self.iAttitudeModifiers[MODIFIER_STRING_TO_KEY[sString]] = iValue
						self.iAttitudeSum = self.iAttitudeSum + iValue
						#BugUtil.debug(u"Attitude::init() - Added to dict: %s" % (sString))
					else:
						BugUtil.debug(u"Attitude::init() - Attitude string contains unknown modifier text: %s" % (sString))
		#BugUtil.debug(u"Attitude::init() complete.")
		BugUtil.debug(u"%s"  % (self))
Beispiel #10
0
	def createFileGetter(self, file):
		"""Creates a getter for the given IniFile."""
		def get():
			return file
		getter = "get" + file.id
		setattr(self, getter, get)
		BugUtil.debug("BugOptions - %s will return IniFile %s", getter, file.id)
Beispiel #11
0
	def hideSign (self, pPlot, ePlayer):
		""" Hides sign for given player at given plot if there's a current sign the same as the stored one. 
		Note that this function assumes gCurrentSigns is up-to-date so make sure you've updated first.
		"""
		if not pPlot or pPlot.isNone():
			BugUtil.warn("MapSigns.hideSign() was passed an invalid plot: %s" % (str(pPlot)))
			return False
		thisKey = self.__getKey(pPlot)
		if gCurrentSigns == None:
			BugUtil.debug("MapSigns.hideSign() finds no current signs so there's nothing to hide.")
			return False
		if self.hasPlotSigns(pPlot):
			szCaption = self.plotDict[thisKey].getSign(ePlayer)
			if gCurrentSigns.hasPlotSigns(pPlot):
				szExistingCaption = gCurrentSigns[pPlot].getSign(ePlayer)
				if szCaption and szCaption == szExistingCaption:
					BugUtil.debug("MapSigns.hideSign() found matching sign (%s) for player %d on plot %s; will remove it" % (szCaption, ePlayer, str(thisKey)))
					if ePlayer == -1:
						engine.removeLandmark(pPlot)
					else:
						engine.removeSign(pPlot, ePlayer)
					return True
				else:
					BugUtil.debug("MapSigns.hideSign() found sign for player %d saying (%s) instead of (%s) on plot %s; will leave alone." % (ePlayer, szExistingCaption, szCaption, str(thisKey)))
			else:
				BugUtil.debug("MapSigns.hideSign() found no sign on plot %s to remove" % (str(thisKey)))
		else:
			BugUtil.debug("MapSigns.hideSign() found no saved signs at all for plot %s" % (str(thisKey)))
		return False
	def StatusDump_Basic(self):

		BugUtil.debug("StatusDump - basic")

		# dump basic stuff
		# - leader name / civ
		# - current game turn and year
		# - current tech being researched
		# - techs available to research
		# - opponents
		# - scoreboard
		# - number of cities
		# - bank balance

		# player stuff
		ePlayer = gc.getGame().getActivePlayer()
		pPlayer = gc.getPlayer(ePlayer)

		# human / game name
		sMsg = BugUtil.getText("TXT_KEY_STATUS_DUMP_PLAYER_NAME", (pPlayer.getCivilizationShortDescription(0)))
		self._writeMsg(sMsg, vColor="Black", vBold=False, vUnderline=False, vOpenSpoiler="", vCloseSpoiler=False)

		# leader / civ name
		sMsg = BugUtil.getText("TXT_KEY_STATUS_DUMP_LEADER_CIV", (gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getDescription(), pPlayer.getCivilizationShortDescription(0)))
		self._writeMsg(sMsg, vColor="Black", vBold=False, vUnderline=False, vOpenSpoiler="", vCloseSpoiler=False)
Beispiel #13
0
def init():
	"""Performs the one-time initialization of the BUG core and all mods."""
	global g_initDone
	if g_initDone:
		BugUtil.warn("BugInit - init() called again")
		return
	global g_initRunning
	if g_initRunning:
		BugUtil.warn("BugInit - init() already running")
		return
	g_initRunning = True
	
	BugUtil.debug("BugInit - initializing...")
	timer = BugUtil.Timer("BUG init")
	
	try:
		# test to see if global context is ready
		CvUtil.initDynamicFontIcons()
	except:
		BugUtil.debug("BugInit - global context not ready")
		g_initRunning = False
		return False
	
	loadMod("init")
	BugCore.initDone()
	timer.log("read configs").start()
	callInits()
	timer.log("call inits/events")
	
	timer.logTotal()
	g_initDone = True
	g_initRunning = False
	return True
	def onPlayerRevolution(self, argsList):
		ePlayer, iAnarchyTurns, leOldCivics, leNewCivics = argsList
		civics = []
		for eOldCivic, eNewCivic in zip(leOldCivics, leNewCivics):
			if eOldCivic != eNewCivic:
				civics.append(gc.getCivicInfo(eNewCivic).getDescription())
		BugUtil.debug("Revolution for %s, %d turns: %s", gc.getPlayer(ePlayer).getCivilizationShortDescription(0), iAnarchyTurns, ", ".join(civics))
Beispiel #15
0
def onDealRejected(argsList):
	#BugUtil.debug("DiplomacyUtil::onDealRejected %s" %(str(argsList)))
	eTargetPlayer, eOfferPlayer, pTrade = argsList
	BugUtil.debug("DiplomacyUtil - %s accepts trade offered by %s: %r",
			PlayerUtil.getPlayer(eTargetPlayer).getName(),
			PlayerUtil.getPlayer(eOfferPlayer).getName(), 
			pTrade)
	def __init__(self, eventManager, *args, **kwargs):
		super(StatusDumpEvent, self).__init__(eventManager, *args, **kwargs)

		eventManager.addEventHandler("kbdEvent", self.onKbdEvent)
		self.eventMgr = eventManager

		BugUtil.debug("StatusDump-Start-0")
Beispiel #17
0
def onCivicRejected(argsList):
	#BugUtil.debug("DiplomacyUtil::onCivicRejected %s" %(str(argsList)))
	eTargetPlayer, eDemandPlayer, eCivic = argsList
	BugUtil.debug("DiplomacyUtil - %s rejects demand from %s to switch to %s",
			PlayerUtil.getPlayer(eTargetPlayer).getName(), 
			PlayerUtil.getPlayer(eDemandPlayer).getName(), 
			gc.getCivicInfo(eCivic).getDescription())
Beispiel #18
0
def onReligionRejected(argsList):
	#BugUtil.debug("DiplomacyUtil::onReligionRejected %s" %(str(argsList)))
	eTargetPlayer, eDemandPlayer, eReligion = argsList
	BugUtil.debug("DiplomacyUtil - %s rejects demand from %s to convert to %s",
			PlayerUtil.getPlayer(eTargetPlayer).getName(), 
			PlayerUtil.getPlayer(eDemandPlayer).getName(), 
			gc.getReligionInfo(eReligion).getDescription())
Beispiel #19
0
def onWarDemanded(argsList):
	#BugUtil.debug("DiplomacyUtil::onWarDemanded %s" %(str(argsList)))
	eDemandPlayer, eTargetPlayer, eVictim = argsList
	BugUtil.debug("DiplomacyUtil - %s asks %s to declare war on %s",
			PlayerUtil.getPlayer(eDemandPlayer).getName(), 
			PlayerUtil.getPlayer(eTargetPlayer).getName(), 
			PlayerUtil.getPlayer(eVictim).getName())
Beispiel #20
0
def onWarRejected(argsList):
	#BugUtil.debug("DiplomacyUtil::onWarRejected %s" %(str(argsList)))
	eTargetPlayer, eDemandPlayer, eVictim = argsList
	BugUtil.debug("DiplomacyUtil - %s rejects demand from %s to declare war on %s",
			PlayerUtil.getPlayer(eTargetPlayer).getName(), 
			PlayerUtil.getPlayer(eDemandPlayer).getName(), 
			PlayerUtil.getPlayer(eVictim).getName())
Beispiel #21
0
def onEmbargoRejected(argsList):
	#BugUtil.debug("DiplomacyUtil::onEmbargoRejected %s" %(str(argsList)))
	eTargetPlayer, eDemandPlayer, eVictim = argsList
	BugUtil.debug("DiplomacyUtil - %s rejects demand from %s to stop trading with %s",
			PlayerUtil.getPlayer(eTargetPlayer).getName(), 
			PlayerUtil.getPlayer(eDemandPlayer).getName(), 
			PlayerUtil.getPlayer(eVictim).getName())
Beispiel #22
0
def onHelpOffered(argsList):
	#BugUtil.debug("DiplomacyUtil::onHelpOffered %s" %(str(argsList)))
	eOfferPlayer, eTargetPlayer, pTrade = argsList
	BugUtil.debug("DiplomacyUtil - %s offers help to %s: %r",
			PlayerUtil.getPlayer(eOfferPlayer).getName(), 
			PlayerUtil.getPlayer(eTargetPlayer).getName(),
			pTrade)
Beispiel #23
0
def setXMLOptionsfromIniFile():
	BugUtil.debug("Initializing A New Dawn Diplomacy Settings")

	ANewDawnOpt.setCanTradeTechs(not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_TECH_TRADING))
	ANewDawnOpt.setCanBrokerTechs(not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_TECH_BROKERING))
	gc.setDefineINT("CAN_TRADE_RESOURCES", ANewDawnOpt.isCanTradeResources())
	gc.setDefineINT("CAN_TRADE_CITIES", ANewDawnOpt.isCanTradeCities())
	gc.setDefineINT("CAN_TRADE_WORKERS", ANewDawnOpt.isCanTradeWorkers())
	gc.setDefineINT("NO_MILITARY_UNIT_TRADING", not ANewDawnOpt.isCanTradeMilitary())
	gc.setDefineINT("CAN_TRADE_GOLD", ANewDawnOpt.isCanTradeGold())
	gc.setDefineINT("CAN_TRADE_GOLD_PER_TURN", ANewDawnOpt.isCanTradeGoldPerTurn())
	gc.setDefineINT("CAN_TRADE_MAPS", ANewDawnOpt.isCanTradeMaps())
	ANewDawnOpt.setCanTradeVassals(not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_VASSAL_STATES))
	gc.setDefineINT("CAN_TRADE_EMBASSIES", ANewDawnOpt.isCanTradeEmbassies())
	gc.setDefineINT("CAN_TRADE_CONTACT", ANewDawnOpt.isCanTradeContact())
	gc.setDefineINT("CAN_TRADE_CORPORATIONS", ANewDawnOpt.isCanTradeCorporations())
	gc.setDefineINT("CAN_TRADE_PEACE", ANewDawnOpt.isCanTradePeace())
	gc.setDefineINT("CAN_TRADE_WAR", ANewDawnOpt.isCanTradeWar())
	gc.setDefineINT("CAN_TRADE_EMBARGO", ANewDawnOpt.isCanTradeEmbargo())	
	gc.setDefineINT("CAN_TRADE_CIVICS", ANewDawnOpt.isCanTradeCivics())		
	gc.setDefineINT("CAN_TRADE_RELIGIONS", ANewDawnOpt.isCanTradeReligions())		
	gc.setDefineINT("CAN_TRADE_OPEN_BORDERS", ANewDawnOpt.isCanTradeOpenBorders())	
	gc.setDefineINT("CAN_TRADE_LIMITED_BORDERS", ANewDawnOpt.isCanTradeLimitedBorders())	
	gc.setDefineINT("CAN_TRADE_DEFENSIVE_PACT", ANewDawnOpt.isCanTradeDefensivePact())	
	ANewDawnOpt.setCanTradeAlliance(gc.getGame().isOption(GameOptionTypes.GAMEOPTION_PERMANENT_ALLIANCES))
	ANewDawnOpt.setAdvancedDiplomacy(gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_DIPLOMACY))
	def DumpStatus(self):

		BugUtil.debug("StatusDump")

		# open the status dump file
		self.StatusDump_OpenFile()

		# Year
		zyear = self._getGameYear()
		zsTurn = self._getGameTurn()
		zCurrDateTime = time.strftime("%d-%b-%Y %H:%M:%S")

		sMsg = BugUtil.getText("TXT_KEY_STATUS_DUMP_TURN", (zsTurn, zyear, zCurrDateTime))
		self._writeMsg(sMsg, vColor="Black", vBold=False, vUnderline=True, vOpenSpoiler=sMsg, vCloseSpoiler=False)

		# basic leader information
		self.StatusDump_Basic()

		# tech, culture, espionage, gold per turn info
		self.StatusDump_Spinners()

		# loop over each city
		self.StatusDump_Player_Cities()

		# loop over each unit
		self.StatusDump_Player_Units()

		# tech, culture, espionage, gold per turn info
		self.StatusDump_AIs()

		self._writeMsg(" ", vColor="Black", vBold=False, vUnderline=False, vOpenSpoiler="", vCloseSpoiler=True)

		self.StatusDump_CloseFile()
 def __init__(
     self,
     comment,
     event,
     handler=None,
     sendFromPlayer=True,
     sendToPlayer=True,
     sendData=False,
     sendArgs=False,
     argFunc=None,
     sendTrade=False,
     tradeType=None,
 ):
     self.comment = comment
     self.eComment = gc.getInfoTypeForString(comment)
     if self.eComment == -1:
         raise BugUtil.ConfigError("invalid comment type %s" % comment)
     self.event = event
     self.sendFromPlayer = sendFromPlayer
     self.sendToPlayer = sendToPlayer
     self.sendData = sendData
     self.sendArgs = sendArgs
     self.argFunc = argFunc
     self.sendTrade = sendTrade
     self.tradeType = tradeType
     if tradeType:
         BugUtil.debug("DiplomacyUtil - mapped %s to %s with %s", comment, event, str(tradeType))
     else:
         BugUtil.debug("DiplomacyUtil - mapped %s to %s", comment, event)
     g_eventsByCommentType[self.eComment] = self
     g_eventManager.addEventHandler(event, handler)
def initHelpers ():
	""" Initialize the helper data structures, clearing all previous data. 

	Because most of the functions in this module always start out checking
	whether detection is necessary, this is stored in a global Boolean which
	is set here based on game options and then directly accessed everywhere
	else; it can be also accessed outside the module via an accessor function.

	The other helper which is setup here is a dict of civics keyed on their
	category. This is useful because the civic detection algorithms often
	need to exclude either an entire category or all but one civic in a
	given category. This data structure allows us to simply iterate over a 
	specific category instead of having to iterate over all civics each time.
	"""
	global gDetectionNecessary
	gDetectionNecessary = gc.getGame().isOption(GameOptionTypes.GAMEOPTION_RANDOM_PERSONALITIES)
	BugUtil.debug("FavoriteCivicDetector.initHelpers() gDetectionNecessary: %s" % (str(gDetectionNecessary)))
	if gDetectionNecessary:
		BugUtil.debug("FavoriteCivicDetector.initHelpers() initializing gCivicsByCategory")
		global gCivicsByCategory
		gCivicsByCategory = {}
		for eCategory in range(gc.getNumCivicOptionInfos()):
			gCivicsByCategory[eCategory] = set()
		for eCivic in range(gc.getNumCivicInfos()):
			gCivicsByCategory[gc.getCivicInfo(eCivic).getCivicOptionType()].add(eCivic)
    def dispatch(self, eFromPlayer, eToPlayer, args):
        data = diplo.getData()
        BugUtil.debug("DiplomacyUtil - %s [%d] from %d to %d with %r", self.comment, data, eFromPlayer, eToPlayer, args)
        argList = []
        if self.sendFromPlayer:
            argList.append(eFromPlayer)
        if self.sendToPlayer:
            argList.append(eToPlayer)

        if self.argFunc:
            argList.extend(self.argFunc(eFromPlayer, eToPlayer, args, data))
            BugUtil.debug("DiplomacyUtil - firing %s", self.event)
        else:
            if self.sendData:
                argList.append(data)
            if self.sendArgs:
                argList.append(args)

            if self.sendTrade or self.tradeType:
                trade = getProposedTrade()
                if self.sendTrade:
                    argList.append(trade)
                if self.tradeType:
                    trades = trade.findType(self.tradeType)
                    if trade and trades:
                        iData = trades[0].iData
                        BugUtil.debug("DiplomacyUtil - firing %s with %s %d", self.event, str(self.tradeType), iData)
                        argList.append(iData)
                    else:
                        BugUtil.debug("DiplomacyUtil - firing %s without %s", self.event, str(self.tradeType))
                        argList.append(-1)
            else:
                BugUtil.debug("DiplomacyUtil - firing %s", self.event)
        g_eventManager.fireEvent(self.event, *argList)
Beispiel #28
0
	def __delitem__(self, key):
		BugUtil.debug("BugData - del %s.%s", self, key)
		try:
			del self.data[key]
			self.dirty = True
		except:
			pass
Beispiel #29
0
def _getRemoteRevision(url):
	"""
	Parses and returns the revision number from a remote SVN repository.
	
	The URL must be correctly escaped (+ for space, etc).
	A BugError exception is raised if the URL can't be connected to or it doesn't
	have the expected format.
	
	This function looks specifically for the string 'Revision: ####' anywhere
	in the first MAX_READ_LINES
	"""
	try:
		timer = BugUtil.Timer("SvnUtil.getRevision")
		try:
			BugUtil.debug("SvnUtil.getRevision - opening '%s'", url)
			web = urllib.urlopen(urllib.quote(url, "/:"))
			count = 0
			try:
				for line in web:
					result = REVISION_PATTERN.search(line)
					if result:
						BugUtil.debug("SvnUtil.getRevision - found '%s'", result.group())
						try:
							return int(result.group(1))
						except ValueError:
							raise BugUtil.BugError("invalid SVN revision format '%s'" 
									% result.group(1))
					count += 1
					if count > MAX_READ_LINES:
						return None
			finally:
				web.close()
		except IOError, e:
			raise BugUtil.BugError("failed to access SVN repository: %s" % str(e))
		return None
Beispiel #30
0
	def addOption(self, option):
		"""Adds an Option to the dictionary if its ID doesn't clash."""
		if option.id in self.options:
			BugUtil.error("BugOptions - duplicate option %s", option.id)
		else:
			self.options[option.id] = option
			BugUtil.debug("BugOptions - added option %s", str(option))
 def __init__(self, eventManager):
     BugUtil.debug(
         "FavoriteCivicDetector.__init__(). Resetting data and initing event manager."
     )
     initHelpers()
     eventManager.addEventHandler('BeginActivePlayerTurn',
                                  self.onBeginActivePlayerTurn)
     eventManager.addEventHandler("GameStart", self.onGameStart)
     eventManager.addEventHandler("OnLoad", self.onLoadGame)
     eventManager.addEventHandler("OnPreSave", self.onPreSave)
     eventManager.addEventHandler("CivicDemanded", self.onCivicDemanded)
def onHelpDemanded(argsList):
    #BugUtil.debug("DiplomacyUtil::onHelpDemanded %s" %(str(argsList)))
    eDemandPlayer, eTargetPlayer, pTrade = argsList
    szItems = ""
    for i in range(pTrade.getCount()):
        szItems = szItems + TradeUtil.format(eTargetPlayer, pTrade.getTrade(i))
    BugUtil.debug(
        "DiplomacyUtil - %s requests help (%s) from %s",
        PlayerUtil.getPlayer(eDemandPlayer).getCivilizationShortDescription(0),
        szItems,
        PlayerUtil.getPlayer(eTargetPlayer).getCivilizationShortDescription(0))
Beispiel #33
0
def store():
    global g_values, g_iTurn
    g_iTurn = gc.getGame().getGameTurn()
    g_values = getCurrentValuesByTeam()
    data = {
        SD_VERSION_ID: STORAGE_VERSION,
        SD_TURN_ID: g_iTurn,
        SD_VALUES_ID: g_values
    }
    BugData.getTable(SD_MOD_ID).setData(data)
    BugUtil.debug("SpyUtil - stored: %s", data)
    def addEvent(self, eventType):
        """Creates a new event type without any handlers.
		
		Prints a warning if eventType is already defined.
		"""
        if self.hasEvent(eventType):
            BugUtil.warn("BugEventManager - event '%s' already defined",
                         eventType)
        else:
            BugUtil.debug("BugEventManager - adding event '%s'", eventType)
            self.EventHandlerMap[eventType] = []
Beispiel #35
0
 def determineNewConceptSubCategory(self, iItem):
     info = gc.getNewConceptInfo(iItem)
     BugUtil.debug("NewConcept itme %d is %s" %
                   (iItem, info.getDescription()))
     if (self.isTraitInfo(info)):
         return SevoScreenEnums.PEDIA_TRAITS
     if (self.isStrategyInfo(info)):
         return SevoScreenEnums.PEDIA_STRATEGY
     if (self.isShortcutInfo(info)):
         return SevoScreenEnums.PEDIA_SHORTCUTS
     return SevoScreenEnums.PEDIA_BTS_CONCEPTS
def init():
	BugUtil.debug("Barbarian Diplomacy INIT.")

	global gb_NoGoodyHuts
	gb_NoGoodyHuts = CyGame().isOption(GameOptionTypes.GAMEOPTION_NO_GOODY_HUTS)

	global giIndigenousPeopleImprovement
	giIndigenousPeopleImprovement = gc.getInfoTypeForString("IMPROVEMENT_INDIGENOUS_COMMUNITY")

	global gaIPattitude2Player
	gaIPattitude2Player = []
def onTributeRejected(argsList):
    #BugUtil.debug("DiplomacyUtil::onTributeRejected %s" %(str(argsList)))
    eTargetPlayer, eDemandPlayer, pTrade = argsList
    szItems = ""
    for i in range(pTrade.getCount()):
        szItems = szItems + TradeUtil.format(eTargetPlayer, pTrade.getTrade(i))
    BugUtil.debug(
        "DiplomacyUtil - %s refuses to give tribute (%s) to %s",
        PlayerUtil.getPlayer(eTargetPlayer).getCivilizationShortDescription(0),
        szItems,
        PlayerUtil.getPlayer(eDemandPlayer).getCivilizationShortDescription(0))
Beispiel #38
0
	def setPopupHandler(self, eventType, handler):
		"""Removes all previously installed popup handlers for the given event type and installs a new pair of handlers.

		The eventType should be an integer.
		It must be unique with respect to the integers assigned to built in events.
		The popupHandler should be a list made up of (name, applyFunction, beginFunction).
		The name is used in debugging output.
		The begin and apply functions are invoked by beginEvent and applyEvent,
		respectively, to manage a popup dialog in response to the event.
		"""
		BugUtil.debug("BugEventManager - setting popup handler for event %s (%d)", handler[0], eventType)
		self.Events[eventType] = handler
Beispiel #39
0
	def removePopupHandler(self, eventType):
		"""Removes all previously installed popup handlers for the given
		event type.

		The eventType should be an integer. It is an error to fire this
		eventType after removing its handlers.
		"""
		if eventType in self.Events:
			BugUtil.debug("BugEventManager - removing popup handler for event %d", eventType)
			del self.Events[eventType]
		else:
			BugUtil.warn("BugEventManager - event %d has no popup handler", eventType)
	def _addModuleUtils(self, utils, override=False, log=None):
		# Registers all of the handler and listener functions in <utils> that match existing callbacks.
		BugUtil.debug("BugGameUtils - registering %s", utils.__name__)
		for name, func in utils.__dict__.iteritems():
			if not name.startswith("_") and isinstance(func, types.FunctionType):
				if name.endswith("Listener"):
					name = name[:-len("Listener")]
					if name in self._callbacks:
						self._addListener(name, func, log)
				else:
					if name in self._callbacks:
						self._addHandler(name, func, override, log)
    def onKbdEvent(self, argsList):
        eventType, key, mx, my, px, py = argsList

        #		BugUtil.debug("StatusDump-Start-1")

        if (eventType == self.eventMgr.EventKeyDown
                and int(key) == int(InputTypes.KB_D) and self.eventMgr.bCtrl
                and self.eventMgr.bAlt):
            BugUtil.debug("StatusDump-Start-2")
            self.DumpStatus()

            return 1
Beispiel #42
0
	def setValue(self, value, *args):
		"""Sets the value and calls onChanged() if different.

		Sets it to the default if value is None.
		"""
		if value is None:
			value = self.getDefault()
			BugUtil.debug("AbstractOption - setting %s to its default %s", self.getID(), value)
		else:
			BugUtil.debug("AbstractOption - setting %s to %s", self.getID(), value)
		if self._setValue(value, *args):
			self.onChanged(*args)
Beispiel #43
0
 def _createCallback(self, name, func, default=None, log=None):
     if log is None:
         log = self._log
     if default is not None:
         BugUtil.debug(
             "BugGameUtils - creating callback %s with default %s", name,
             default)
     else:
         BugUtil.debug("BugGameUtils - creating callback %s", name)
     callback = Callback(name, func, default, log)
     self._callbacks[name] = callback
     setattr(self.__class__, name, callback)
Beispiel #44
0
def init():
    """
	Initializes the entire module.
	"""
    BugUtil.debug("BugPath - initializing...")
    initAppFolder()
    initModName()
    initModFolder()
    initNoCustomAssetsSetting()
    initRootFolder()
    initDataFolder()
    initSearchPaths()
def enabledOptionChanged(pIniObject, bNewValue):
    """ Handler function for processing changes to the Enabled option. """
    BugUtil.debug(
        "EventSigns.enabledOptionsChanged(%s, %s) resetting g_bShowSigns." %
        (str(pIniObject), str(bNewValue)))
    global g_bShowSigns
    if g_bShowSigns != bNewValue:
        g_bShowSigns = bNewValue
        if gSavedSigns == None:
            initData()
        gSavedSigns.processSigns(g_bShowSigns)
    return True
Beispiel #46
0
def _setWidgetHelp(widget, type, func):
    """
	Registers the hover text <func> for <widget> if it hasn't been already.
	
	Do not call this function as it is used internally by the registration functions above.
	"""
    if widget in g_widgetHelp:
        BugUtil.warn("WidgetTypes %d help already registered", widget)
    else:
        BugUtil.debug(
            "WidgetUtil - registering %s hover help for WidgetTypes %d: %s",
            type, widget, func)
        g_widgetHelp[widget] = func
	def showContents(self, bForce=False, iCategory=PEDIA_TECHS):
		self.deleteAllWidgets()
		BugUtil.debug("Drawing category list")
		self.placeCategories(iCategory)
		screen = self.getScreen()
		screen.show(self.BACK_ID)
		screen.show(self.NEXT_ID)
		if self.iCategory != iCategory or bForce:
			BugUtil.debug("Drawing item list %d" % iCategory)
			self.mapListGenerators.get(iCategory)()
			self.iCategory = iCategory
			self.iItem = -1
			self.iItemIndex = -1
Beispiel #48
0
def loadMod(name):
    """Load the given mod from its XML file using a custom parser."""
    path = BugPath.findAssetFile(name + ".xml", "Config")
    if path:
        BugUtil.debug("BugInit - loading mod %s...", name)
        parser = BugConfig.ConfigParser()
        timer = BugUtil.Timer("load mod")
        try:
            parser.parse(path)
        finally:
            timer.log(name)
    else:
        BugUtil.error("BugInit - cannot find XML file for mod %s", name)
Beispiel #49
0
def triggerRandomEvent(argsList):
    id = argsList[0]
    iData1 = argsList[1]
    BugUtil.debug("args: %r", argsList)

    type = None
    if id < gc.getNumEventTriggerInfos():
        type = gc.getEventTriggerInfo(id).getType()
    else:
        return
    BugUtil.alert("Event: %s [%d]", type, id)
    pPlayer = PlayerUtil.getPlayer(iData1)
    pPlayer.trigger(id)
Beispiel #50
0
 def onKbdEvent(self, argsList):
     """
     Handles onKbdEvent by firing the keystroke's handler if it has one registered.
     """
     eventType, key, mx, my, px, py = argsList
     if eventType == self.EventKeyDown:
         if not InputUtil.isModifier(key):
             stroke = InputUtil.Keystroke(key, self.bAlt, self.bCtrl, self.bShift)
             if stroke in self.shortcuts:
                 BugUtil.debug("BugEventManager - calling handler for shortcut %s", stroke)
                 self.shortcuts[stroke](argsList)
                 return 1
     return 0
Beispiel #51
0
    def removeCity(self, ePlayer, city):
        """
		Removes the city from the data set and erases its dot and cross.
		"""
        if city:
            BugUtil.debug("DotMap - removing city %s", city)
            del self.getCities(ePlayer)[city.point]
            self.dirty = True
            if ePlayer == PlayerUtil.getActivePlayerID():
                self.redrawCrosses(city.layer)
                self.eraseDot(city, self.DOT_ALPHA)
        else:
            BugUtil.warn("City doesn't exist")
 def __init__(self, eventManager):
     BugUtil.debug(
         "EventSigns EventSignsEventHandler.__init__(). Resetting data and initing event manager."
     )
     initOptions()
     initData()
     ## Init event handlers
     eventManager.addEventHandler("GameStart", self.onGameStart)
     eventManager.addEventHandler("OnLoad", self.onLoadGame)
     eventManager.addEventHandler("OnPreSave", self.onPreSave)
     eventManager.addEventHandler("plotRevealed", self.onPlotRevealed)
     eventManager.addEventHandler("BeginActivePlayerTurn",
                                  self.onBeginActivePlayerTurn)
Beispiel #53
0
def getKnownTrainableUnits(playerOrID,
                           askingPlayerOrID,
                           knowableUnits,
                           bonuses,
                           military=None):
    player, team = PlayerUtil.getPlayerAndTeam(playerOrID)
    askingPlayer = PlayerUtil.getPlayer(askingPlayerOrID)
    eAskingTeam, askingTeam = PlayerUtil.getPlayerTeamAndID(askingPlayer)
    #trade = player.canTradeNetworkWith(askingPlayer.getID())
    cities = PlayerUtil.getPlayerCities(
        player, lambda city: city.isRevealed(eAskingTeam, False))
    # separate units into two groups: yes and maybe
    units = getTrainableUnits(playerOrID, knowableUnits, False, military)
    yesUnits = set()
    maybeUnits = set()
    BugUtil.debug("-----------------------")
    for eUnit in units:
        if not canAnyCityBuildUnit(eUnit, cities, eAskingTeam, False):
            BugUtil.debug("  no    %s", gc.getUnitInfo(eUnit).getDescription())
        elif hasBonusesForUnit(eUnit, bonuses):
            BugUtil.debug("  yes   %s", gc.getUnitInfo(eUnit).getDescription())
            yesUnits.add(eUnit)
        elif bonuses is None:
            BugUtil.debug("  maybe %s", gc.getUnitInfo(eUnit).getDescription())
            maybeUnits.add(eUnit)
    return yesUnits, maybeUnits
Beispiel #54
0
def initDataFolder():
    """
	Finds the first directory that contains a folder named SETTINGS_FOLDER.
	"""
    global _dataFolderInitDone
    if _dataFolderInitDone:
        return
    BugUtil.debug("BugPath - initializing data folder")

    # K-Mod. If it doesn't already exist, create the folder in the user directory.
    dir = join(getRootDir(), getModName(), SETTINGS_FOLDER)
    if dir != None:
        if not isdir(dir):
            # copy the default settings from the K-Mod folder.
            default_dir = join(getModDir(), SETTINGS_FOLDER)
            if isdir(default_dir):
                try:
                    safeInfoPath("BugPath - copying settings to '%s'", dir)
                    # copytree is suppose to create the missing parent directores, but apparently it doesn't work. So I need to do this:
                    try:
                        os.makedirs(join(getRootDir(), getModName()))
                    except OSError:
                        pass
                    # sucks.
                    shutil.copytree(default_dir, dir)
                except:
                    BugUtil.trace("Failed to copy settings")
        if not isdir(dir):
            # Second attempt: create the directory manually
            try:
                safeInfoPath("BugPath - creating '%s'", dir)
                os.makedirs(dir)
            except OSError:
                BugUtil.trace("Failed to create directory '%s'", dir)
    # K-Mod end

    dataDirs = (
        join(getRootDir(), getModName()),  # My Games\BTS\BUG Mod
        join(getUserDir(), getModName()),  # My Games\BUG Mod
        join(getAppDir(), getModName()),  # Civ4\BTS\BUG Mod
        join(getModDir(), DATA_FOLDER),  # Civ4\BTS\Mods\BUG Mod 3.6\Data
        join(getModDir()),  # Civ4\BTS\Mods\BUG Mod 3.6
    )
    for dir in dataDirs:
        if setDataDir(dir):
            break
    else:
        BugUtil.error("No valid data directory containing %s found",
                      SETTINGS_FOLDER)
    _dataFolderInitDone = True
Beispiel #55
0
def updateCurrentSigns ():
	""" Updates gCurrentSigns global with all current signs on map. Remember to clear when done."""
	global gCurrentSigns
	gCurrentSigns = MapSigns()
	for iSign in range(engine.getNumSigns()):
		pSign = engine.getSignByIndex(iSign)
		pPlot = pSign.getPlot()
		ePlayer = pSign.getPlayerType()
		szCaption = pSign.getCaption()
		if not gCurrentSigns.hasPlotSigns(pPlot):
			gCurrentSigns[pPlot] = PlotSigns(pPlot)
		gCurrentSigns[pPlot].setSign(ePlayer, szCaption)
	BugUtil.debug("EventSigns.updateCurrentSigns() finished.\n %s" % (str(gCurrentSigns)))
	return True
Beispiel #56
0
def initFractionalTrade():
    """
	Sets the global fractional trade constants by testing for the function it adds.
	
	Fractional Trade is an optional compile-time feature of BULL.
	"""
    global FRACTIONAL_TRADE, TRADE_PROFIT_FUNC
    try:
        TRADE_PROFIT_FUNC = CyCity.calculateTradeProfitTimes100
        FRACTIONAL_TRADE = True
        BugUtil.debug("TradeUtil - Fractional Trade Routes is active")
    except:
        TRADE_PROFIT_FUNC = CyCity.calculateTradeProfit
        FRACTIONAL_TRADE = False
Beispiel #57
0
 def addSign(self):
     """
     Puts sign down on game interface
     """
     if not self.isAdded:
         if gc.getMap().plot(self.plotX,self.plotY):
             self.plot = gc.getMap().plot(self.plotX,self.plotY)
         else:
             BugUtil.debug("Invalid Plot for sign at " + str(self.plotX) + "," + str(self.plotY))
         self.playerType = gc.getGame().getActivePlayer()
         CyEngine().addSign(self.plot,self.playerType,self.text)
         self.isAdded = True
     else:
         BugUtil.debug("Tried to add sign already added to interface")
Beispiel #58
0
 def __call__(self, argsList=None):
     for handler in self.handlers:
         if self.log:
             BugUtil.debug("BugGameUtils - %s - dispatching to %s handler",
                           self.name, handler.__module__)
         result = self.callHandler(handler, argsList)
         if result is not None and result != self.default:
             break
     else:
         if self.default is not None:
             if self.log:
                 BugUtil.debug("BugGameUtils - %s - using default %s",
                               self.name, self.default)
             result = self.default
         else:
             if self.log:
                 BugUtil.debug(
                     "BugGameUtils - %s - dispatching to base handler",
                     self.name)
             result = self.callHandler(self.baseHandler, argsList)
     if result is not None:
         for listener in self.listeners:
             if self.log:
                 BugUtil.debug("BugGameUtils - %s - calling %s listener",
                               self.name, listener.__module__)
             self.callListener(listener, argsList, result)
     else:
         BugUtil.error("BugGameUtils - %s - no handler returned a value",
                       self.name)
     return result
    def displaySign(self, pPlot, ePlayer):
        """ Displays stored sign for given player at given plot based on revealed status.
		If there's a pre-existing sign, engine.addSign will silently fail, leaving the plot unchanged.
		"""
        if not g_bShowSigns:
            BugUtil.debug(
                "MapSigns.displaySign() called but EventSigns is disabled.")
            return False
        if not pPlot or pPlot.isNone():
            BugUtil.warn(
                "MapSigns.displaySign() was passed an invalid plot: %s" %
                (str(pPlot)))
            return False
        thisKey = self.__getKey(pPlot)
        szCaption = ""
        if self.hasPlotSigns(pPlot):
            szCaption = self.plotDict[thisKey].getSign(ePlayer)
        else:
            #BugUtil.debug("MapSigns.displaySign() could not show sign; we don't have any saved signs on plot %s" % (str(thisKey)))
            return False
        if not szCaption:
            BugUtil.debug(
                "MapSigns.displaySign() could not show sign; no caption found for player %d on plot %s"
                % (ePlayer, str(thisKey)))
            return False
        if ePlayer == -1:
            BugUtil.debug(
                "MapSigns.displaySign() landmark (%s) shown on plot %s" %
                (szCaption, ePlayer, str(thisKey)))
            engine.addLandmark(pPlot, szCaption.encode('latin_1'))
        else:
            pPlayer = gc.getPlayer(ePlayer)
            if not pPlayer or pPlayer.isNone():
                BugUtil.warn(
                    "MapSigns.displaySign() was passed an invalid player id: %s"
                    % (str(ePlayer)))
                return False
            eTeam = pPlayer.getTeam()
            if pPlot.isRevealed(eTeam, False):
                BugUtil.debug(
                    "MapSigns.displaySign() sign (%s) shown for player %d on plot %s"
                    % (szCaption, ePlayer, str(thisKey)))
                engine.addSign(pPlot, ePlayer, szCaption.encode('latin_1'))
                return True
            else:
                BugUtil.debug(
                    "MapSigns.displaySign() could not show sign; player %d cannot see plot %s"
                    % (ePlayer, str(thisKey)))
        return False
Beispiel #60
0
	def _addClassUtils(self, utils, override=False, log=None):
		"""
		Registers all of the handler and listener functions in <utils> that match existing callbacks.
		"""
		clazz = utils.__class__
		BugUtil.debug("BugGameUtils - registering %s.%s", clazz.__module__, clazz.__name__)
		for name, func in clazz.__dict__.iteritems():
			if not name.startswith("_") and isinstance(func, types.FunctionType):
				if name.endswith(LISTENER_SUFFIX):
					name = name[:-len(LISTENER_SUFFIX)]
					if name in self._callbacks:
						self._addBoundListener(name, utils, func, log)
				else:
					if name in self._callbacks:
						self._addBoundHandler(name, utils, func, override, log)