Hooks
static bool BeforeCvDealAI_DoAddGPTToThem(CvDealAI* self, CvDeal* pDeal, PlayerTypes eThem, bool bDontChangeTheirExistingItems, int& iTotalValue, int& iValueImOffering, int& iValueTheyreOffering, int iDealDuration, bool bUseEvenValue);static void AfterCvDealAI_DoAddGPTToThem(CvDealAI* self, CvDeal* pDeal, PlayerTypes eThem, bool bDontChangeTheirExistingItems, int& iTotalValue, int& iValueImOffering, int& iValueTheyreOffering, int iDealDuration, bool bUseEvenValue);static void ReplaceCvDealAI_DoAddGPTToThem(void (*original)(CvDealAI*, CvDeal*, PlayerTypes, bool, int&, int&, int&, int, bool), CvDealAI* self, CvDeal* pDeal, PlayerTypes eThem, bool bDontChangeTheirExistingItems, int& iTotalValue, int& iValueImOffering, int& iValueTheyreOffering, int iDealDuration, bool bUseEvenValue);CivRegisterBefore<CivHooks::CvDealAI_DoAddGPTToThem>(host, &BeforeCvDealAI_DoAddGPTToThem);CivRegisterAfter<CivHooks::CvDealAI_DoAddGPTToThem>(host, &AfterCvDealAI_DoAddGPTToThem);CivRegisterReplace<CivHooks::CvDealAI_DoAddGPTToThem>(host, &ReplaceCvDealAI_DoAddGPTToThem);
Code
3001/// See if adding Gold Per Turn to their side of the deal helps even out pDeal3002void CvDealAI::DoAddGPTToThem(CvDeal* pDeal, PlayerTypes eThem, bool bDontChangeTheirExistingItems, int& iTotalValue, int& iValueImOffering, int& iValueTheyreOffering, int iDealDuration, bool bUseEvenValue)3003{3004 CvAssert(eThem >= 0);3005 CvAssert(eThem < MAX_MAJOR_CIVS);3006 CvAssertMsg(eThem != GetPlayer()->GetID(), "DEAL_AI: Trying to add GPT to Them, but them is us. Please show Jon");30073008 if(!bDontChangeTheirExistingItems)3009 {3010 if(iTotalValue < 0)3011 {3012 if(GET_PLAYER(eThem).calculateGoldRate() > 0)3013 {3014 PlayerTypes eMyPlayer = GetPlayer()->GetID();30153016 // Can't already be GPT from the other player in the Deal3017 if(pDeal->GetGoldPerTurnTrade(eMyPlayer) == 0)3018 {3019 int iNumGPT = GetGPTforForValueExchange(-iTotalValue, /*bNumGPTFromValue*/ true, iDealDuration, /*bFromMe*/ false, eThem, bUseEvenValue, /*bRoundUp*/ false);3020 int iNumGPTAlreadyInTrade = pDeal->GetGoldPerTurnTrade(eThem);3021 iNumGPT += iNumGPTAlreadyInTrade;3022 iNumGPT = min(iNumGPT, GET_PLAYER(eThem).calculateGoldRate());30233024 if(iNumGPT != iNumGPTAlreadyInTrade && !pDeal->ChangeGoldPerTurnTrade(eThem, iNumGPT, iDealDuration))3025 {3026 pDeal->AddGoldPerTurnTrade(eThem, iNumGPT, iDealDuration);3027 }30283029 iTotalValue = GetDealValue(pDeal, iValueImOffering, iValueTheyreOffering, bUseEvenValue);3030 }3031 }3032 }3033 }3034}