Bazaar developer reference

CvDealAI::DoEqualizeDealWithAI(CvDeal *, PlayerTypes)

Defined in
CvDealAI.cpp, line 725
Class
CvDealAI
Hook name
CivHooks::CvDealAI_DoEqualizeDealWithAI

Hooks

static bool BeforeCvDealAI_DoEqualizeDealWithAI(CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer, bool& result);static void AfterCvDealAI_DoEqualizeDealWithAI(CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer, bool& result);static bool ReplaceCvDealAI_DoEqualizeDealWithAI(bool (*original)(CvDealAI*, CvDeal*, PlayerTypes), CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer);CivRegisterBefore<CivHooks::CvDealAI_DoEqualizeDealWithAI>(host, &BeforeCvDealAI_DoEqualizeDealWithAI);CivRegisterAfter<CivHooks::CvDealAI_DoEqualizeDealWithAI>(host, &AfterCvDealAI_DoEqualizeDealWithAI);CivRegisterReplace<CivHooks::CvDealAI_DoEqualizeDealWithAI>(host, &ReplaceCvDealAI_DoEqualizeDealWithAI);

Code

724/// Try to even out the value on both sides.  If bFavorMe is true we'll bias things in our favor if necessary725bool CvDealAI::DoEqualizeDealWithAI(CvDeal* pDeal, PlayerTypes eOtherPlayer)726{727	PlayerTypes eMyPlayer = GetPlayer()->GetID();728	DEBUG_VARIABLE(eMyPlayer);729730	CvAssert(eOtherPlayer >= 0);731	CvAssert(eOtherPlayer < MAX_MAJOR_CIVS);732	CvAssertMsg(eMyPlayer != eOtherPlayer, "DEAL_AI: Trying to equalize AI deal, but both players are the same.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");733734	int iEvenValueImOffering;735	int iEvenValueTheyreOffering;736	int iTotalValue = GetDealValue(pDeal, iEvenValueImOffering, iEvenValueTheyreOffering, /*bUseEvenValue*/ true);737738	int iDealDuration = GC.getGame().GetDealDuration();739740	bool bMakeOffer = false;741742	/////////////////////////////743	// Outline the boundaries for an acceptable deal744	/////////////////////////////745746	int iPercentOverWeWillRequest = GetDealPercentLeewayWithAI();747	int iPercentUnderWeWillOffer = -GetDealPercentLeewayWithAI();748749	int iDealSumValue = iEvenValueImOffering + iEvenValueTheyreOffering;750751	int iAmountOverWeWillRequest = iDealSumValue;752	iAmountOverWeWillRequest *= iPercentOverWeWillRequest;753	iAmountOverWeWillRequest /= 100;754755	int iAmountUnderWeWillOffer = iDealSumValue;756	iAmountUnderWeWillOffer *= iPercentUnderWeWillOffer;757	iAmountUnderWeWillOffer /= 100;758759	// Deal is already even enough for us760	if(iTotalValue <= iAmountOverWeWillRequest && iTotalValue >= iAmountUnderWeWillOffer)761	{762		bMakeOffer = true;763	}764765	// If we set this pointer again it clears the data out!766	if(pDeal != GC.getGame().GetGameDeals()->GetTempDeal())767	{768		GC.getGame().GetGameDeals()->SetTempDeal(pDeal);769	}770771	CvDeal* pCounterDeal = GC.getGame().GetGameDeals()->GetTempDeal();772773	if(!bMakeOffer)774	{775		/////////////////////////////776		// See if there are items we can add or remove from either side to balance out the deal if it's not already even777		/////////////////////////////778779		bool bUseEvenValue = true;780781		DoAddVoteCommitmentToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, bUseEvenValue);782		DoAddVoteCommitmentToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, bUseEvenValue);783784		DoAddResourceToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, iDealDuration, bUseEvenValue);785		DoAddResourceToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, iDealDuration, bUseEvenValue);786787		DoAddOpenBordersToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ true, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, iDealDuration, bUseEvenValue);788		DoAddOpenBordersToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ true, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, iDealDuration, bUseEvenValue);789790		DoAddGPTToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);791		DoAddGPTToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);792793		DoAddGoldToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);794		DoAddGoldToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);795796		DoRemoveGPTFromThem(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);797		DoRemoveGPTFromUs(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);798799		DoRemoveGoldFromUs(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);800		DoRemoveGoldFromThem(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);801802		// Make sure we haven't removed everything from the deal!803		if(pCounterDeal->m_TradedItems.size() > 0)804		{805			int iValueIThinkImOffering, iValueIThinkImGetting;806			GetDealValue(pDeal, iValueIThinkImOffering, iValueIThinkImGetting, /*bUseEvenValue*/ false);807808			// We don't think we're getting enough for what's on our side of the table809			int iLowEndOfWhatIWillAccept = iValueIThinkImOffering - (iValueIThinkImOffering * -iPercentUnderWeWillOffer / 100);810			if(iValueIThinkImGetting < iLowEndOfWhatIWillAccept)811			{812				return false;813			}814815			int iValueTheyThinkTheyreOffering, iValueTheyThinkTheyreGetting;816			GET_PLAYER(eOtherPlayer).GetDealAI()->GetDealValue(pDeal, iValueTheyThinkTheyreOffering, iValueTheyThinkTheyreGetting, /*bUseEvenValue*/ false);817818			// They don't think they're getting enough for what's on their side of the table819			int iLowEndOfWhatTheyWillAccept = iValueTheyThinkTheyreOffering - (iValueTheyThinkTheyreOffering * GET_PLAYER(eOtherPlayer).GetDealAI()->GetDealPercentLeewayWithAI() / 100);820			if(iValueTheyThinkTheyreGetting < iLowEndOfWhatTheyWillAccept)821			{822				return false;823			}824825			bMakeOffer = true;826		}827	}828829	return bMakeOffer;830}

Calls

Called by