Bazaar developer reference

CvGameDeals::PrepareRenewDeal(CvDeal *, const CvDeal *)

Defined in
CvDealClasses.cpp, line 3499
Class
CvGameDeals
Hook name
CivHooks::CvGameDeals_PrepareRenewDeal

Hooks

static bool BeforeCvGameDeals_PrepareRenewDeal(CvDeal* pOldDeal, const CvDeal* pNewDeal);static void AfterCvGameDeals_PrepareRenewDeal(CvDeal* pOldDeal, const CvDeal* pNewDeal);static void ReplaceCvGameDeals_PrepareRenewDeal(void (*original)(CvDeal*, const CvDeal*), CvDeal* pOldDeal, const CvDeal* pNewDeal);CivRegisterBefore<CivHooks::CvGameDeals_PrepareRenewDeal>(host, &BeforeCvGameDeals_PrepareRenewDeal);CivRegisterAfter<CivHooks::CvGameDeals_PrepareRenewDeal>(host, &AfterCvGameDeals_PrepareRenewDeal);CivRegisterReplace<CivHooks::CvGameDeals_PrepareRenewDeal>(host, &ReplaceCvGameDeals_PrepareRenewDeal);

Code

3498/// Mark elements in the deal as renewed depending on if they are in both deals3499void CvGameDeals::PrepareRenewDeal(CvDeal* pOldDeal, const CvDeal* pNewDeal)3500{3501	// Cancel individual items3502	// HACK HACK HACK3503	// bad slewis! bad! bad!!3504	CvDeal* pNonConstNewDeal = (CvDeal*)pNewDeal;3505	// end HACK HACK HACK35063507	CvAssertMsg(pOldDeal->m_eFromPlayer == pNewDeal->m_eFromPlayer, "Deal is not to the same from players");3508	CvAssertMsg(pOldDeal->m_eToPlayer == pNewDeal->m_eToPlayer, "Deal is not to the same to players");35093510	CvPlayerAI& fromPlayer = GET_PLAYER(pOldDeal->m_eFromPlayer);3511	CvPlayerAI& toPlayer = GET_PLAYER(pOldDeal->m_eToPlayer);35123513	TradedItemList::iterator oldDealItemIter;3514	for(oldDealItemIter = pOldDeal->m_TradedItems.begin(); oldDealItemIter != pOldDeal->m_TradedItems.end(); ++oldDealItemIter)3515	{3516		// if this is not a renewable item, ignore3517		if(CvDeal::GetItemTradeableState(oldDealItemIter->m_eItemType) != CvDeal::DEAL_RENEWABLE)3518		{3519			continue;3520		}35213522		TradedItemList::iterator newDealItemIter;3523		for(newDealItemIter = pNonConstNewDeal->m_TradedItems.begin(); newDealItemIter != pNonConstNewDeal->m_TradedItems.end(); ++newDealItemIter)3524		{3525			// if this is not a renewable item, ignore3526			if(CvDeal::GetItemTradeableState(newDealItemIter->m_eItemType) != CvDeal::DEAL_RENEWABLE)3527			{3528				continue;3529			}35303531			// if the from player doesn't match, ignore3532			if(oldDealItemIter->m_eFromPlayer != newDealItemIter->m_eFromPlayer)3533			{3534				continue;3535			}35363537			// if the item types don't match, ignore3538			if(oldDealItemIter->m_eItemType != newDealItemIter->m_eItemType)3539			{3540				continue;3541			}35423543			TradeableItems eItemType = oldDealItemIter->m_eItemType;35443545			if(eItemType == TRADE_ITEM_RESOURCES)3546			{3547				// resource type3548				if(oldDealItemIter->m_iData1 != newDealItemIter->m_iData1)3549				{3550					continue;3551				}35523553				ResourceTypes eResource = (ResourceTypes)oldDealItemIter->m_iData1;35543555				// quantity3556				if(oldDealItemIter->m_iData2 != newDealItemIter->m_iData2)3557				{3558					int iResourceDelta = newDealItemIter->m_iData2 - oldDealItemIter->m_iData2;3559					if(oldDealItemIter->m_eFromPlayer == pOldDeal->m_eFromPlayer)3560					{3561						fromPlayer.changeResourceExport(eResource, iResourceDelta);3562						toPlayer.changeResourceImport(eResource, iResourceDelta);3563					}3564					else3565					{3566						toPlayer.changeResourceExport(eResource, iResourceDelta);3567						fromPlayer.changeResourceImport(eResource, iResourceDelta);3568					}3569				}3570			}35713572			if(oldDealItemIter->m_eItemType == TRADE_ITEM_GOLD_PER_TURN)3573			{3574				int iOldGPTAmount = oldDealItemIter->m_iData1;3575				int iNewGPTAmount = newDealItemIter->m_iData1;35763577				// has the amount of gold amount changed?3578				if(iOldGPTAmount != iNewGPTAmount)3579				{3580					int iGoldPerTurnDelta = iNewGPTAmount - iOldGPTAmount;3581					if(oldDealItemIter->m_eFromPlayer == pOldDeal->m_eFromPlayer)3582					{3583						fromPlayer.GetTreasury()->ChangeGoldPerTurnFromDiplomacy(-iGoldPerTurnDelta);3584						toPlayer.GetTreasury()->ChangeGoldPerTurnFromDiplomacy(iGoldPerTurnDelta);3585					}3586					else3587					{3588						toPlayer.GetTreasury()->ChangeGoldPerTurnFromDiplomacy(-iGoldPerTurnDelta);3589						fromPlayer.GetTreasury()->ChangeGoldPerTurnFromDiplomacy(iGoldPerTurnDelta);3590					}3591				}3592			}35933594			// mark the deals as appropriately renewed3595			newDealItemIter->m_bToRenewed = true;3596			oldDealItemIter->m_bFromRenewed = true;35973598			// break because we found the match and can continue on3599			break;3600		}3601	}3602}

Calls

Called by