Hi, i've been trying to hook VGUI menu "teammenu" to block it showing and show a menu instead when players press "M" in CS:GO
I've read some posts about this but i still don't figure it out, my attempts to test are crashing my server.
Found this by neuroToxin
PHP Code:
public void OnPluginStart()
{
UserMsg umVGUIMenu = GetUserMessageId("VGUIMenu");
if (umVGUIMenu == INVALID_MESSAGE_ID)
SetFailState("UserMsg `umVGUIMenu` not found!");
HookUserMessage(umVGUIMenu, OnVGUIMenu, true);
g_hOnGetClientVGUIUrl = CreateGlobalForward("OnGetClientVGUIUrl", ET_Single, Param_Cell, Param_String, Param_String, Param_String);
}
public Action OnVGUIMenu(UserMsg msg_id, Protobuf msg, const int[] players, int playersNum, bool reliable, bool init)
{
char name[7];
msg.ReadString("name", name, sizeof(name));
int client = players[0];
PrintToConsole(client, "> OnVGUIMenu(name='%s', show=%d)", name, msg.ReadBool("show"));
if (!StrEqual(name, "info"))
return Plugin_Continue;
Protobuf subkey[3]; int subkeylookup[3];
for (int i = 0; i < 3; i++)
{
subkey[i] = msg.ReadRepeatedMessage("subkeys", i);
subkey[i].ReadString("name", name, sizeof(name));
//PrintToConsole(client, "> OnVGUIMenu.subkeys[%d].name='%s'", i, name);
if (StrEqual(name, "title"))
{
subkeylookup[0] = i;
subkey[i].ReadString("str", g_sTitle, sizeof(g_sTitle));
//PrintToConsole(client, "> OnVGUIMenu.subkeys[%d].str='%s'", i, g_sTitle);
}
else if (StrEqual(name, "type"))
{
subkeylookup[1] = i;
subkey[i].ReadString("str", g_sType, sizeof(g_sType));
//PrintToConsole(client, "> OnVGUIMenu.subkeys[%d].str='%s'", i, g_sType);
}
else if (StrEqual(name, "msg"))
{
subkeylookup[2] = i;
subkey[i].ReadString("str", g_sMessage, sizeof(g_sMessage));
//PrintToConsole(client, "> OnVGUIMenu.subkeys[%d].str='%s'", i, g_sMessage);
}
}
if (StrEqual(g_sType, "1") && StrEqual(g_sMessage, "motd"))
{
Action result;
Call_StartForward(g_hOnGetClientVGUIUrl);
Call_PushCell(client);
Call_PushString(g_sTitle);
Call_PushString(g_sType);
Call_PushString(g_sMessage);
Call_Finish(result);
if (result == Plugin_Stop)
{
PrintToConsole(client, "> MOTD BLOCKED");
msg.SetBool("show", false);
delete subkey[0];
delete subkey[1];
delete subkey[2];
return Plugin_Continue;
}
if (result == Plugin_Changed)
{
subkey[subkeylookup[0]].SetString("str", g_sTitle);
subkey[subkeylookup[1]].SetString("str", g_sType);
subkey[subkeylookup[2]].SetString("str", g_sMessage);
//PrintToConsole(client, "> OnVGUIMenu.title='%s'", g_sTitle);
PrintToConsole(client, "> OnVGUIMenu.type='%s'", g_sType);
PrintToConsole(client, "> OnVGUIMenu.msg='%s'", g_sMessage);
}
}
delete subkey[0];
delete subkey[1];
delete subkey[2];
return Plugin_Continue;
}
Can someone help me understand how to properly do this?
__________________