Merging BUG with Advanced Diplomacy

I have no idea about the first error, but AttitudeUtil--as the name suggests--deals with AI attitudes. You'll need to modify that file to handle more than five attitudes: providing each with a color and maybe other ramifications.
 
It' because I forgot the modified Civ4MemoryInfos.XML for the new memory type. I've already corrected the modcomp. ;)
 
We also need to modify TradeUtil.py. But I don't know what to do atm.
 
I have just copied some code from Afforess AND into TradeUtil.py:

PHP:
def canSignOpenBorders(fromTeam, toTeam):
	"""
	Returns True if the two CyTeams can sign an Open Borders agreement.
	"""
	if fromTeam.isOpenBorders(toTeam.getID()) or toTeam.isOpenBorders(fromTeam.getID()):
		return False
	return fromTeam.isOpenBordersTrading() or toTeam.isOpenBordersTrading()
#Afforess
def getLimitedBordersTradePartners(playerOrID):
	"""
	Returns a list of CyPlayers that can sign an Limited Borders agreement with <player>.
	"""
	return getTradePartnersByTeam(playerOrID, canSignLimitedBorders)

def canSignLimitedBorders(fromTeam, toTeam):
	"""
	Returns True if the two CyTeams can sign an Limited Borders agreement. 
	Limited Borders are enabled when Open Borders are, so the functions are identical.
	"""
	if fromTeam.isOpenBorders(toTeam.getID()) or toTeam.isOpenBorders(fromTeam.getID()):
		return False
	if not (gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_DIPLOMACY)):
		return False
	return fromTeam.isOpenBordersTrading() or toTeam.isOpenBordersTrading()

def getEmbassyTradePartners(playerOrID):
	"""
	Returns a list of CyPlayers that can sign an Limited Borders agreement with <player>.
	"""
	return getTradePartnersByTeam(playerOrID, canTradeEmbassy)

def canTradeEmbassy(fromTeam, toTeam):
	"""
	Returns True if the two CyTeams can trade for an Embassy. 
	Embassies are enabled when Open Borders are, so the functions are identical.
	"""
	if fromTeam.isOpenBorders(toTeam.getID()) or toTeam.isOpenBorders(fromTeam.getID()):
		return False
	if not (gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_DIPLOMACY)):
		return False
	return fromTeam.isOpenBordersTrading() or toTeam.isOpenBordersTrading()

#Afforess End

PHP:
def initTradeableItems():
	addSimpleTrade("gold", TradeableItems.TRADE_GOLD, "TXT_KEY_TRADE_GOLD_NUM")
	addSimpleTrade("gold per turn", TradeableItems.TRADE_GOLD_PER_TURN, "TXT_KEY_TRADE_GOLD_PER_TURN_NUM")
	addPlainTrade("map", TradeableItems.TRADE_MAPS, "TXT_KEY_TRADE_WORLD_MAP_STRING")
	addPlainTrade("vassal", TradeableItems.TRADE_VASSAL, "TXT_KEY_TRADE_VASSAL_TREATY_STRING")
	addPlainTrade("capitulation", TradeableItems.TRADE_SURRENDER, "TXT_KEY_TRADE_CAPITULATE_STRING")
	addPlainTrade("open borders", TradeableItems.TRADE_OPEN_BORDERS, "TXT_KEY_TRADE_OPEN_BORDERS_STRING")
	addPlainTrade("defensive pact", TradeableItems.TRADE_DEFENSIVE_PACT, "TXT_KEY_TRADE_DEFENSIVE_PACT_STRING")
	addPlainTrade("alliance", TradeableItems.TRADE_PERMANENT_ALLIANCE, "TXT_KEY_TRADE_PERMANENT_ALLIANCE_STRING")
	addComplexTrade("peace treaty", TradeableItems.TRADE_PEACE_TREATY, getTradePeaceDeal)
	addComplexTrade("technology", TradeableItems.TRADE_TECHNOLOGIES, getTradeTech)
	addComplexTrade("resource", TradeableItems.TRADE_RESOURCES, getTradeBonus)
	addComplexTrade("city", TradeableItems.TRADE_CITIES, getTradeCity)
	addAppendingTrade("peace", TradeableItems.TRADE_PEACE, "TXT_KEY_TRADE_PEACE_WITH", getTradePlayer)
	addAppendingTrade("war", TradeableItems.TRADE_WAR, "TXT_KEY_TRADE_WAR_WITH", getTradePlayer)
	addAppendingTrade("trade embargo", TradeableItems.TRADE_EMBARGO, "TXT_KEY_TRADE_STOP_TRADING_WITH", getTradePlayer, " %s")
	addAppendingTrade("civic", TradeableItems.TRADE_CIVIC, "TXT_KEY_TRADE_ADOPT", getTradeCivic)
	addAppendingTrade("religion", TradeableItems.TRADE_RELIGION, "TXT_KEY_TRADE_CONVERT", getTradeReligion)
	#Afforess
	addPlainTrade("limited borders", TradeableItems.TRADE_RITE_OF_PASSAGE, "TXT_KEY_TRADE_LIMITED_BORDERS_STRING")
	addPlainTrade("embassy", TradeableItems.TRADE_EMBASSY, "TXT_KEY_TRADE_EMBASSY_STRING")
	addComplexTrade("units", TradeableItems.TRADE_MILITARY_UNIT, getTradeUnits)
	addComplexTrade("workers", TradeableItems.TRADE_WORKER, getTradeWorkers)
	addComplexTrade("contact", TradeableItems.TRADE_CONTACT, getTradeContacts)
	#Afforess End

PHP:
def getTradePeaceDeal(player, trade):
	BugUtil.debug("TradeUtil - peace treaty has iData %d", trade.iData)
	return BugUtil.getText("TXT_KEY_TRADE_PEACE_TREATY_STRING", (gc.getDefineINT("PEACE_TREATY_LENGTH"),))

#Afforess
def getTradeUnits(player, trade):
	return PlayerUtil.getPlayer(player).getUnit(trade.iData).getName()
	
def getTradeWorkers(player, trade):
	return PlayerUtil.getPlayer(player).getUnit(trade.iData).getName()
	
def getTradeContacts(player, trade):
	return PlayerUtil.getPlayerTeam(trade.iData).getName()
#Afforess End
## Classes for Formatting TradeData


But when loading my save, I get this error screen:

 
I think I forgot to add the changes to CyEnumsInterface. You can probably figure out where the changes go; but I'll update the modcomp in a bit.
 
I can't be sure without seeing how the limited borders and embassy features are implemented, but I think there's an omission in the two functions that check if trading them is available.

For limited borders I think you need to add a check (green) to see if they've already signed this agreement. The open borders check (red) should probably remain since it makes no sense to sign limited borders when you already have the more permissive open borders. Of course, it would allow you to sign limited and then cancel open. If you want that ability, ignore this.

Code:
def canSignLimitedBorders(fromTeam, toTeam):
    """
    Returns True if the two CyTeams can sign an Limited Borders agreement. 
    Limited Borders are enabled when Open Borders are, so the functions are identical.
    """
    if fromTeam.[B][COLOR="Red"]isOpenBorders[/COLOR][/B](toTeam.getID()) or toTeam.[B][COLOR="Red"]isOpenBorders[/COLOR][/B](fromTeam.getID()):
        return False
    if fromTeam.[B][COLOR="Green"]isLimitedBorders[/COLOR][/B](toTeam.getID()) or toTeam.[B][COLOR="Green"]isLimitedBorders[/COLOR][/B](fromTeam.getID()):
        return False
    if not (gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_DIPLOMACY)):
        return False
    return fromTeam.isOpenBordersTrading() or toTeam.isOpenBordersTrading()

The same applies here. As coded you cannot trade embassies if you have open borders. Is this what you want? Isn't there a separate CyTeam.hasEmbassy(TeamTypes) function? Are embassies always symmetrical, or can one team allow the other to open an embassy but not the other way around?

Code:
def canTradeEmbassy(fromTeam, toTeam):
    """
    Returns True if the two CyTeams can trade for an Embassy. 
    Embassies are enabled when Open Borders are, so the functions are identical.
    """
    if fromTeam.[B][COLOR="Red"]isOpenBorders[/COLOR][/B](toTeam.getID()) or toTeam.[B][COLOR="Red"]isOpenBorders[/COLOR][/B](fromTeam.getID()):
        return False
    if not (gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_DIPLOMACY)):
        return False
    return fromTeam.isOpenBordersTrading() or toTeam.isOpenBordersTrading()
 
Top Bottom