Hooks
static bool BeforeCvMinorCivAI_DoLiberationByMajor(CvMinorCivAI* self, PlayerTypes eLiberator, TeamTypes eConquerorTeam);static void AfterCvMinorCivAI_DoLiberationByMajor(CvMinorCivAI* self, PlayerTypes eLiberator, TeamTypes eConquerorTeam);static void ReplaceCvMinorCivAI_DoLiberationByMajor(void (*original)(CvMinorCivAI*, PlayerTypes, TeamTypes), CvMinorCivAI* self, PlayerTypes eLiberator, TeamTypes eConquerorTeam);CivRegisterBefore<CivHooks::CvMinorCivAI_DoLiberationByMajor>(host, &BeforeCvMinorCivAI_DoLiberationByMajor);CivRegisterAfter<CivHooks::CvMinorCivAI_DoLiberationByMajor>(host, &AfterCvMinorCivAI_DoLiberationByMajor);CivRegisterReplace<CivHooks::CvMinorCivAI_DoLiberationByMajor>(host, &ReplaceCvMinorCivAI_DoLiberationByMajor);
Code
7300/// Major liberates a Minor by recapturing its City!7301void CvMinorCivAI::DoLiberationByMajor(PlayerTypes eLiberator, TeamTypes eConquerorTeam)7302{7303#if defined(MOD_BUGFIX_MINOR)7304 // This is a bug fix as the Lua API can be used to by-pass the bought-out tests and liberate the minor regardless73057306 // Clear the "bought out by" indicator7307 SetMajorBoughtOutBy(NO_PLAYER);7308#endif73097310 Localization::String strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LIBERATION");7311 strMessage << GetPlayer()->getNameKey() << GET_PLAYER(eLiberator).getNameKey();7312 Localization::String strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_MINOR_LIBERATION");7313 strSummary << GetPlayer()->getNameKey();73147315 int iHighestOtherMajorInfluence = GC.getMINOR_FRIENDSHIP_AT_WAR();73167317 PlayerTypes ePlayer;7318 for(int iI = 0; iI < MAX_MAJOR_CIVS; iI++)7319 {7320 ePlayer = (PlayerTypes) iI;73217322 if(ePlayer != eLiberator)7323 {7324 int iInfluence = GetBaseFriendshipWithMajor(ePlayer);7325 if(iInfluence > iHighestOtherMajorInfluence)7326 iHighestOtherMajorInfluence = iInfluence;73277328 if(GET_PLAYER(ePlayer).isAlive())7329 {7330 if(GET_TEAM(GET_PLAYER(ePlayer).getTeam()).isHasMet(GetPlayer()->getTeam()))7331 {7332 // Influence for other players - Were you the one that conquered us before?7333 if(GET_PLAYER(ePlayer).getTeam() == eConquerorTeam)7334 {7335 SetFriendshipWithMajor(ePlayer, GC.getMINOR_FRIENDSHIP_AT_WAR());7336 }73377338 // Notification for other players7339 CvNotifications* pNotifications = GET_PLAYER(ePlayer).GetNotifications();7340 if(pNotifications)7341 {7342 pNotifications->Add(NOTIFICATION_DIPLOMACY_DECLARATION, strMessage.toUTF8(), strSummary.toUTF8(), -1, -1, -1);7343 }7344 }7345 }7346 }7347 }73487349 // Influence for liberator - raise to ally status7350 int iNewInfluence = max(iHighestOtherMajorInfluence + GC.getMINOR_LIBERATION_FRIENDSHIP(), GetBaseFriendshipWithMajor(eLiberator) + GC.getMINOR_LIBERATION_FRIENDSHIP());7351 iNewInfluence = max(GetAlliesThreshold(), iNewInfluence); // Must be at least enough to make us allies73527353 SetFriendshipWithMajor(eLiberator, iNewInfluence);73547355 // Notification for liberator7356 strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LIBERATION_YOU");7357 strMessage << GetPlayer()->getNameKey();7358 strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_MINOR_LIBERATION");7359 strSummary << GetPlayer()->getNameKey();7360 AddNotification(strMessage.toUTF8(), strSummary.toUTF8(), eLiberator);7361}