Bazaar developer reference

CvGameDeals::DoTurn()

Defined in
CvDealClasses.cpp, line 2842
Class
CvGameDeals
Hook name
CivHooks::CvGameDeals_DoTurn

Hooks

static bool BeforeCvGameDeals_DoTurn(CvGameDeals* self);static void AfterCvGameDeals_DoTurn(CvGameDeals* self);static void ReplaceCvGameDeals_DoTurn(void (*original)(CvGameDeals*), CvGameDeals* self);CivRegisterBefore<CivHooks::CvGameDeals_DoTurn>(host, &BeforeCvGameDeals_DoTurn);CivRegisterAfter<CivHooks::CvGameDeals_DoTurn>(host, &AfterCvGameDeals_DoTurn);CivRegisterReplace<CivHooks::CvGameDeals_DoTurn>(host, &ReplaceCvGameDeals_DoTurn);

Code

2841/// Update deals for the start of a new turn2842void CvGameDeals::DoTurn()2843{2844	DealList::iterator it;28452846	if(m_CurrentDeals.size() > 0)2847	{2848		PlayerTypes eFromPlayer = NO_PLAYER;2849		PlayerTypes eToPlayer = NO_PLAYER;28502851		bool bSomethingChanged = false;2852		//int iTemp;2853		//TradeableItems eTempItem;28542855		int iGameTurn = GC.getGame().getGameTurn();28562857		// Check to see if any of our TradeItems in any of our Deals expire this turn2858		for(it = m_CurrentDeals.begin(); it != m_CurrentDeals.end(); ++it)2859		{2860			TradedItemList::iterator itemIter;2861			for(itemIter = it->m_TradedItems.begin(); itemIter != it->m_TradedItems.end(); ++itemIter)2862			{2863				int iFinalTurn = itemIter->m_iFinalTurn;2864				CvAssertMsg(iFinalTurn >= -1, "DEAL: Trade item has a negative final turn.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");2865				CvAssertMsg(iFinalTurn < GC.getGame().getEstimateEndTurn() * 2, "DEAL: Trade item has a final turn way beyond the end of the game.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");2866				CvAssertMsg(itemIter->m_iDuration < GC.getGame().getEstimateEndTurn() * 2, "DEAL: Trade item has a crazy long duration (probably invalid).  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");2867				CvAssertMsg(itemIter->m_eFromPlayer == it->m_eFromPlayer || itemIter->m_eFromPlayer == it->m_eToPlayer, "DEAL: Processing turn for a deal that has an item for a player that's not actually in this deal!  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");28682869				if(iFinalTurn > -1 && iFinalTurn == iGameTurn)2870				{2871					//eTempItem = itemIter->m_eItemType;2872					//iTemp = iFinalTurn;28732874					bSomethingChanged = true;28752876					eFromPlayer = itemIter->m_eFromPlayer;2877					eToPlayer = it->GetOtherPlayer(eFromPlayer);28782879					DoEndTradedItem(&*itemIter, eToPlayer, false);2880				}2881			}2882		}28832884		// check to see if one of our deals in no longer valid2885		for(it = m_CurrentDeals.begin(); it != m_CurrentDeals.end(); ++it)2886		{2887			TradedItemList::iterator itemIter;2888			bool bInvalidDeal = false;2889			bool bUnbreakable = false;2890			for(itemIter = it->m_TradedItems.begin(); itemIter != it->m_TradedItems.end(); ++itemIter)2891			{2892				int iFinalTurn = itemIter->m_iFinalTurn;2893				if(iFinalTurn > -1 && iFinalTurn != iGameTurn)  // if this was the last turn the deal was ending anyways2894				{2895					eFromPlayer = itemIter->m_eFromPlayer;2896					// check to see if we are negative on resource or gold2897					bool bHaveEnoughGold = true;2898					bool bHaveEnoughResource = true;2899					//if (itemIter->m_eItemType == TRADE_ITEM_GOLD_PER_TURN)2900					//{2901					//	int iGoldPerTurn = itemIter->m_iData1;2902					//	bHaveEnoughGold = GET_PLAYER(eFromPlayer).GetTreasury()->GetGold() > iGoldPerTurn;2903					//}2904					// Resource2905					/*else */2906					if(itemIter->m_eItemType == TRADE_ITEM_RESOURCES)2907					{2908						ResourceTypes eResource = (ResourceTypes) itemIter->m_iData1;2909						//int iResourceQuantity = itemIter->m_iData2;2910						bHaveEnoughResource = GET_PLAYER(eFromPlayer).getNumResourceTotal(eResource) >= 0;2911					}2912					else if(itemIter->m_eItemType == TRADE_ITEM_PEACE_TREATY)2913					{2914						bUnbreakable = true;2915						break;2916					}29172918					if(!bHaveEnoughGold || !bHaveEnoughResource)2919					{2920						bInvalidDeal = true;2921					}2922				}2923			}29242925			if(!bUnbreakable && bInvalidDeal)2926			{2927				bSomethingChanged = true;2928				it->m_iFinalTurn = iGameTurn;2929				it->m_bDealCancelled = true;29302931				for(itemIter = it->m_TradedItems.begin(); itemIter != it->m_TradedItems.end(); ++itemIter)2932				{2933					// Cancel individual items2934					itemIter->m_iFinalTurn = GC.getGame().getGameTurn();29352936					eFromPlayer = itemIter->m_eFromPlayer;2937					eToPlayer = it->GetOtherPlayer(eFromPlayer);29382939					DoEndTradedItem(&*itemIter, eToPlayer, true);2940				}2941			}2942		}29432944		if(bSomethingChanged)2945		{2946			// Update UI if we were involved in the deal2947			PlayerTypes eActivePlayer = GC.getGame().getActivePlayer();2948			if(eFromPlayer == eActivePlayer || eToPlayer == eActivePlayer)2949			{2950				GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);2951			}2952		}29532954		DoUpdateCurrentDealsList();2955	}2956}

Calls