Bazaar developer reference

CvDiplomacyAI::IsLuxuryRequest(PlayerTypes, CvDeal *, int &)

Defined in
CvDiplomacyAI.cpp, line 4904
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_IsLuxuryRequest

Hooks

static bool BeforeCvDiplomacyAI_IsLuxuryRequest(CvDiplomacyAI* self, PlayerTypes ePlayer, CvDeal* pDeal, int& iWeightBias, bool& result);static void AfterCvDiplomacyAI_IsLuxuryRequest(CvDiplomacyAI* self, PlayerTypes ePlayer, CvDeal* pDeal, int& iWeightBias, bool& result);static bool ReplaceCvDiplomacyAI_IsLuxuryRequest(bool (*original)(CvDiplomacyAI*, PlayerTypes, CvDeal*, int&), CvDiplomacyAI* self, PlayerTypes ePlayer, CvDeal* pDeal, int& iWeightBias);CivRegisterBefore<CivHooks::CvDiplomacyAI_IsLuxuryRequest>(host, &BeforeCvDiplomacyAI_IsLuxuryRequest);CivRegisterAfter<CivHooks::CvDiplomacyAI_IsLuxuryRequest>(host, &AfterCvDiplomacyAI_IsLuxuryRequest);CivRegisterReplace<CivHooks::CvDiplomacyAI_IsLuxuryRequest>(host, &ReplaceCvDiplomacyAI_IsLuxuryRequest);

Code

4903/// Does this AI want something?4904bool CvDiplomacyAI::IsLuxuryRequest(PlayerTypes ePlayer, CvDeal* pDeal, int& iWeightBias)4905{4906	iWeightBias = 0;49074908	ResourceTypes eLuxuryToAskFor = NO_RESOURCE;49094910	int iResourceLoop;49114912	// See if the other player has a Resource to trade4913	for(iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)4914	{4915		const ResourceTypes eResource = static_cast<ResourceTypes>(iResourceLoop);49164917		CvResourceInfo* pkResourceInfo = GC.getResourceInfo(eResource);4918		if(pkResourceInfo)4919		{4920			// Only look at Luxuries4921			if(pkResourceInfo->getResourceUsage() != RESOURCEUSAGE_LUXURY)4922				continue;49234924			// Any extras?4925			if(GET_PLAYER(ePlayer).getNumResourceAvailable(eResource, /*bIncludeImport*/ false) < 2)4926				continue;49274928			// Can they actually give us this item4929			if(!pDeal->IsPossibleToTradeItem(ePlayer, GetPlayer()->GetID(), TRADE_ITEM_RESOURCES, eResource, 1))4930				continue;49314932			eLuxuryToAskFor = eResource;4933			break;4934		}4935	}49364937	// Didn't find something they could give us?4938	if(eLuxuryToAskFor == NO_RESOURCE)4939		return false;49404941	// See if there's any Luxuries WE can trade (because if there are then we shouldn't be asking for hand outs)4942	for(iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)4943	{4944		const ResourceTypes eResource = static_cast<ResourceTypes>(iResourceLoop);49454946		CvResourceInfo* pkResource = GC.getResourceInfo(eResource);4947		if(pkResource)4948		{4949			// Only look at Luxuries4950			if(pkResource->getResourceUsage() != RESOURCEUSAGE_LUXURY)4951				continue;49524953			// Any extras?4954			if(GetPlayer()->getNumResourceAvailable(eResource, /*bIncludeImport*/ false) < 2)4955				continue;49564957			// Can they actually give us this item4958			if(!pDeal->IsPossibleToTradeItem(GetPlayer()->GetID(), ePlayer, TRADE_ITEM_RESOURCES, eResource, 1))4959				continue;49604961			// Found something we can trade to them, so abort4962			return false;4963		}4964	}49654966	// Add a little something extra since we're in dire straights4967	if(GetPlayer()->IsEmpireUnhappy())4968		iWeightBias += 25;49694970	// Now seed the deal4971	pDeal->AddResourceTrade(ePlayer, eLuxuryToAskFor, 1, GC.getGame().GetDealDuration());49724973	return true;4974}

Calls

Called by