Hooks
static bool BeforeCvDealAI_DoAcceptedDeal(CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);static void AfterCvDealAI_DoAcceptedDeal(CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);static void ReplaceCvDealAI_DoAcceptedDeal(void (*original)(CvDealAI*, PlayerTypes, const CvDeal&, int, int, int), CvDealAI* self, PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering);CivRegisterBefore<CivHooks::CvDealAI_DoAcceptedDeal>(host, &BeforeCvDealAI_DoAcceptedDeal);CivRegisterAfter<CivHooks::CvDealAI_DoAcceptedDeal>(host, &AfterCvDealAI_DoAcceptedDeal);CivRegisterReplace<CivHooks::CvDealAI_DoAcceptedDeal>(host, &ReplaceCvDealAI_DoAcceptedDeal);
Code
208/// Deal has been accepted209void CvDealAI::DoAcceptedDeal(PlayerTypes eFromPlayer, const CvDeal& kDeal, int iDealValueToMe, int iValueImOffering, int iValueTheyreOffering)210{211 int iDealType = -1;212 if(m_pPlayer->GetDiplomacyAI()->GetDealToRenew(&iDealType))213 {214 if (iDealType != 0) // if it's not a historic deal215 {216 // make the deal not remove resources when processed217 CvGameDeals::PrepareRenewDeal(m_pPlayer->GetDiplomacyAI()->GetDealToRenew(), &kDeal);218 }219 m_pPlayer->GetDiplomacyAI()->ClearDealToRenew();220 }221222#if defined(MOD_AI_MP_DIPLOMACY)223 if (MOD_AI_MP_DIPLOMACY) {224 GC.getGame().GetGameDeals()->FinalizeDeal(kDeal, true);225 } else {226#endif227 GC.getGame().GetGameDeals()->AddProposedDeal(kDeal);228 GC.getGame().GetGameDeals()->FinalizeDeal(eFromPlayer, GetPlayer()->GetID(), true);229#if defined(MOD_AI_MP_DIPLOMACY)230 }231#endif232233 if(GET_PLAYER(eFromPlayer).isHuman())234 {235 iDealValueToMe -= GetCachedValueOfPeaceWithHuman();236237 // Reset cached values238 SetCachedValueOfPeaceWithHuman(0);239240 LeaderheadAnimationTypes eAnimation;241 // This signals Lua to do some interface cleanup, we only want to do this on the local machine.242 if(GC.getGame().getActivePlayer() == eFromPlayer)243 gDLL->DoClearDiplomacyTradeTable();244245 DiploUIStateTypes eUIState = NO_DIPLO_UI_STATE;246247 const char* szText = 0;248249 // We made a demand and they gave in250 if(kDeal.GetDemandingPlayer() == GetPlayer()->GetID())251 {252 if(GC.getGame().getActivePlayer() == eFromPlayer)253 {254#if defined(MOD_DIPLOMACY_STFU)255 GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION_MEAN_AI, DIPLO_MESSAGE_TRADE_ACCEPT_AI_DEMAND, LEADERHEAD_ANIM_POSITIVE);256#else257 szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_AI_DEMAND);258 gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION_MEAN_AI, szText, LEADERHEAD_ANIM_POSITIVE);259#endif260 }261262 return;263 }264265 // We made a request and they agreed266 if(kDeal.GetRequestingPlayer() == GetPlayer()->GetID())267 {268 if(GC.getGame().getActivePlayer() == eFromPlayer)269 {270#if defined(MOD_DIPLOMACY_STFU)271 GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION, DIPLO_MESSAGE_THANKFUL, LEADERHEAD_ANIM_POSITIVE);272#else273 szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_THANKFUL);274 gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), DIPLO_UI_STATE_BLANK_DISCUSSION, szText, LEADERHEAD_ANIM_POSITIVE);275#endif276 }277 GetPlayer()->GetDiplomacyAI()->ChangeRecentAssistValue(eFromPlayer, -iDealValueToMe);278 return;279 }280281 eUIState = DIPLO_UI_STATE_BLANK_DISCUSSION;282#if defined(MOD_DIPLOMACY_STFU)283 DiploMessageTypes eDiploMessage;284#endif285286 // Good deal for us287 if(iDealValueToMe >= 100 ||288 iValueTheyreOffering > (iValueImOffering * 5)) // A deal can be generous if we're getting a lot overall, OR a lot more than we're giving up289 {290#if defined(MOD_DIPLOMACY_STFU)291 eDiploMessage = DIPLO_MESSAGE_TRADE_ACCEPT_GENEROUS;292#endif293 szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_GENEROUS);294 eAnimation = LEADERHEAD_ANIM_YES;295 GetPlayer()->GetDiplomacyAI()->ChangeRecentTradeValue(eFromPlayer, iDealValueToMe);296 }297 // Acceptable deal for us298 else299 {300#if defined(MOD_DIPLOMACY_STFU)301 eDiploMessage = DIPLO_MESSAGE_TRADE_ACCEPT_ACCEPTABLE;302#endif303 szText = GetPlayer()->GetDiplomacyAI()->GetDiploStringForMessage(DIPLO_MESSAGE_TRADE_ACCEPT_ACCEPTABLE);304 eAnimation = LEADERHEAD_ANIM_YES;305 GetPlayer()->GetDiplomacyAI()->ChangeRecentTradeValue(eFromPlayer, (iDealValueToMe / 2));306 }307308 if(GC.getGame().getActivePlayer() == eFromPlayer)309 GC.GetEngineUserInterface()->SetOfferTradeRepeatCount(0);310311 // If this was a peace deal then use that animation instead312 if(kDeal.GetPeaceTreatyType() != NO_PEACE_TREATY_TYPE)313 {314 eAnimation = LEADERHEAD_ANIM_PEACEFUL;315 }316317 // Send message back to diplo UI318 if(GC.getGame().getActivePlayer() == eFromPlayer)319#if defined(MOD_DIPLOMACY_STFU)320 GET_PLAYER(eFromPlayer).GetDiplomacyAI()->DisplayAILeaderMessage(GetPlayer()->GetID(), eUIState, eDiploMessage, eAnimation);321#else322 gDLL->GameplayDiplomacyAILeaderMessage(GetPlayer()->GetID(), eUIState, szText, eAnimation);323#endif324 }325326 if(GC.getGame().getActivePlayer() == eFromPlayer || GC.getGame().getActivePlayer() == GetPlayer()->GetID())327 {328 GC.GetEngineUserInterface()->makeInterfaceDirty();329 }330}