diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp index 97639565..52700679 100644 --- a/core/ConVarManager.cpp +++ b/core/ConVarManager.cpp @@ -43,6 +43,10 @@ const ParamType CONVARCHANGE_PARAMS[] = {Param_Cell, Param_String, Param_String} typedef List ConVarList; NameHashSet convar_cache; +enum { + eQueryCvarValueStatus_Cancelled = -1, +}; + class ConVarReentrancyGuard { ConVar *cvar; @@ -238,6 +242,19 @@ void ConVarManager::OnClientDisconnected(int client) ConVarQuery &query = (*iter); if (query.client == client) { + IPluginFunction *pCallback = query.pCallback; + if (pCallback) + { + cell_t ret; + + pCallback->PushCell(query.cookie); + pCallback->PushCell(client); + pCallback->PushCell(eQueryCvarValueStatus_Cancelled); + pCallback->PushString(""); + pCallback->PushString(""); + pCallback->PushCell(query.value); + pCallback->Execute(&ret); + } iter = m_ConVarQueries.erase(iter); continue; } diff --git a/plugins/include/convars.inc b/plugins/include/convars.inc index 7bc9f770..7533a7f5 100644 --- a/plugins/include/convars.inc +++ b/plugins/include/convars.inc @@ -49,6 +49,7 @@ enum ConVarBounds */ enum ConVarQueryResult { + ConVarQuery_Cancelled = -1, //< Client disconnected during query */ ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */ ConVarQuery_NotFound, //< Client convar was not found. */ ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */