Bazaar developer reference

CvDealAI::DoAcceptedDeal(PlayerTypes, const CvDeal &, int, int, int)

Defined in
CvDealAI.cpp, line 209
Class
CvDealAI
Hook name
CivHooks::CvDealAI_DoAcceptedDeal

Hooks

static bool BeforeCvDealAI_DoAcceptedDeal(CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);static void AfterCvDealAI_DoAcceptedDeal(CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);static void ReplaceCvDealAI_DoAcceptedDeal(void (*original)(CvDealAI*, PlayerTypes, const CvDeal&, int, int, int), CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);CivRegisterBefore<CivHooks::CvDealAI_DoAcceptedDeal>(host, &BeforeCvDealAI_DoAcceptedDeal);CivRegisterAfter<CivHooks::CvDealAI_DoAcceptedDeal>(host, &AfterCvDealAI_DoAcceptedDeal);CivRegisterReplace<CivHooks::CvDealAI_DoAcceptedDeal>(host, &ReplaceCvDealAI_DoAcceptedDeal);

Code

208/// Deal has been accepted209void CvDealAI::DoAcceptedDeal(PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering)210{211	int iDealType = -1;212	if(m_pPlayer->GetDiplomacyAI()->GetDealToRenew(&iDealType))213	{214		if (iDealType != 0) // if it's not a historic deal215		{216			// make the deal not remove resources when processed217			CvGameDeals::PrepareRenewDeal(m_pPlayer->GetDiplomacyAI()->GetDealToRenew(), &kDeal);218		}219		m_pPlayer->GetDiplomacyAI()->ClearDealToRenew();220	}221222#if defined(MOD_AI_MP_DIPLOMACY)223	if (MOD_AI_MP_DIPLOMACY) {224		GC.getGame().GetGameDeals()->FinalizeDeal(kDeal, true);225	} else {226#endif227	GC.getGame().GetGameDeals()->AddProposedDeal(kDeal);228	GC.getGame().GetGameDeals()->FinalizeDeal(eFromPlayer, GetPlayer()->GetID(), true);229#if defined(MOD_AI_MP_DIPLOMACY)230	}231#endif232233	if(GET_PLAYER(eFromPlayer).isHuman())234	{235		iDealValueToMe -= GetCachedValueOfPeaceWithHuman();236237		// Reset cached values238		SetCachedValueOfPeaceWithHuman(0);239240		LeaderheadAnimationTypes eAnimation;241		// This signals Lua to do some interface cleanup, we only want to do this on the local machine.242		if(GC.getGame().getActivePlayer() == eFromPlayer)243			gDLL->DoClearDiplomacyTradeTable();244245		DiploUIStateTypes eUIState = NO_DIPLO_UI_STATE;246247		const char* szText = 0;248249		// We made a demand and they gave in250		if(kDeal.GetDemandingPlayer() == GetPlayer()->GetID())251		{252			if(GC.getGame().getActivePlayer() == eFromPlayer)253			{254#if defined(MOD_DIPLOMACY_STFU)255				GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION_MEAN_AI, DIPLO_MESSAGE_TRADE_ACCEPT_AI_DEMAND, LEADERHEAD_ANIM_POSITIVE);256#else257				szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_AI_DEMAND);258				gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION_MEAN_AI, szText, LEADERHEAD_ANIM_POSITIVE);259#endif260			}261262			return;263		}264265		// We made a request and they agreed266		if(kDeal.GetRequestingPlayer() == GetPlayer()->GetID())267		{268			if(GC.getGame().getActivePlayer() == eFromPlayer)269			{270#if defined(MOD_DIPLOMACY_STFU)271				GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION, DIPLO_MESSAGE_THANKFUL, LEADERHEAD_ANIM_POSITIVE);272#else273				szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_THANKFUL);274				gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION, szText, LEADERHEAD_ANIM_POSITIVE);275#endif276			}277			GetPlayer()->GetDiplomacyAI()->ChangeRecentAssistValue(eFromPlayer, -iDealValueToMe);278			return;279		}280281		eUIState = DIPLO_UI_STATE_BLANK_DISCUSSION;282#if defined(MOD_DIPLOMACY_STFU)283		DiploMessageTypes eDiploMessage;284#endif285286		// Good deal for us287		if(iDealValueToMe >= 100 ||288		        iValueTheyreOffering > (iValueImOffering * 5))	// A deal can be generous if we're getting a lot overall, OR a lot more than we're giving up289		{290#if defined(MOD_DIPLOMACY_STFU)291			eDiploMessage = DIPLO_MESSAGE_TRADE_ACCEPT_GENEROUS;292#endif293			szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_GENEROUS);294			eAnimation = LEADERHEAD_ANIM_YES;295			GetPlayer()->GetDiplomacyAI()->ChangeRecentTradeValue(eFromPlayer, iDealValueToMe);296		}297		// Acceptable deal for us298		else299		{300#if defined(MOD_DIPLOMACY_STFU)301			eDiploMessage = DIPLO_MESSAGE_TRADE_ACCEPT_ACCEPTABLE;302#endif303			szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_ACCEPTABLE);304			eAnimation = LEADERHEAD_ANIM_YES;305			GetPlayer()->GetDiplomacyAI()->ChangeRecentTradeValue(eFromPlayer, (iDealValueToMe / 2));306		}307308		if(GC.getGame().getActivePlayer() == eFromPlayer)309			GC.GetEngineUserInterface()->SetOfferTradeRepeatCount(0);310311		// If this was a peace deal then use that animation instead312		if(kDeal.GetPeaceTreatyType() != NO_PEACE_TREATY_TYPE)313		{314			eAnimation = LEADERHEAD_ANIM_PEACEFUL;315		}316317		// Send message back to diplo UI318		if(GC.getGame().getActivePlayer() == eFromPlayer)319#if defined(MOD_DIPLOMACY_STFU)320			GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), eUIState, eDiploMessage, eAnimation);321#else322			gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), eUIState, szText, eAnimation);323#endif324	}325326	if(GC.getGame().getActivePlayer() == eFromPlayer || GC.getGame().getActivePlayer() == GetPlayer()->GetID())327	{328		GC.GetEngineUserInterface()->makeInterfaceDirty();329	}330}

Calls

Called by