Bazaar developer reference

CvGameDeals::FinalizeDealValidAndAccepted(PlayerTypes, PlayerTypes, CvDeal &, bool, CvWeightedVector<TeamTypes, ((63)), true> &)

Defined in
CvDealClasses.cpp, line 2194
Class
CvGameDeals
Hook name
CivHooks::CvGameDeals_FinalizeDealValidAndAccepted

Hooks

static bool BeforeCvGameDeals_FinalizeDealValidAndAccepted(CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes arg1, CvDeal& kDeal, bool bAccepted, CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true>& veNowAtPeacePairs);static void AfterCvGameDeals_FinalizeDealValidAndAccepted(CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes arg1, CvDeal& kDeal, bool bAccepted, CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true>& veNowAtPeacePairs);static void ReplaceCvGameDeals_FinalizeDealValidAndAccepted(void (*original)(CvGameDeals*, PlayerTypes, PlayerTypes, CvDeal&, bool, CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true>&), CvGameDeals* self, PlayerTypes eFromPlayer, PlayerTypes arg1, CvDeal& kDeal, bool bAccepted, CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true>& veNowAtPeacePairs);CivRegisterBefore<CivHooks::CvGameDeals_FinalizeDealValidAndAccepted>(host, &BeforeCvGameDeals_FinalizeDealValidAndAccepted);CivRegisterAfter<CivHooks::CvGameDeals_FinalizeDealValidAndAccepted>(host, &AfterCvGameDeals_FinalizeDealValidAndAccepted);CivRegisterReplace<CivHooks::CvGameDeals_FinalizeDealValidAndAccepted>(host, &ReplaceCvGameDeals_FinalizeDealValidAndAccepted);

Code

2194void CvGameDeals::FinalizeDealValidAndAccepted(PlayerTypes eFromPlayer, PlayerTypes /* eToPlayer */, CvDeal& kDeal, bool bAccepted, CvWeightedVector<TeamTypes, MAX_CIV_TEAMS, true>& veNowAtPeacePairs)2195{2196	// Determine total duration of the Deal2197	int iLatestItemLastTurn = 0;2198	int iLongestDuration = 0;2199	//int iTemp;22002201	TradedItemList::iterator it;2202	for(it = kDeal.m_TradedItems.begin(); it != kDeal.m_TradedItems.end(); ++it)2203	{2204		CvAssertMsg(it->m_eFromPlayer == kDeal.m_eFromPlayer || it->m_eFromPlayer == kDeal.m_eToPlayer, "DEAL: Adding 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.");22052206		// Calculate duration2207		if(it->m_iDuration > 0)2208		{2209			it->m_iFinalTurn = it->m_iDuration + GC.getGame().getGameTurn();2210			if(it->m_iDuration > iLongestDuration)2211			{2212				iLongestDuration = it->m_iDuration;2213				iLatestItemLastTurn = it->m_iFinalTurn;2214			}2215		}2216	}22172218	kDeal.m_iDuration = iLongestDuration;2219	kDeal.m_iFinalTurn = iLatestItemLastTurn;2220	kDeal.m_iStartTurn = GC.getGame().getGameTurn();22212222	// Add to current deals2223	CvAssertMsg(kDeal.m_TradedItems.size() > 0, "New deal has no tradeable items!");2224	m_CurrentDeals.push_back(kDeal);2225	kDeal.m_iStartTurn = GC.getGame().getGameTurn();22262227	bool bSentResearchAgreementNotification = false;22282229	int iCost;22302231	// What effects does this Deal have right now?2232	PlayerTypes eAcceptedFromPlayer;2233	PlayerTypes eAcceptedToPlayer;2234	TeamTypes eFromTeam;2235	TeamTypes eToTeam;22362237	for(it = kDeal.m_TradedItems.begin(); it != kDeal.m_TradedItems.end(); ++it)2238	{2239		// if the deal is renewed do not start it up2240		if(it->m_bToRenewed)2241		{2242			if (MOD_AI_MP_DIPLOMACY) {2243				LogDealFailed(&kDeal, true, !bAccepted, false);2244			}2245			continue;2246		}22472248		eAcceptedFromPlayer = it->m_eFromPlayer;2249		eAcceptedToPlayer = kDeal.GetOtherPlayer(eAcceptedFromPlayer);2250		eFromTeam = GET_PLAYER(eAcceptedFromPlayer).getTeam();2251		eToTeam = GET_PLAYER(eAcceptedToPlayer).getTeam();22522253		CvAssertMsg(eAcceptedFromPlayer == kDeal.m_eFromPlayer || eAcceptedFromPlayer == kDeal.m_eToPlayer, "DEAL: Adding 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.");22542255		// Deduct Gold cost (if applicable)2256		iCost = GetTradeItemGoldCost(it->m_eItemType, eAcceptedFromPlayer, eAcceptedToPlayer);2257		GET_PLAYER(eAcceptedFromPlayer).GetTreasury()->ChangeGold(-iCost);22582259		// Gold2260		if(it->m_eItemType == TRADE_ITEM_GOLD)2261		{2262			int iGoldAmount = it->m_iData1;2263			GET_PLAYER(eAcceptedFromPlayer).GetTreasury()->ChangeGold(-iGoldAmount);2264			GET_PLAYER(eAcceptedToPlayer).GetTreasury()->ChangeGold(iGoldAmount);2265		}2266		// Gold Per Turn2267		else if(it->m_eItemType == TRADE_ITEM_GOLD_PER_TURN)2268		{2269			int iGoldPerTurn = it->m_iData1;2270			GET_PLAYER(eAcceptedFromPlayer).GetTreasury()->ChangeGoldPerTurnFromDiplomacy(-iGoldPerTurn);2271			GET_PLAYER(eAcceptedToPlayer).GetTreasury()->ChangeGoldPerTurnFromDiplomacy(iGoldPerTurn);2272		}2273		// Resource2274		else if(it->m_eItemType == TRADE_ITEM_RESOURCES)2275		{2276			ResourceTypes eResource = (ResourceTypes) it->m_iData1;2277			int iResourceQuantity = it->m_iData2;2278			GET_PLAYER(eAcceptedFromPlayer).changeResourceExport(eResource, iResourceQuantity);2279			GET_PLAYER(eAcceptedToPlayer).changeResourceImport(eResource, iResourceQuantity);22802281#if !defined(NO_ACHIEVEMENTS)2282			//Resource Trading Achievements2283			if(!GC.getGame().isGameMultiPlayer())2284			{2285				if(GET_PLAYER(eAcceptedFromPlayer).isHuman())2286				{2287					gDLL->IncrementSteamStatAndUnlock(ESTEAMSTAT_RESOURCESTRADED, 100, ACHIEVEMENT_100RESOURCES);22882289					if(GC.getResourceInfo(eResource)->getResourceUsage() == RESOURCEUSAGE_LUXURY)2290					{2291						//OutputDebugString("\nStep0");2292						if(((CvString)GET_PLAYER(eAcceptedFromPlayer).getLeaderTypeKey() == "LEADER_HARUN_AL_RASHID"))2293						{2294							//OutputDebugString("\nStep1");2295							int iJ;2296							for(iJ = 0; iJ < GC.getNumBuildingInfos(); iJ++)2297							{2298								CvBuildingEntry* pkBuildingEntry = GC.getBuildingInfo((BuildingTypes)iJ);2299								if(pkBuildingEntry)2300								{2301									if((CvString)pkBuildingEntry->GetType() == "BUILDING_BAZAAR")2302									{2303										//OutputDebugString("\nStep2");2304										if(GET_PLAYER(eAcceptedFromPlayer).getBuildingClassCount((BuildingClassTypes)pkBuildingEntry->GetBuildingClassType()) >= 1)2305										{2306											gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_TRADER);2307										}23082309									}2310								}2311							}2312						}2313					}2314				}2315			}2316#endif2317		}2318		// City2319		else if(it->m_eItemType == TRADE_ITEM_CITIES)2320		{2321			CvCity* pCity = GC.getMap().plot(it->m_iData1, it->m_iData2)->getPlotCity();2322			if(pCity != NULL)2323				GET_PLAYER(eAcceptedToPlayer).acquireCity(pCity, false, true);2324		}2325		else if(it->m_eItemType == TRADE_ITEM_ALLOW_EMBASSY)2326		{2327			GET_TEAM(eToTeam).SetHasEmbassyAtTeam(eFromTeam, true);2328		}2329		else if(it->m_eItemType == TRADE_ITEM_DECLARATION_OF_FRIENDSHIP)2330		{2331			// Declaration of friendship always goes both ways.  We will most likely have two entries in the deal for this2332			// but just in case, set both anyway.2333			GET_PLAYER(eAcceptedFromPlayer).GetDiplomacyAI()->SetDoFAccepted(eAcceptedToPlayer, true);2334			GET_PLAYER(eAcceptedFromPlayer).GetDiplomacyAI()->SetDoFCounter(eAcceptedToPlayer, 0);2335			GET_PLAYER(eAcceptedToPlayer).GetDiplomacyAI()->SetDoFAccepted(eAcceptedFromPlayer, true);2336			GET_PLAYER(eAcceptedToPlayer).GetDiplomacyAI()->SetDoFCounter(eAcceptedFromPlayer, 0);2337		}2338		// Vote Commitment2339		else if(it->m_eItemType == TRADE_ITEM_VOTE_COMMITMENT)2340		{2341			GET_PLAYER(eAcceptedFromPlayer).GetLeagueAI()->AddVoteCommitment(eAcceptedToPlayer, it->m_iData1, it->m_iData2, it->m_iData3, it->m_bFlag1);2342		}2343		// Open Borders2344		else if(it->m_eItemType == TRADE_ITEM_OPEN_BORDERS)2345		{2346			GET_TEAM(eFromTeam).SetAllowsOpenBordersToTeam(eToTeam, true);2347		}2348		// Defensive Pact2349		else if(it->m_eItemType == TRADE_ITEM_DEFENSIVE_PACT)2350		{2351			GET_TEAM(eFromTeam).SetHasDefensivePact(eToTeam, true);2352		}2353		// Research Agreement2354		else if(it->m_eItemType == TRADE_ITEM_RESEARCH_AGREEMENT)2355		{2356			GET_TEAM(eFromTeam).SetHasResearchAgreement(eToTeam, true);2357			GET_PLAYER(eAcceptedFromPlayer).GetTreasury()->LogExpenditure(GET_PLAYER(eAcceptedToPlayer).getCivilizationShortDescription(), iCost, 9);23582359			if(!bSentResearchAgreementNotification)2360			{2361				bSentResearchAgreementNotification = true;2362				GC.getGame().DoResearchAgreementNotification(eFromTeam, eToTeam);2363			}2364		}2365		// Trade Agreement2366		else if(it->m_eItemType == TRADE_ITEM_TRADE_AGREEMENT)2367		{2368			GET_TEAM(eFromTeam).SetHasTradeAgreement(eToTeam, true);2369		}2370		// Third Party Peace2371		else if(it->m_eItemType == TRADE_ITEM_THIRD_PARTY_PEACE)2372		{2373			TeamTypes eTargetTeam = (TeamTypes) it->m_iData1;2374			bool bTargetTeamIsMinor = GET_TEAM(eTargetTeam).isMinorCiv();2375#if defined(MOD_EVENTS_WAR_AND_PEACE)2376					GET_TEAM(eFromTeam).makePeace(eTargetTeam, /*bBumpUnits*/ true, /*bSuppressNotification*/ bTargetTeamIsMinor, eFromPlayer);2377#else2378					GET_TEAM(eFromTeam).makePeace(eTargetTeam, /*bBumpUnits*/ true, /*bSuppressNotification*/ bTargetTeamIsMinor);2379#endif2380			GET_TEAM(eFromTeam).setForcePeace(eTargetTeam, true);2381			GET_TEAM(eTargetTeam).setForcePeace(eFromTeam, true);23822383			if(bTargetTeamIsMinor)2384				veNowAtPeacePairs.push_back(eTargetTeam, eFromTeam); //eFromTeam is second so we can take advantage of CvWeightedVector's sort by weights2385		}2386		// Third Party War2387		else if(it->m_eItemType == TRADE_ITEM_THIRD_PARTY_WAR)2388		{2389			TeamTypes eTargetTeam = (TeamTypes) it->m_iData1;2390#if defined(MOD_EVENTS_WAR_AND_PEACE)2391					GET_TEAM(eFromTeam).declareWar(eTargetTeam, false, eFromPlayer);2392#else2393					GET_TEAM(eFromTeam).declareWar(eTargetTeam);2394#endif23952396			int iLockedTurns = /*15*/ GC.getCOOP_WAR_LOCKED_LENGTH();2397			GET_TEAM(eFromTeam).ChangeNumTurnsLockedIntoWar(eTargetTeam, iLockedTurns);2398		}2399		// **** Peace Treaty **** this should always be the last item processed!!!2400		else if(it->m_eItemType == TRADE_ITEM_PEACE_TREATY)2401		{2402#if defined(MOD_EVENTS_WAR_AND_PEACE)2403					GET_TEAM(eFromTeam).makePeace(eToTeam, true, false, eFromPlayer);2404#else2405					GET_TEAM(eFromTeam).makePeace(eToTeam);2406#endif2407			GET_TEAM(eFromTeam).setForcePeace(eToTeam, true);2408		}2409		//////////////////////////////////////////////////////////////////////2410		// **** DO NOT PUT ANYTHING AFTER THIS LINE ****2411		//////////////////////////////////////////////////////////////////////2412	}24132414	LogDealComplete(&kDeal);2415}

Calls

Called by