Bazaar developer reference

CvDealAI::IsDealWithHumanAcceptable(CvDeal *, PlayerTypes, int &, int &, int &, int &, int &, bool &)

Defined in
CvDealAI.cpp, line 561
Class
CvDealAI
Hook name
CivHooks::CvDealAI_IsDealWithHumanAcceptable

Hooks

static bool BeforeCvDealAI_IsDealWithHumanAcceptable(CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer, int& iTotalValueToMe, int& iValueImOffering, int& iValueTheyreOffering, int& iAmountOverWeWillRequest, int& iAmountUnderWeWillOffer, bool& bCantMatchOffer, bool& result);static void AfterCvDealAI_IsDealWithHumanAcceptable(CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer, int& iTotalValueToMe, int& iValueImOffering, int& iValueTheyreOffering, int& iAmountOverWeWillRequest, int& iAmountUnderWeWillOffer, bool& bCantMatchOffer, bool& result);static bool ReplaceCvDealAI_IsDealWithHumanAcceptable(bool (*original)(CvDealAI*, CvDeal*, PlayerTypes, int&, int&, int&, int&, int&, bool&), CvDealAI* self, CvDeal* pDeal, PlayerTypes eOtherPlayer, int& iTotalValueToMe, int& iValueImOffering, int& iValueTheyreOffering, int& iAmountOverWeWillRequest, int& iAmountUnderWeWillOffer, bool& bCantMatchOffer);CivRegisterBefore<CivHooks::CvDealAI_IsDealWithHumanAcceptable>(host, &BeforeCvDealAI_IsDealWithHumanAcceptable);CivRegisterAfter<CivHooks::CvDealAI_IsDealWithHumanAcceptable>(host, &AfterCvDealAI_IsDealWithHumanAcceptable);CivRegisterReplace<CivHooks::CvDealAI_IsDealWithHumanAcceptable>(host, &ReplaceCvDealAI_IsDealWithHumanAcceptable);

Code

560/// Will this AI accept pDeal? Handles deal from both human and AI players561bool CvDealAI::IsDealWithHumanAcceptable(CvDeal* pDeal, PlayerTypes eOtherPlayer, int& iTotalValueToMe, int& iValueImOffering, int& iValueTheyreOffering, int& iAmountOverWeWillRequest, int& iAmountUnderWeWillOffer, bool& bCantMatchOffer)562{563	CvAssertMsg(GET_PLAYER(eOtherPlayer).isHuman(), "DEAL_AI: Trying to see if AI will accept a deal with human player... but it's not human.  Please show Jon.");564565	int iPercentOverWeWillRequest;566	int iPercentUnderWeWillOffer;567568	bCantMatchOffer = false;569570	// Deal leeway with human571	iPercentOverWeWillRequest = GetDealPercentLeewayWithHuman();572	iPercentUnderWeWillOffer = 0;573574	// Now do the valuation575	iTotalValueToMe = GetDealValue(pDeal, iValueImOffering, iValueTheyreOffering, /*bUseEvenValue*/ false);576577	// If no Gold in deal and within value of 1 GPT, then it's close enough578	if (pDeal->GetGoldTrade(eOtherPlayer) == 0 && pDeal->GetGoldTrade(m_pPlayer->GetID()) == 0)579	{580		int iOneGPT = 25;581		int iDiff = abs(iValueTheyreOffering - iValueImOffering);582		if (iDiff < iOneGPT)583		{584			return true;585		}586	}587588	int iDealSumValue = iValueImOffering + iValueTheyreOffering;589590	iAmountOverWeWillRequest = iDealSumValue;591	iAmountOverWeWillRequest *= iPercentOverWeWillRequest;592	iAmountOverWeWillRequest /= 100;593594	iAmountUnderWeWillOffer = iDealSumValue;595	iAmountUnderWeWillOffer *= iPercentUnderWeWillOffer;596	iAmountUnderWeWillOffer /= 100;597598	// We're surrendering599	if(pDeal->GetSurrenderingPlayer() == GetPlayer()->GetID())600	{601		if (iTotalValueToMe >= GetCachedValueOfPeaceWithHuman())602		{603			return true;604		}605	}606607	// Peace deal where we're not surrendering, value must equal cached value608	else if (pDeal->IsPeaceTreatyTrade(eOtherPlayer))609	{610		if (iTotalValueToMe >= GetCachedValueOfPeaceWithHuman())611		{612			return true;613		}614	}615616	// If we've gotten the deal to a point where we're happy, offer it up617	else if(iTotalValueToMe <= iAmountOverWeWillRequest && iTotalValueToMe >= iAmountUnderWeWillOffer)618	{619		return true;620	}621	else if (iTotalValueToMe > iAmountOverWeWillRequest)622	{623		bCantMatchOffer = true;624	}625626	return false;627}

Calls

Called by