Hooks
static bool BeforeCvDiplomacyRequests_SendRequest(PlayerTypes eFromPlayer, PlayerTypes eToPlayer, DiploUIStateTypes eDiploType, DiploMessageTypes eDiploMessage, const char* pszMessage, LeaderheadAnimationTypes eAnimationType, int iExtraGameData);static void AfterCvDiplomacyRequests_SendRequest(PlayerTypes eFromPlayer, PlayerTypes eToPlayer, DiploUIStateTypes eDiploType, DiploMessageTypes eDiploMessage, const char* pszMessage, LeaderheadAnimationTypes eAnimationType, int iExtraGameData);static void ReplaceCvDiplomacyRequests_SendRequest(void (*original)(PlayerTypes, PlayerTypes, DiploUIStateTypes, DiploMessageTypes, const char*, LeaderheadAnimationTypes, int), PlayerTypes eFromPlayer, PlayerTypes eToPlayer, DiploUIStateTypes eDiploType, DiploMessageTypes eDiploMessage, const char* pszMessage, LeaderheadAnimationTypes eAnimationType, int iExtraGameData);CivRegisterBefore<CivHooks::CvDiplomacyRequests_SendRequest>(host, &BeforeCvDiplomacyRequests_SendRequest);CivRegisterAfter<CivHooks::CvDiplomacyRequests_SendRequest>(host, &AfterCvDiplomacyRequests_SendRequest);CivRegisterReplace<CivHooks::CvDiplomacyRequests_SendRequest>(host, &ReplaceCvDiplomacyRequests_SendRequest);
Code
400// Send a request from a player to another player.401// If the toPlayer is the active human player, it will be sent right away, else402// it will be queued.403// static404#if defined(MOD_API_PLAYER_LOGS)405void CvDiplomacyRequests::SendRequest(PlayerTypes eFromPlayer, PlayerTypes eToPlayer, DiploUIStateTypes eDiploType, DiploMessageTypes eDiploMessage, const char* pszMessage, LeaderheadAnimationTypes eAnimationType, int iExtraGameData /*= -1*/)406#else407void CvDiplomacyRequests::SendRequest(PlayerTypes eFromPlayer, PlayerTypes eToPlayer, DiploUIStateTypes eDiploType, const char* pszMessage, LeaderheadAnimationTypes eAnimationType, int iExtraGameData /*= -1*/)408#endif409{410#if defined(MOD_AI_MP_DIPLOMACY)411 if (MOD_AI_MP_DIPLOMACY && GC.getGame().isNetworkMultiPlayer() && eToPlayer != GC.getGame().getActivePlayer())412 {413 return;414 }415#endif416417 CvPlayer& kPlayer = GET_PLAYER(eToPlayer);418 CvDiplomacyRequests* pkDiploRequests = kPlayer.GetDiplomacyRequests();419 if(pkDiploRequests)420 {421#if defined(MOD_API_EXTENSIONS) && defined(MOD_DIPLOMACY_NO_LEADERHEADS)422 if (MOD_DIPLOMACY_NO_LEADERHEADS) {423 CvPreGame::pushGameType(GAME_NETWORK_MULTIPLAYER);424 }425#endif426427#if defined(MOD_AI_MP_DIPLOMACY)428 if (MOD_AI_MP_DIPLOMACY) {429 // JdH => add now handles everything, from direct sending to adding notifications...430 if (!(CvPreGame::isHuman(eFromPlayer) && CvPreGame::isHuman(eToPlayer)))431 {432 // dummy deal for AI to Human requests433 GC.getGame().GetGameDeals()->AddProposedDeal(CvDeal(eFromPlayer, eToPlayer));434 }435#if defined(MOD_API_PLAYER_LOGS)436 pkDiploRequests->Add(eFromPlayer, eDiploType, eDiploMessage, pszMessage, eAnimationType, iExtraGameData);437#else438 pkDiploRequests->Add(eFromPlayer, eDiploType, pszMessage, eAnimationType, iExtraGameData);439#endif440 } else {441#endif442 if(!CvPreGame::isNetworkMultiplayerGame() && GC.getGame().getActivePlayer() == eToPlayer)443 {444 // Target is the active player, just send it right now445#if defined(MOD_API_PLAYER_LOGS)446 pkDiploRequests->Send(eFromPlayer, eDiploType, eDiploMessage, pszMessage, eAnimationType, iExtraGameData);447#else448 pkDiploRequests->Send(eFromPlayer, eDiploType, pszMessage, eAnimationType, iExtraGameData);449#endif450 }451 else452#if defined(MOD_API_PLAYER_LOGS)453 pkDiploRequests->Add(eFromPlayer, eDiploType, eDiploMessage, pszMessage, eAnimationType, iExtraGameData);454#else455 pkDiploRequests->Add(eFromPlayer, eDiploType, pszMessage, eAnimationType, iExtraGameData);456#endif457#if defined(MOD_AI_MP_DIPLOMACY)458 }459#endif460 }461}