Bazaar developer reference

CvDiplomacyAI::DoCounters()

Defined in
CvDiplomacyAI.cpp, line 2083
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoCounters

Hooks

static bool BeforeCvDiplomacyAI_DoCounters(CvDiplomacyAI* self);static void AfterCvDiplomacyAI_DoCounters(CvDiplomacyAI* self);static void ReplaceCvDiplomacyAI_DoCounters(void (*original)(CvDiplomacyAI*), CvDiplomacyAI* self);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoCounters>(host, &BeforeCvDiplomacyAI_DoCounters);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoCounters>(host, &AfterCvDiplomacyAI_DoCounters);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoCounters>(host, &ReplaceCvDiplomacyAI_DoCounters);

Code

2082/// Increment our turn counters2083void CvDiplomacyAI::DoCounters()2084{2085	int iItem;2086	DiploStatementTypes eStatement;2087	PublicDeclarationTypes eDeclaration;20882089	PlayerTypes eThirdPlayer;2090	int iThirdPlayerLoop;20912092	// Loop through all (known) Players2093	PlayerTypes eLoopPlayer;2094	for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)2095	{2096		eLoopPlayer = (PlayerTypes) iPlayerLoop;20972098		if(IsPlayerValid(eLoopPlayer))2099		{2100			// War Counter2101			if(GET_TEAM(GetTeam()).isAtWar(GET_PLAYER(eLoopPlayer).getTeam()))2102				ChangePlayerNumTurnsAtWar(eLoopPlayer, 1);2103			// Reset Counter if not at war2104			else if(GetPlayerNumTurnsAtWar(eLoopPlayer) > 0)2105				SetPlayerNumTurnsAtWar(eLoopPlayer, 0);21062107			///////////////////////////////2108			// Major Civs only!2109			///////////////////////////////2110			if(!GET_PLAYER(eLoopPlayer).isMinorCiv())2111			{2112				// Trade value counter2113				ChangeRecentTradeValue(eLoopPlayer, -GC.getDEAL_VALUE_PER_TURN_DECAY());2114				ChangeCommonFoeValue(eLoopPlayer, -GC.getCOMMON_FOE_VALUE_PER_TURN_DECAY());2115				if (GetRecentAssistValue(eLoopPlayer) > 0)2116				{2117					int iMin = MIN(GetRecentAssistValue(eLoopPlayer), GC.getDEAL_VALUE_PER_TURN_DECAY());2118					ChangeRecentAssistValue(eLoopPlayer, -iMin);2119				}2120				else if (GetRecentAssistValue(eLoopPlayer) < 0)2121				{2122					int iMin = MIN(-GetRecentAssistValue(eLoopPlayer), GC.getDEAL_VALUE_PER_TURN_DECAY());2123					ChangeRecentAssistValue(eLoopPlayer, iMin);2124				}2125				2126				int iBrokenPromisePreValue = GetBrokenExpansionPromiseValue(eLoopPlayer);2127				ChangeBrokenExpansionPromiseValue(eLoopPlayer, -GC.getEXPANSION_PROMISE_BROKEN_PER_TURN_DECAY());2128				int iIgnoredPromisePreValue = GetIgnoredExpansionPromiseValue(eLoopPlayer);2129				ChangeIgnoredExpansionPromiseValue(eLoopPlayer, -GC.getEXPANSION_PROMISE_IGNORED_PER_TURN_DECAY());21302131				// if the promise penalty of breaking a promise has expired, reset the ability to ask the promise again2132				if ((iBrokenPromisePreValue != 0 && GetBrokenExpansionPromiseValue(eLoopPlayer) == 0 && GetIgnoredExpansionPromiseValue(eLoopPlayer) == 0) || 2133					(iIgnoredPromisePreValue != 0 && GetIgnoredExpansionPromiseValue(eLoopPlayer) == 0 && GetBrokenExpansionPromiseValue(eLoopPlayer) == 0))2134				{2135					SetPlayerMadeExpansionPromise(eLoopPlayer, false);2136					SetPlayerBrokenExpansionPromise(eLoopPlayer, false);2137					SetPlayerIgnoredExpansionPromise(eLoopPlayer, false);2138				}21392140				iBrokenPromisePreValue = GetBrokenBorderPromiseValue(eLoopPlayer);2141				ChangeBrokenBorderPromiseValue(eLoopPlayer, -GC.getBORDER_PROMISE_BROKEN_PER_TURN_DECAY());2142				iIgnoredPromisePreValue = GetIgnoredBorderPromiseValue(eLoopPlayer);2143				ChangeIgnoredBorderPromiseValue(eLoopPlayer, -GC.getBORDER_PROMISE_IGNORED_PER_TURN_DECAY());21442145				// if the promise penalty of breaking a promise has expired, reset the ability to ask the promise again2146				if ((iBrokenPromisePreValue != 0 && GetBrokenBorderPromiseValue(eLoopPlayer) == 0 && GetIgnoredBorderPromiseValue(eLoopPlayer) == 0) || 2147					(iIgnoredPromisePreValue != 0 && GetIgnoredBorderPromiseValue(eLoopPlayer) == 0 && GetBrokenBorderPromiseValue(eLoopPlayer) == 0))2148				{2149					SetPlayerMadeBorderPromise(eLoopPlayer, false);2150					SetPlayerBrokenBorderPromise(eLoopPlayer, false);2151					SetPlayerIgnoredBorderPromise(eLoopPlayer, false);2152				}21532154				ChangeDeclaredWarOnFriendValue(eLoopPlayer, -GC.getDECLARED_WAR_ON_FRIEND_PER_TURN_DECAY());21552156				// Diplo Statement Log Counter2157				for(iItem = 0; iItem < MAX_DIPLO_LOG_STATEMENTS; iItem++)2158				{2159					eStatement = GetDiploLogStatementTypeForIndex(eLoopPlayer, iItem);21602161					if(eStatement != NO_DIPLO_STATEMENT_TYPE)2162						ChangeDiploLogStatementTurnForIndex(eLoopPlayer, iItem, 1);2163					else2164						SetDiploLogStatementTurnForIndex(eLoopPlayer, iItem, 0);2165				}21662167				// Attacked Protected Minor Counter2168				if(GetOtherPlayerProtectedMinorAttacked(eLoopPlayer) != NO_PLAYER)2169					ChangeOtherPlayerTurnsSinceAttackedProtectedMinor(eLoopPlayer, 1);21702171				// Killed Protected Minor Counter2172				if(GetOtherPlayerProtectedMinorKilled(eLoopPlayer) != NO_PLAYER)2173					ChangeOtherPlayerTurnsSinceKilledProtectedMinor(eLoopPlayer, 1);21742175				// They sided with their Protected Minor Counter2176				if(IsOtherPlayerSidedWithProtectedMinor(eLoopPlayer))2177					ChangeOtherPlayerTurnsSinceSidedWithProtectedMinor(eLoopPlayer, 1);21782179				// Did this player ask us not to settle near them?2180				if(GetPlayerNoSettleRequestCounter(eLoopPlayer) > -1)2181				{2182					ChangePlayerNoSettleRequestCounter(eLoopPlayer, 1);21832184					if(GetPlayerNoSettleRequestCounter(eLoopPlayer) >= /*50*/ GC.getIC_MEMORY_TURN_EXPIRATION())2185					{2186						SetPlayerNoSettleRequestAccepted(eLoopPlayer, false);2187						SetPlayerNoSettleRequestCounter(eLoopPlayer, -666);2188					}2189				}21902191				// Did this player ask us to stop spying on them?2192				if(GetPlayerStopSpyingRequestCounter(eLoopPlayer) > -1)2193				{2194					ChangePlayerStopSpyingRequestCounter(eLoopPlayer, 1);21952196					if(GetPlayerStopSpyingRequestCounter(eLoopPlayer) >= /*50*/ GC.getSTOP_SPYING_MEMORY_TURN_EXPIRATION())2197					{2198						SetPlayerStopSpyingRequestAccepted(eLoopPlayer, false);2199						SetPlayerStopSpyingRequestCounter(eLoopPlayer, -666);2200					}2201				}22022203				// World Congress mood counters2204				if (GetTurnsSinceWeLikedTheirProposal(eLoopPlayer) > -1)2205				{2206					ChangeTurnsSinceWeLikedTheirProposal(eLoopPlayer, 1);2207				}2208				if (GetTurnsSinceWeDislikedTheirProposal(eLoopPlayer) > -1)2209				{2210					ChangeTurnsSinceWeDislikedTheirProposal(eLoopPlayer, 1);2211				}2212				if (GetTurnsSinceTheySupportedOurProposal(eLoopPlayer) > -1)2213				{2214					ChangeTurnsSinceTheySupportedOurProposal(eLoopPlayer, 1);2215				}2216				if (GetTurnsSinceTheyFoiledOurProposal(eLoopPlayer) > -1)2217				{2218					ChangeTurnsSinceTheyFoiledOurProposal(eLoopPlayer, 1);2219				}2220				if (GetTurnsSinceTheySupportedOurHosting(eLoopPlayer) > -1)2221				{2222					ChangeTurnsSinceTheySupportedOurHosting(eLoopPlayer, 1);2223				}22242225				// Did this player make a demand of us?2226				if(GetDemandCounter(eLoopPlayer) > -1)2227					ChangeDemandCounter(eLoopPlayer, 1);22282229				// DoF?2230				if(GetDoFCounter(eLoopPlayer) > -1)2231					ChangeDoFCounter(eLoopPlayer, 1);22322233				// Denounced?2234				if(GetDenouncedPlayerCounter(eLoopPlayer) > -1)2235					ChangeDenouncedPlayerCounter(eLoopPlayer, 1);22362237				// Are we ready to forget our denunciation?2238				if(IsDenouncedPlayer(eLoopPlayer) && GetDenouncedPlayerCounter(eLoopPlayer) >= GC.getGame().getGameSpeedInfo().getRelationshipDuration())2239				{2240					SetDenouncedPlayer(eLoopPlayer, false);2241					SetDenouncedPlayerCounter(eLoopPlayer, -1);2242					// Let's become open to becoming friends again2243					SetDoFCounter(eLoopPlayer, -1);22442245					// They no longer hate us either2246					GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->SetDoFCounter(GetPlayer()->GetID(), -1);2247					GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->SetFriendDenouncedUs(GetPlayer()->GetID(), false);22482249					for(iThirdPlayerLoop = 0; iThirdPlayerLoop < MAX_MAJOR_CIVS; iThirdPlayerLoop++){2250						eThirdPlayer = (PlayerTypes) iThirdPlayerLoop;22512252						// We may even do co-op wars in the future2253						if(GetCoopWarCounter(eLoopPlayer, eThirdPlayer) < -1)2254							SetCoopWarCounter(eLoopPlayer, eThirdPlayer, -1);2255						GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->SetCoopWarCounter(GetPlayer()->GetID(), eThirdPlayer, -1);2256					}22572258					//Notify the target of the denouncement that it has expired.2259					CvNotifications* pNotifications = GET_PLAYER(eLoopPlayer).GetNotifications();2260					if(pNotifications){2261						CvString							strSummary = GetLocalizedText("TXT_KEY_NOTIFICATION_THEIR_DENUNCIATION_EXPIRED_S");2262						Localization::String	strInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_THEIR_DENUNCIATION_EXPIRED");2263						Localization::String strTemp = strInfo;2264						strTemp << GET_PLAYER(GetPlayer()->GetID()).getCivilizationShortDescriptionKey();2265						pNotifications->Add(NOTIFICATION_DENUNCIATION_EXPIRED, strTemp.toUTF8(), strSummary, -1, -1, GetPlayer()->GetID(), eLoopPlayer);2266					}2267				}22682269				// Has our Friendship expired?2270				if(IsDoFAccepted(eLoopPlayer) && GetDoFCounter(eLoopPlayer) >= GC.getGame().getGameSpeedInfo().getRelationshipDuration())2271				{2272					SetDoFCounter(eLoopPlayer, -1);2273					SetDoFAccepted(eLoopPlayer, false);22742275					GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->SetDoFCounter(GetPlayer()->GetID(), -1);2276					GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->SetDoFAccepted(GetPlayer()->GetID(), false);22772278					//Notify both parties that our friendship has expired.2279					CvNotifications* pNotifications = GET_PLAYER(eLoopPlayer).GetNotifications();2280					if (pNotifications){2281						CvString strBuffer = GetLocalizedText("TXT_KEY_NOTIFICATION_FRIENDSHIP_EXPIRED", GET_PLAYER(GetPlayer()->GetID()).getCivilizationShortDescriptionKey());2282						CvString strSummary = GetLocalizedText("TXT_KEY_NOTIFICATION_FRIENDSHIP_EXPIRED_S");2283						pNotifications->Add(NOTIFICATION_FRIENDSHIP_EXPIRED, strBuffer, strSummary, -1, -1, GetPlayer()->GetID(), eLoopPlayer);				2284					}22852286					pNotifications = GET_PLAYER(GetPlayer()->GetID()).GetNotifications();2287					if (pNotifications){2288						CvString strBuffer = GetLocalizedText("TXT_KEY_NOTIFICATION_FRIENDSHIP_EXPIRED", GET_PLAYER(eLoopPlayer).getCivilizationShortDescriptionKey());2289						CvString strSummary = GetLocalizedText("TXT_KEY_NOTIFICATION_FRIENDSHIP_EXPIRED_S");2290						pNotifications->Add(NOTIFICATION_FRIENDSHIP_EXPIRED, strBuffer, strSummary, -1, -1, eLoopPlayer, GetPlayer()->GetID());				2291					}2292				}2293			}2294		}2295	}22962297	///////////////////////////////2298	// Declaration Log Counter2299	///////////////////////////////23002301	for(iItem = 0; iItem < MAX_DIPLO_LOG_STATEMENTS; iItem++)2302	{2303		eDeclaration = GetDeclarationLogTypeForIndex(iItem);23042305		if(eDeclaration != NO_PUBLIC_DECLARATION_TYPE)2306		{2307			ChangeDeclarationLogTurnForIndex(iItem, 1);2308		}2309		else2310		{2311			SetDeclarationLogTurnForIndex(iItem, 0);2312		}2313	}23142315}

Calls

Called by