Bazaar developer reference

CvGameDeals::FinalizeDeal(PlayerTypes, PlayerTypes, bool)

Defined in
CvDealClasses.cpp, line 2121
Class
CvGameDeals
Hook name
CivHooks::CvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool

Hooks

static bool BeforeCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool(CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes eToPlayer, bool bAccepted, bool& result);static void AfterCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool(CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes eToPlayer, bool bAccepted, bool& result);static bool ReplaceCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool(bool (*original)(CvGameDeals*, PlayerTypes, PlayerTypes, bool), CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes eToPlayer, bool bAccepted);CivRegisterBefore<CivHooks::CvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool>(host, &BeforeCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool);CivRegisterAfter<CivHooks::CvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool>(host, &AfterCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool);CivRegisterReplace<CivHooks::CvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool>(host, &ReplaceCvGameDeals_FinalizeDeal_with_PlayerTypes_PlayerTypes_bool);

Code

2120/// Moves a deal from the proposed list to the active one (returns FALSE if deal not found)2121bool CvGameDeals::FinalizeDeal(PlayerTypes eFromPlayer, PlayerTypes eToPlayer, bool bAccepted)2122{2123	DealList::iterator dealIt;2124	CvDeal kDeal;2125	bool bFoundIt = false;2126	bool bValid   = true;2127	CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true> veNowAtPeacePairs; // hacked CvWeighedVector to keep track of third party minors that this deal makes at peace21282129	// Find the deal in the list of proposed deals2130	for(dealIt = m_ProposedDeals.begin(); dealIt != m_ProposedDeals.end(); ++dealIt)2131	{2132		if(dealIt->m_eFromPlayer == eFromPlayer && dealIt->m_eToPlayer == eToPlayer)2133		{2134			kDeal = *dealIt;21352136// EFB: once we can use list containers in AutoVariables, go back to this way of deleting2137//			m_ProposedDeals.erase(dealIt);2138			bFoundIt = true;2139		}2140	}21412142	if(bFoundIt)2143	{21442145		TradedItemList::iterator iter;2146		for(iter = kDeal.m_TradedItems.begin(); iter != kDeal.m_TradedItems.end(); ++iter)2147		{2148			if(iter->m_bToRenewed)  // slewis - added exception in case of something that was renewed2149			{2150				continue;2151			}21522153			if(!kDeal.IsPossibleToTradeItem(iter->m_eFromPlayer, kDeal.GetOtherPlayer(iter->m_eFromPlayer), iter->m_eItemType, iter->m_iData1, iter->m_iData2, iter->m_iData3, iter->m_bFlag1, false, true))2154			{2155				// mark that the deal is no longer valid. We will still delete the deal but not commit its actions2156				bValid = false;2157				break;2158			}2159		}216021612162		// **** START HACK ****2163		// EFB: temporary delete method; recopy vector without this element2164		//2165		// Copy the deals into a temporary container2166		DealList tempDeals;2167		for(dealIt = m_ProposedDeals.begin(); dealIt != m_ProposedDeals.end(); ++dealIt)2168		{2169			tempDeals.push_back(*dealIt);2170		}21712172		// Copy back in minus this element2173		m_ProposedDeals.clear();2174		for(dealIt = tempDeals.begin(); dealIt != tempDeals.end(); ++dealIt)2175		{2176			if(dealIt->m_eFromPlayer != eFromPlayer || dealIt->m_eToPlayer != eToPlayer)2177			{2178				m_ProposedDeals.push_back(*dealIt);2179			}2180		}2181		// **** END HACK ****21822183		if(bValid && bAccepted)2184		{2185			FinalizeDealValidAndAccepted(eFromPlayer, eToPlayer, kDeal, bAccepted, veNowAtPeacePairs);2186		}2187	}2188	2189	FinalizeDealNotify(eFromPlayer, eToPlayer, veNowAtPeacePairs);21902191	return bFoundIt && bValid;2192}

Calls

Called by