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}