bool CHalfLife2::ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show) { KeyValues *SubKey = NULL; int count = 0; cell_t players[] = {client}; #if SOURCE_ENGINE == SE_CSGO CCSUsrMsg_VGUIMenu *pMsg; if ((pMsg = (CCSUsrMsg_VGUIMenu *)g_UserMsgs.StartProtobufMessage(m_VGUIMenu, players, 1, USERMSG_RELIABLE)) == NULL) { return false; } #else bf_write *pBitBuf = NULL; if ((pBitBuf = g_UserMsgs.StartBitBufMessage(m_VGUIMenu, players, 1, USERMSG_RELIABLE)) == NULL) { return false; } #endif if (data) { SubKey = data->GetFirstSubKey(); while (SubKey) { count++; SubKey = SubKey->GetNextKey(); } SubKey = data->GetFirstSubKey(); } #if SOURCE_ENGINE == SE_CSGO pMsg->set_name(name); pMsg->set_show(show); while (SubKey) { CCSUsrMsg_VGUIMenu_Subkey *key = pMsg->add_subkeys(); key->set_name(SubKey->GetName()); key->set_str(SubKey->GetString()); SubKey = SubKey->GetNextKey(); } #else pBitBuf->WriteString(name); pBitBuf->WriteByte((show) ? 1 : 0); pBitBuf->WriteByte(count); while (SubKey) { pBitBuf->WriteString(SubKey->GetName()); pBitBuf->WriteString(SubKey->GetString()); SubKey = SubKey->GetNextKey(); } #endif g_UserMsgs.EndMessage(); return true; }
//--------------------------------------------------------------------------------- // Purpose: Show Panel to user //--------------------------------------------------------------------------------- void DrawPanel(MRecipientFilter *mrf, char *panel_title, char *network_string, char *message, int message_length) { // Update network string first if (!g_pStringTableManiScreen) return; int index = g_pStringTableManiScreen->FindStringIndex(network_string); if (index == -1) return; g_pStringTableManiScreen->SetStringUserData(index, message_length + 1, message); #if defined ( GAME_CSGO ) CCSUsrMsg_VGUIMenu *msg = (CCSUsrMsg_VGUIMenu *)g_Cstrike15UsermessageHelpers.GetPrototype(CS_UM_VGUIMenu)->New(); // Show TextMsg type user message msg->set_name("info"); // menu name msg->set_show(1); CCSUsrMsg_VGUIMenu_Subkey *subkey = msg->add_subkeys(); subkey->set_name("title"); subkey->set_str(panel_title); subkey = msg->add_subkeys(); subkey->set_name("type"); subkey->set_str("1"); subkey = msg->add_subkeys(); subkey->set_name("Msg"); subkey->set_str(network_string); engine->SendUserMessage(*mrf, CS_UM_VGUIMenu, *msg); delete msg; #else msg_buffer = engine->UserMessageBegin(mrf, vgui_message_index); msg_buffer->WriteString("info"); // menu name msg_buffer->WriteByte(1); msg_buffer->WriteByte(3); msg_buffer->WriteString("title"); msg_buffer->WriteString(panel_title); msg_buffer->WriteString("type"); msg_buffer->WriteString("1"); msg_buffer->WriteString("Msg"); msg_buffer->WriteString(network_string); engine->MessageEnd(); #endif }
//--------------------------------------------------------------------------------- // Purpose: Show Web Stats to user //--------------------------------------------------------------------------------- void DrawMOTD(MRecipientFilter *mrf) { const ConVar *hostname = g_pCVar->FindVar( "hostname" ); const char *title = (hostname) ? hostname->GetString() : "MESSAGE OF THE DAY"; #if defined ( GAME_CSGO ) CCSUsrMsg_VGUIMenu *msg = (CCSUsrMsg_VGUIMenu *)g_Cstrike15UsermessageHelpers.GetPrototype(CS_UM_VGUIMenu)->New(); // Show TextMsg type user message msg->set_name("info"); // menu name msg->set_show(1); CCSUsrMsg_VGUIMenu_Subkey *subkey = msg->add_subkeys(); subkey->set_name("title"); subkey->set_str(title); subkey = msg->add_subkeys(); subkey->set_name("type"); subkey->set_str("1"); subkey = msg->add_subkeys(); subkey->set_name("Msg"); subkey->set_str("motd"); engine->SendUserMessage(*mrf, CS_UM_VGUIMenu, *msg); delete msg; #else msg_buffer = engine->UserMessageBegin(mrf, vgui_message_index); msg_buffer->WriteString("info"); // menu name msg_buffer->WriteByte(1); msg_buffer->WriteByte(3); msg_buffer->WriteString("title"); msg_buffer->WriteString(title); msg_buffer->WriteString("type"); msg_buffer->WriteString("1"); msg_buffer->WriteString("Msg"); msg_buffer->WriteString("motd"); engine->MessageEnd(); #endif }
//--------------------------------------------------------------------------------- // Purpose: Show URL Panel to user //--------------------------------------------------------------------------------- void DrawURL(MRecipientFilter *mrf, char *title, const char *url) { //first strip the "" //then see if it starts with http: or https: //default to http: int len = strlen(url)+8; // leave room for the http beginning char stripped_url[512]; char final_url[512]; char lowercase_url[512]; memset (stripped_url, 0, len); memset (lowercase_url, 0, len); memset (final_url, 0, len); int url_index = 0; int stripped_url_index = 0; do { if ( url[url_index] != '\"' && url[url_index] != '\'' ) { stripped_url[stripped_url_index] = url[url_index]; lowercase_url[stripped_url_index++] = url_lower(url[url_index]); } url_index++; } while ( url[url_index] != 0 ); if ( !strstr(lowercase_url, "http://") && !strstr(lowercase_url, "https://") ) { Q_snprintf(final_url, len, "http://%s", stripped_url); } else { Q_snprintf(final_url, len, "%s", stripped_url); } #if defined ( GAME_CSGO ) CCSUsrMsg_VGUIMenu *msg = (CCSUsrMsg_VGUIMenu *)g_Cstrike15UsermessageHelpers.GetPrototype(CS_UM_VGUIMenu)->New(); // Show TextMsg type user message msg->set_name("info"); // menu name msg->set_show(1); CCSUsrMsg_VGUIMenu_Subkey *subkey = msg->add_subkeys(); subkey->set_name("title"); subkey->set_str(title); subkey = msg->add_subkeys(); subkey->set_name("type"); subkey->set_str("2"); // URL subkey = msg->add_subkeys(); subkey->set_name("Msg"); subkey->set_str(final_url); engine->SendUserMessage(*mrf, CS_UM_VGUIMenu, *msg); delete msg; #else msg_buffer = engine->UserMessageBegin(mrf, vgui_message_index); msg_buffer->WriteString("info"); // menu name msg_buffer->WriteByte(1); msg_buffer->WriteByte(3); msg_buffer->WriteString("title"); msg_buffer->WriteString(title); msg_buffer->WriteString("type"); msg_buffer->WriteString("2"); // URL msg_buffer->WriteString("Msg"); msg_buffer->WriteString(final_url); engine->MessageEnd(); #endif }