Hooks
static bool BeforeCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone(CvDiplomacyAI* self, PlayerTypes ePlayer, TeamTypes eOtherTeam);static void AfterCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone(CvDiplomacyAI* self, PlayerTypes ePlayer, TeamTypes eOtherTeam);static void ReplaceCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone(void (*original)(CvDiplomacyAI*, PlayerTypes, TeamTypes), CvDiplomacyAI* self, PlayerTypes ePlayer, TeamTypes eOtherTeam);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoPlayerDeclaredWarOnSomeone>(host, &BeforeCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoPlayerDeclaredWarOnSomeone>(host, &AfterCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoPlayerDeclaredWarOnSomeone>(host, &ReplaceCvDiplomacyAI_DoPlayerDeclaredWarOnSomeone);
Code
9675/// ePlayer declared war on someone, so figure out what that means9676void CvDiplomacyAI::DoPlayerDeclaredWarOnSomeone(PlayerTypes ePlayer, TeamTypes eOtherTeam)9677{9678 CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");9679 CvAssertMsg(ePlayer < MAX_CIV_PLAYERS, "DIPLOMACY_AI: Invalid Player Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");9680 CvAssertMsg(eOtherTeam >= 0, "DIPLOMACY_AI: Invalid Team Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");9681 CvAssertMsg(eOtherTeam <= MAX_CIV_TEAMS, "DIPLOMACY_AI: Invalid Team Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");96829683 // Disregard barbarians9684 if(GET_TEAM(eOtherTeam).isBarbarian())9685 return;96869687 CvAssertMsg(eOtherTeam < MAX_CIV_TEAMS, "DIPLOMACY_AI: Invalid Team Index. Please send Jon this with your last 5 autosaves and what changelist # you're playing.");96889689 int iThirdPartyLoop;9690 PlayerTypes eThirdParty;9691 PlayerTypes eThem;96929693 bool bWasFriends = false;96949695 PlayerTypes eAttackedPlayer;9696 for(int iAttackedPlayerLoop = 0; iAttackedPlayerLoop < MAX_CIV_PLAYERS; iAttackedPlayerLoop++)9697 {9698 eAttackedPlayer = (PlayerTypes) iAttackedPlayerLoop;96999700 if(GET_PLAYER(eAttackedPlayer).getTeam() == eOtherTeam)9701 {9702 bWasFriends = false;97039704 // We're involved SOMEHOW9705 if(ePlayer == GetPlayer()->GetID() || eAttackedPlayer == GetPlayer()->GetID())9706 {9707 eThem = GetPlayer()->GetID() != ePlayer ? ePlayer : eAttackedPlayer;97089709 ChangeNumWarsFought(eThem, 1);97109711 // Only stuff for major civs9712 if(!GET_PLAYER(eThem).isMinorCiv())9713 {9714 // WAS working with this player9715 if(IsDoFAccepted(eThem))9716 {9717 bWasFriends = true;97189719 SetDoFAccepted(eThem, false);9720 SetDoFCounter(eThem, -666);9721 }97229723 // HAD agreed to not settle nearby9724 if(IsPlayerNoSettleRequestAccepted(eThem))9725 {9726 SetPlayerNoSettleRequestAccepted(eThem, false);9727 SetPlayerNoSettleRequestCounter(eThem, -666);9728 }97299730 // HAD agreed not to spy on them9731 if(IsPlayerStopSpyingRequestAccepted(eThem))9732 {9733 SetPlayerStopSpyingRequestAccepted(eThem, false);9734 SetPlayerStopSpyingRequestCounter(eThem, -666);9735 }97369737 // Third party arrangements9738 for(iThirdPartyLoop = 0; iThirdPartyLoop < MAX_MAJOR_CIVS; iThirdPartyLoop++)9739 {9740 eThirdParty = (PlayerTypes) iThirdPartyLoop;97419742 // WAS working with the guy we're now at war with against someone else9743 //if (IsWorkingAgainstPlayerAccepted(eThem, eThirdParty))9744 //{9745 // SetWorkingAgainstPlayerAccepted(eThem, eThirdParty, false);9746 // SetWorkingAgainstPlayerCounter(eThem, eThirdParty, -666);9747 //}97489749 // WAS in or planning a coop war with the guy we're now at war with9750 if(GetCoopWarAcceptedState(eThem, eThirdParty) >= COOP_WAR_STATE_SOON)9751 {9752 SetCoopWarAcceptedState(eThem, eThirdParty, NO_COOP_WAR_STATE);9753 SetCoopWarCounter(eThem, eThirdParty, -666);9754 }9755 }9756 }97579758 // If WE were attacked, change our Approach to war so that it's not inappropriate next time the turn cycles9759 if(eAttackedPlayer == GetPlayer()->GetID())9760 {9761 // WAS friends with this player9762 if(bWasFriends)9763 {9764 SetFriendDeclaredWarOnUs(eThem, true);9765 ChangeDeclaredWarOnFriendValue(eThem, GC.getOPINION_WEIGHT_WAR_FRIEND_EACH() * GC.getGame().getGameSpeedInfo().getOpinionDurationPercent());9766 }97679768 if(!GET_PLAYER(ePlayer).isMinorCiv())9769 {9770 SetMajorCivApproach(ePlayer, MAJOR_CIV_APPROACH_WAR);9771 SetWarFaceWithPlayer(ePlayer, WAR_FACE_NEUTRAL);9772 }97739774 // Player broke a promise that he wasn't going to attack us9775 if(IsPlayerMadeMilitaryPromise(ePlayer))9776 SetPlayerBrokenMilitaryPromise(ePlayer, true);97779778 // Clear civilians returned so they don't affect relations any more9779 if(GetNumCiviliansReturnedToMe(ePlayer) > 0)9780 ChangeNumCiviliansReturnedToMe(ePlayer, -GetNumCiviliansReturnedToMe(ePlayer));9781 if(GetNumLandmarksBuiltForMe(ePlayer) > 0)9782 ChangeNumLandmarksBuiltForMe(ePlayer, -GetNumLandmarksBuiltForMe(ePlayer));97839784 // Clear positive diplomatic values9785 ChangeRecentTradeValue(ePlayer, -GetRecentTradeValue(ePlayer));9786 ChangeCommonFoeValue(ePlayer, -GetCommonFoeValue(ePlayer));9787 if (GetRecentAssistValue(ePlayer) < 0)9788 {9789 ChangeRecentAssistValue(ePlayer, -GetRecentAssistValue(ePlayer));9790 }97919792 // clear out their values9793 GET_PLAYER(ePlayer).GetDiplomacyAI()->SetDoFCounter(GetPlayer()->GetID(), -1);9794 GET_PLAYER(ePlayer).GetDiplomacyAI()->SetDoFAccepted(GetPlayer()->GetID(), false);9795 }9796 }97979798 // Did WE attack someone?9799 if(ePlayer == GetPlayer()->GetID())9800 {9801 }9802 // If it was someone else see what it means9803 else if(IsPlayerValid(eAttackedPlayer))9804 {9805 if(GET_PLAYER(eAttackedPlayer).isMinorCiv())9806 {9807 // Did they attack a Minor we're protecting?9808 if(GET_PLAYER(eAttackedPlayer).GetMinorCivAI()->IsProtectedByMajor(GetPlayer()->GetID()))9809 {9810 SetOtherPlayerTurnsSinceAttackedProtectedMinor(ePlayer, 0);9811 SetOtherPlayerProtectedMinorAttacked(ePlayer, eAttackedPlayer);9812 ChangeOtherPlayerNumProtectedMinorsAttacked(ePlayer, 1);9813 }9814 }9815 }9816 }9817 }9818}