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}