Hooks
static bool BeforeCvDealAI_IsMakeOfferForResearchAgreement(CvDealAI* self, PlayerTypes eOtherPlayer, CvDeal* pDeal, bool& result);static void AfterCvDealAI_IsMakeOfferForResearchAgreement(CvDealAI* self, PlayerTypes eOtherPlayer, CvDeal* pDeal, bool& result);static bool ReplaceCvDealAI_IsMakeOfferForResearchAgreement(bool (*original)(CvDealAI*, PlayerTypes, CvDeal*), CvDealAI* self, PlayerTypes eOtherPlayer, CvDeal* pDeal);CivRegisterBefore<CivHooks::CvDealAI_IsMakeOfferForResearchAgreement>(host, &BeforeCvDealAI_IsMakeOfferForResearchAgreement);CivRegisterAfter<CivHooks::CvDealAI_IsMakeOfferForResearchAgreement>(host, &AfterCvDealAI_IsMakeOfferForResearchAgreement);CivRegisterReplace<CivHooks::CvDealAI_IsMakeOfferForResearchAgreement>(host, &ReplaceCvDealAI_IsMakeOfferForResearchAgreement);
Code
3916/// A good time to make an offer for a Research Agreement?3917bool CvDealAI::IsMakeOfferForResearchAgreement(PlayerTypes eOtherPlayer, CvDeal* pDeal)3918{3919 CvAssert(eOtherPlayer >= 0);3920 CvAssert(eOtherPlayer < MAX_MAJOR_CIVS);39213922 // Logic for when THIS AI wants to make a RA is in the Diplo AI39233924 // Can we actually complete this deal?3925 if(!pDeal->IsPossibleToTradeItem(eOtherPlayer, GetPlayer()->GetID(), TRADE_ITEM_RESEARCH_AGREEMENT))3926 {3927 return false;3928 }39293930 // Seed the deal with the item we want3931 pDeal->AddResearchAgreement(GetPlayer()->GetID(), GC.getGame().GetDealDuration());3932 pDeal->AddResearchAgreement(eOtherPlayer, GC.getGame().GetDealDuration());39333934 bool bDealAcceptable = false;39353936 // AI evaluation3937 if(!GET_PLAYER(eOtherPlayer).isHuman())3938 {3939 bDealAcceptable = DoEqualizeDealWithAI(pDeal, eOtherPlayer); // Change the deal as necessary to make it work3940 }3941 else3942 {3943 bool bUselessReferenceVariable;3944 bool bCantMatchOffer;3945 bDealAcceptable = DoEqualizeDealWithHuman(pDeal, eOtherPlayer, true, false, bUselessReferenceVariable, bCantMatchOffer); // Change the deal as necessary to make it work3946 }39473948 return bDealAcceptable;3949}