Bazaar developer reference

CvDiplomacyAI::WantAILeaderMessage(DiploMessageTypes, PlayerTypes, DiploUIStateTypes, LeaderheadAnimationTypes, int)

Defined in
CvDiplomacyAI.cpp, line 28722
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_WantAILeaderMessage
Lua events
GameEvents.DiplomacyStfu, GameEvents.DiplomacyStfuLeaveLeader

Hooks

static bool BeforeCvDiplomacyAI_WantAILeaderMessage(CvDiplomacyAI* self, DiploMessageTypes eDiploMessage, PlayerTypes eFromPlayer, DiploUIStateTypes eDiploUIState, LeaderheadAnimationTypes eAction, int iExtraData, bool& result);static void AfterCvDiplomacyAI_WantAILeaderMessage(CvDiplomacyAI* self, DiploMessageTypes eDiploMessage, PlayerTypes eFromPlayer, DiploUIStateTypes eDiploUIState, LeaderheadAnimationTypes eAction, int iExtraData, bool& result);static bool ReplaceCvDiplomacyAI_WantAILeaderMessage(bool (*original)(CvDiplomacyAI*, DiploMessageTypes, PlayerTypes, DiploUIStateTypes, LeaderheadAnimationTypes, int), CvDiplomacyAI* self, DiploMessageTypes eDiploMessage, PlayerTypes eFromPlayer, DiploUIStateTypes eDiploUIState, LeaderheadAnimationTypes eAction, int iExtraData);CivRegisterBefore<CivHooks::CvDiplomacyAI_WantAILeaderMessage>(host, &BeforeCvDiplomacyAI_WantAILeaderMessage);CivRegisterAfter<CivHooks::CvDiplomacyAI_WantAILeaderMessage>(host, &AfterCvDiplomacyAI_WantAILeaderMessage);CivRegisterReplace<CivHooks::CvDiplomacyAI_WantAILeaderMessage>(host, &ReplaceCvDiplomacyAI_WantAILeaderMessage);

Code

28721#if defined(MOD_DIPLOMACY_STFU)28722bool CvDiplomacyAI::WantAILeaderMessage(DiploMessageTypes eDiploMessage, PlayerTypes eFromPlayer, DiploUIStateTypes eDiploUIState, LeaderheadAnimationTypes eAction, int iExtraData)28723{28724	bool bWant = true;28725	int iResponseType = 0;2872628727	const char* szResponseKey = GetResponseKeyForMessage(eDiploMessage);28728	28729	if (szResponseKey) {28730		// CUSTOMLOG("STFU@%i: Diplo message %s (%i) from player %i", GC.getGame().getGameTurn(), szResponseKey, eDiploMessage, eFromPlayer);2873128732		if (m_pStfuResponseQuery == NULL)28733		{28734			const char* szSQL = "SELECT r.ID, s.SendEvent, s.Ignore, s.Respond, s.ResponseEvent, s.ResponseAI, s.ResponseData1, s.ResponseData2 FROM Diplomacy_Stfu s, Responses r, Diplomacy_StfuResponses sr WHERE sr.ResponseType=? AND sr.StfuType=s.Type AND sr.ResponseType=r.Type";28735			m_pStfuResponseQuery = new Database::Results();28736			if (!GC.GetGameDatabase()->Execute(*m_pStfuResponseQuery, szSQL, strlen(szSQL)))28737			{28738				// CUSTOMLOG("STFU: Failed to generate response query.");28739			}28740		}2874128742		bool bSendEvent = false;28743		bool bIgnore = false;28744		bool bRespond = false;28745		FromUIDiploEventTypes eResponseEvent = NO_FROM_UI_DIPLO_EVENT;28746		PlayerTypes eResponseFrom = NO_PLAYER;28747		int iResponseData1 = 0;28748		int iResponseData2 = 0;2874928750		m_pStfuResponseQuery->Bind(1, szResponseKey);28751		while (m_pStfuResponseQuery->Step())28752		{28753			iResponseType = m_pStfuResponseQuery->GetInt(0);28754			if (m_pStfuResponseQuery->GetInt(1) == 1) bSendEvent = true;28755			if (m_pStfuResponseQuery->GetInt(2) == 1) bIgnore = true;28756			if (bRespond == false && m_pStfuResponseQuery->GetInt(3) == 1) {28757				bRespond = true;28758				eResponseEvent = (FromUIDiploEventTypes)m_pStfuResponseQuery->GetInt(4);28759				if (m_pStfuResponseQuery->GetInt(5) == 1) {28760					eResponseFrom = eFromPlayer;28761				}28762				iResponseData1 = m_pStfuResponseQuery->GetInt(6);28763				iResponseData2 = m_pStfuResponseQuery->GetInt(7);28764			}28765		}2876628767		m_pStfuResponseQuery->Reset();2876828769		if (bSendEvent) {28770			// CUSTOMLOG("STFU: GameEvents.DiplomacyStfu(%i, %i, %i, %i, %i, %i)", eFromPlayer, iResponseType, eDiploMessage, eDiploUIState, eAction, iExtraData);2877128772			int iValue = 0;28773			if (GAMEEVENTINVOKE_VALUE(iValue, GAMEEVENT_DiplomacyStfu, eFromPlayer, iResponseType, eDiploMessage, eDiploUIState, eAction, iExtraData) == GAMEEVENTRETURN_VALUE) {28774				// CUSTOMLOG("STFU: Received %i", iValue);28775				if (iValue != 0) {28776					// Process the return code as the ID of the STFU_ action to execute28777					if (m_pStfuQuery == NULL) {28778						const char* szSQL = "SELECT ID, SendEvent, Ignore, Respond, ResponseEvent, ResponseAI, ResponseData1, ResponseData2 FROM Diplomacy_Stfu WHERE ID=?";28779						m_pStfuQuery = new Database::Results();28780						if (!GC.GetGameDatabase()->Execute(*m_pStfuQuery, szSQL, strlen(szSQL))) {28781							// CUSTOMLOG("STFU: Failed to generate stfu query.");28782						}28783					}2878428785					m_pStfuQuery->Bind(1, iValue);28786					while (m_pStfuQuery->Step())28787					{28788						if (m_pStfuQuery->GetInt(2) == 1) bIgnore = true;28789						if (m_pStfuQuery->GetInt(3) == 1) {28790							bRespond = true;28791							eResponseEvent = (FromUIDiploEventTypes)m_pStfuQuery->GetInt(4);28792							if (m_pStfuQuery->GetInt(5) == 1) {28793								eResponseFrom = eFromPlayer;28794							} else {28795								eResponseFrom = NO_PLAYER;28796							}28797							iResponseData1 = m_pStfuQuery->GetInt(6);28798							iResponseData2 = m_pStfuQuery->GetInt(7);28799						}28800					}2880128802					m_pStfuQuery->Reset();28803				}28804			}28805		}2880628807		if (bIgnore) {28808			// CUSTOMLOG("STFU: Ignore");28809			bWant = false;28810		} else if (bRespond) {28811			// CUSTOMLOG("STFU: Game.DoFromUIDiploEvent(%i, %i, %i, %i)", eResponseEvent, eResponseFrom, iResponseData1, iResponseData2);28812			GC.getGame().DoFromUIDiploEvent(eResponseEvent, eResponseFrom, iResponseData1, iResponseData2);28813			bWant = false;28814		}28815	}28816	else28817	{28818		CUSTOMLOG("STFU@%i: WARNING: Cannot find response key for message %i from player %i", GC.getGame().getGameTurn(), eDiploMessage, eFromPlayer);28819	}2882028821	if (bWant) {28822		// CUSTOMLOG("STFU: Want");28823	} else {28824		// Need to close the leader screen if it's open28825		// In Lua this is UI.RequestLeaveLeader(), but it's not in the API, so we'll have to send a GameEvent and do it in Lua ... YUCK!!!28826		GAMEEVENTINVOKE_HOOK(GAMEEVENT_DiplomacyStfuLeaveLeader, iResponseType);28827	}2882828829	return bWant;28830}

Calls

Called by