Bazaar developer reference

CvDiplomacyAI::DoRenewExpiredDeal(PlayerTypes, DiploStatementTypes &, CvDeal *)

Defined in
CvDiplomacyAI.cpp, line 14771
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoRenewExpiredDeal

Hooks

static bool BeforeCvDiplomacyAI_DoRenewExpiredDeal(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);static void AfterCvDiplomacyAI_DoRenewExpiredDeal(CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);static void ReplaceCvDiplomacyAI_DoRenewExpiredDeal(void (*original)(CvDiplomacyAI*, PlayerTypes, DiploStatementTypes&, CvDeal*), CvDiplomacyAI* self, PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoRenewExpiredDeal>(host, &BeforeCvDiplomacyAI_DoRenewExpiredDeal);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoRenewExpiredDeal>(host, &AfterCvDiplomacyAI_DoRenewExpiredDeal);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoRenewExpiredDeal>(host, &ReplaceCvDiplomacyAI_DoRenewExpiredDeal);

Code

14770// Possible Contact Statement - Renew Recently Expired Deal14771void CvDiplomacyAI::DoRenewExpiredDeal(PlayerTypes ePlayer, DiploStatementTypes& eStatement, CvDeal* pDeal)14772{14773	CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");14774	CvAssertMsg(ePlayer < MAX_MAJOR_CIVS, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");1477514776	if(eStatement == NO_DIPLO_STATEMENT_TYPE)14777	{14778		if (GetGlobalCoopWarAcceptedState(ePlayer) >= COOP_WAR_STATE_SOON)14779		{14780			return;14781		}1478214783		CvDeal* pTargetDeal = NULL;14784		CvGameDeals* pGameDeals = GC.getGame().GetGameDeals();1478514786		for(int iDealTypes = 0; iDealTypes < 2; iDealTypes++)14787		{14788			int iNumDeals = 0;14789			if(iDealTypes == 0)14790			{14791				iNumDeals = pGameDeals->GetNumHistoricDeals(ePlayer);14792			}14793			else14794			{14795				iNumDeals = pGameDeals->GetNumCurrentDeals(ePlayer);14796			}1479714798			for(int iDeal = 0; iDeal < iNumDeals; iDeal++)14799			{14800				CvDeal* pCurrentDeal = NULL;14801				if(iDealTypes == 0)14802				{14803					pCurrentDeal = pGameDeals->GetHistoricDeal(ePlayer, iDeal);14804				}14805				else14806				{14807					pCurrentDeal = pGameDeals->GetCurrentDeal(ePlayer, iDeal);14808				}1480914810				// if this deal has already been renewed or cancelled, then move along14811				if(pCurrentDeal->m_bConsideringForRenewal || pCurrentDeal->m_bDealCancelled || pCurrentDeal->m_bCheckedForRenewal)14812				{14813					continue;14814				}1481514816				// if they don't involve the player, bail14817				if(!(pCurrentDeal->m_eFromPlayer == m_pPlayer->GetID() || pCurrentDeal->m_eToPlayer == m_pPlayer->GetID()))14818				{14819					continue;14820				}1482114822				// if the deal can be renewed (no peace treaties, etc)14823				if(!pCurrentDeal->IsPotentiallyRenewable())14824				{14825					continue;14826				}1482714828				// Check to see if the deal is still active14829				if(pCurrentDeal->m_iFinalTurn > GC.getGame().getElapsedGameTurns())14830				{14831					continue;14832				}1483314834				bool bCanTradeItems = true;1483514836				// if the deal can be fully renewed14837				TradedItemList::iterator it;14838				CvDeal kTempDeal;14839				// only evaluate renewed deals if we're looking at current deals14840				if (iDealTypes == 1) 14841				{14842					pCurrentDeal->m_bConsideringForRenewal = true;14843				}14844				for(it = pCurrentDeal->m_TradedItems.begin(); it != pCurrentDeal->m_TradedItems.end(); ++it)14845				{14846					PlayerTypes eOtherPlayer;14847					if (it->m_eFromPlayer == pCurrentDeal->m_eFromPlayer)14848					{14849						eOtherPlayer = pCurrentDeal->m_eToPlayer;14850					}14851					else14852					{14853						eOtherPlayer = pCurrentDeal->m_eFromPlayer;14854					}1485514856					if(!kTempDeal.IsPossibleToTradeItem(it->m_eFromPlayer, eOtherPlayer, it->m_eItemType, it->m_iData1, it->m_iData2, it->m_iData3, it->m_bFlag1))14857					{14858						bCanTradeItems = false;14859						break;14860					}14861				}14862				if (iDealTypes == 1)14863				{14864					pCurrentDeal->m_bConsideringForRenewal = false;14865				}1486614867				if(!bCanTradeItems)14868				{14869					continue;14870				}1487114872				pTargetDeal = pCurrentDeal;14873				break;14874			}1487514876			if (pTargetDeal)14877			{14878				break;14879			}14880		}1488114882		if (pTargetDeal)14883		{14884			// copy the target deal into the new deal14885			*pDeal = *pTargetDeal;14886			pTargetDeal->m_bConsideringForRenewal = true;14887			pDeal->m_iFinalTurn = -1;1488814889			if(!GET_PLAYER(ePlayer).isHuman())14890			{14891				bool bAbleToEqualize = m_pPlayer->GetDealAI()->DoEqualizeDealWithAI(pDeal, ePlayer);14892				if(!bAbleToEqualize)14893				{14894					pDeal->ClearItems();14895					ClearDealToRenew();14896					return;14897				}14898			}1489914900#if defined(MOD_AI_MP_DIPLOMACY)14901			if (!MOD_AI_MP_DIPLOMACY)14902#endif14903			eStatement = DIPLO_STATEMENT_RENEW_DEAL;14904		}14905		else14906		{14907			pDeal->ClearItems();14908		}14909	}14910}

Calls

Called by