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}