Code
724/// Try to even out the value on both sides. If bFavorMe is true we'll bias things in our favor if necessary725bool CvDealAI::DoEqualizeDealWithAI(CvDeal* pDeal, PlayerTypes eOtherPlayer)726{727 PlayerTypes eMyPlayer = GetPlayer()->GetID();728 DEBUG_VARIABLE(eMyPlayer);729730 CvAssert(eOtherPlayer >= 0);731 CvAssert(eOtherPlayer < MAX_MAJOR_CIVS);732 CvAssertMsg(eMyPlayer != eOtherPlayer, "DEAL_AI: Trying to equalize AI deal, but both players are the same. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");733734 int iEvenValueImOffering;735 int iEvenValueTheyreOffering;736 int iTotalValue = GetDealValue(pDeal, iEvenValueImOffering, iEvenValueTheyreOffering, /*bUseEvenValue*/ true);737738 int iDealDuration = GC.getGame().GetDealDuration();739740 bool bMakeOffer = false;741742 /////////////////////////////743 // Outline the boundaries for an acceptable deal744 /////////////////////////////745746 int iPercentOverWeWillRequest = GetDealPercentLeewayWithAI();747 int iPercentUnderWeWillOffer = -GetDealPercentLeewayWithAI();748749 int iDealSumValue = iEvenValueImOffering + iEvenValueTheyreOffering;750751 int iAmountOverWeWillRequest = iDealSumValue;752 iAmountOverWeWillRequest *= iPercentOverWeWillRequest;753 iAmountOverWeWillRequest /= 100;754755 int iAmountUnderWeWillOffer = iDealSumValue;756 iAmountUnderWeWillOffer *= iPercentUnderWeWillOffer;757 iAmountUnderWeWillOffer /= 100;758759 // Deal is already even enough for us760 if(iTotalValue <= iAmountOverWeWillRequest && iTotalValue >= iAmountUnderWeWillOffer)761 {762 bMakeOffer = true;763 }764765 // If we set this pointer again it clears the data out!766 if(pDeal != GC.getGame().GetGameDeals()->GetTempDeal())767 {768 GC.getGame().GetGameDeals()->SetTempDeal(pDeal);769 }770771 CvDeal* pCounterDeal = GC.getGame().GetGameDeals()->GetTempDeal();772773 if(!bMakeOffer)774 {775 /////////////////////////////776 // See if there are items we can add or remove from either side to balance out the deal if it's not already even777 /////////////////////////////778779 bool bUseEvenValue = true;780781 DoAddVoteCommitmentToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, bUseEvenValue);782 DoAddVoteCommitmentToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, bUseEvenValue);783784 DoAddResourceToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, iDealDuration, bUseEvenValue);785 DoAddResourceToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, iDealDuration, bUseEvenValue);786787 DoAddOpenBordersToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ true, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountOverWeWillRequest, iDealDuration, bUseEvenValue);788 DoAddOpenBordersToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ true, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iAmountUnderWeWillOffer, iDealDuration, bUseEvenValue);789790 DoAddGPTToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);791 DoAddGPTToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);792793 DoAddGoldToThem(pCounterDeal, eOtherPlayer, /*bDontChangeTheirExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);794 DoAddGoldToUs(pCounterDeal, eOtherPlayer, /*bDontChangeMyExistingItems*/ false, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);795796 DoRemoveGPTFromThem(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);797 DoRemoveGPTFromUs(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, iDealDuration, bUseEvenValue);798799 DoRemoveGoldFromUs(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);800 DoRemoveGoldFromThem(pCounterDeal, eOtherPlayer, iTotalValue, iEvenValueImOffering, iEvenValueTheyreOffering, bUseEvenValue);801802 // Make sure we haven't removed everything from the deal!803 if(pCounterDeal->m_TradedItems.size() > 0)804 {805 int iValueIThinkImOffering, iValueIThinkImGetting;806 GetDealValue(pDeal, iValueIThinkImOffering, iValueIThinkImGetting, /*bUseEvenValue*/ false);807808 // We don't think we're getting enough for what's on our side of the table809 int iLowEndOfWhatIWillAccept = iValueIThinkImOffering - (iValueIThinkImOffering * -iPercentUnderWeWillOffer / 100);810 if(iValueIThinkImGetting < iLowEndOfWhatIWillAccept)811 {812 return false;813 }814815 int iValueTheyThinkTheyreOffering, iValueTheyThinkTheyreGetting;816 GET_PLAYER(eOtherPlayer).GetDealAI()->GetDealValue(pDeal, iValueTheyThinkTheyreOffering, iValueTheyThinkTheyreGetting, /*bUseEvenValue*/ false);817818 // They don't think they're getting enough for what's on their side of the table819 int iLowEndOfWhatTheyWillAccept = iValueTheyThinkTheyreOffering - (iValueTheyThinkTheyreOffering * GET_PLAYER(eOtherPlayer).GetDealAI()->GetDealPercentLeewayWithAI() / 100);820 if(iValueTheyThinkTheyreGetting < iLowEndOfWhatTheyWillAccept)821 {822 return false;823 }824825 bMakeOffer = true;826 }827 }828829 return bMakeOffer;830}