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}