Bazaar developer reference

CvDealAI::DoHumanOfferDealToThisAI(CvDeal *)

Defined in
CvDealAI.cpp, line 97
Class
CvDealAI
Hook name
CivHooks::CvDealAI_DoHumanOfferDealToThisAI

Hooks

static bool BeforeCvDealAI_DoHumanOfferDealToThisAI(CvDealAI* self, CvDeal* pDeal, DealOfferResponseTypes& result);static void AfterCvDealAI_DoHumanOfferDealToThisAI(CvDealAI* self, CvDeal* pDeal, DealOfferResponseTypes& result);static DealOfferResponseTypes ReplaceCvDealAI_DoHumanOfferDealToThisAI(DealOfferResponseTypes (*original)(CvDealAI*, CvDeal*), CvDealAI* self, CvDeal* pDeal);CivRegisterBefore<CivHooks::CvDealAI_DoHumanOfferDealToThisAI>(host, &BeforeCvDealAI_DoHumanOfferDealToThisAI);CivRegisterAfter<CivHooks::CvDealAI_DoHumanOfferDealToThisAI>(host, &AfterCvDealAI_DoHumanOfferDealToThisAI);CivRegisterReplace<CivHooks::CvDealAI_DoHumanOfferDealToThisAI>(host, &ReplaceCvDealAI_DoHumanOfferDealToThisAI);

Code

96/// Offer up a deal to this AI, and see if he accepts97DealOfferResponseTypes CvDealAI::DoHumanOfferDealToThisAI(CvDeal* pDeal)98{99	DealOfferResponseTypes eResponse = NO_DEAL_RESPONSE_TYPE;100	DiploUIStateTypes eUIState = NO_DIPLO_UI_STATE;101102	const char* szText = "";103	LeaderheadAnimationTypes eAnimation = NO_LEADERHEAD_ANIM;104#if defined(MOD_DIPLOMACY_STFU)105	DiploMessageTypes eDiploMessage = NO_DIPLO_MESSAGE_TYPE;106#endif107108	PlayerTypes eFromPlayer = GC.getGame().getActivePlayer();109110	bool bFromIsActivePlayer = eFromPlayer == GC.getGame().getActivePlayer();111112	int iDealValueToMe, iValueImOffering, iValueTheyreOffering, iAmountOverWeWillRequest, iAmountUnderWeWillOffer;113	bool bCantMatchOffer;114	bool bDealAcceptable = IsDealWithHumanAcceptable(pDeal, eFromPlayer, /*Passed by reference*/ iDealValueToMe, iValueImOffering, iValueTheyreOffering, iAmountOverWeWillRequest, iAmountUnderWeWillOffer, bCantMatchOffer);115116	// If they're actually giving us more than we're asking for (e.g. a gift) then accept the deal117	if(!bDealAcceptable)118	{119		if(!pDeal->IsPeaceTreatyTrade(eFromPlayer) && iValueTheyreOffering > iValueImOffering)120		{121			bDealAcceptable = true;122		}123	}124125	if(bDealAcceptable)126	{127		CvDeal kDeal = *pDeal;128129		// If it's from a human, send it through the network130		if(GET_PLAYER(eFromPlayer).isHuman())131		{132			GC.GetEngineUserInterface()->SetDealInTransit(true);133			auto_ptr<ICvDeal1> pDllDeal = GC.WrapDealPointer(&kDeal);134			gDLL->sendNetDealAccepted(eFromPlayer, GetPlayer()->GetID(), pDllDeal.get(), iDealValueToMe, iValueImOffering, iValueTheyreOffering);135		}136		// Deal between AI players, we can process it immediately137		else138		{139			DoAcceptedDeal(eFromPlayer, kDeal, iDealValueToMe, iValueImOffering, iValueTheyreOffering);140		}141	}142	// We want more from this Deal143	else if(iDealValueToMe > -75 &&144	        iValueImOffering < (iValueTheyreOffering * 5))	// The total value of the deal might not be that bad, but if he's asking for WAY more than he's offering (e.g. something for nothing) then it's not unacceptable, but insulting145	{146		eResponse = DEAL_RESPONSE_UNACCEPTABLE;147		eUIState = DIPLO_UI_STATE_TRADE_AI_REJECTS_OFFER;148149		if(bFromIsActivePlayer)150		{151#if defined(MOD_DIPLOMACY_STFU)152			eDiploMessage = DIPLO_MESSAGE_TRADE_REJECT_UNACCEPTABLE;153#endif154			szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_REJECT_UNACCEPTABLE);155			eAnimation = LEADERHEAD_ANIM_NO;156		}157	}158	// Pretty bad deal for us159	else160	{161		eResponse = DEAL_RESPONSE_INSULTING;162		eUIState = DIPLO_UI_STATE_TRADE_AI_REJECTS_OFFER;163164		if(bFromIsActivePlayer)165		{166#if defined(MOD_DIPLOMACY_STFU)167			eDiploMessage = DIPLO_MESSAGE_TRADE_REJECT_INSULTING;168#endif169			szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_REJECT_INSULTING);170			eAnimation = LEADERHEAD_ANIM_NO;171		}172	}173174	if(bFromIsActivePlayer)175	{176		// Modify response if the player's offered a deal lot177		if(eResponse >= DEAL_RESPONSE_UNACCEPTABLE)178		{179			int iTimesDealOffered = GC.GetEngineUserInterface()->GetOfferTradeRepeatCount();180181			if(iTimesDealOffered > 4)182			{183#if defined(MOD_DIPLOMACY_STFU)184				eDiploMessage = DIPLO_MESSAGE_REPEAT_TRADE_TOO_MUCH;185#endif186				szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_REPEAT_TRADE_TOO_MUCH);187			}188			else if(iTimesDealOffered > 1)189			{190#if defined(MOD_DIPLOMACY_STFU)191				eDiploMessage = DIPLO_MESSAGE_REPEAT_TRADE;192#endif193				szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_REPEAT_TRADE);194			}195196			GC.GetEngineUserInterface()->ChangeOfferTradeRepeatCount(1);197#if defined(MOD_DIPLOMACY_STFU)198			GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), eUIState, eDiploMessage, eAnimation);199#else200			gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), eUIState, szText, eAnimation);201#endif202		}203	}204205	return eResponse;206}

Calls

Called by