//========= Copyright 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #include "cbase.h" #include "hud_chat.h" #include "hud_macros.h" #include "text_message.h" #include "vguicenterprint.h" ConVar cl_showtextmsg( "cl_showtextmsg", "1", 0, "Enable/disable text messages printing on the screen." ); // converts all '\r' characters to '\n', so that the engine can deal with the properly // returns a pointer to str static char* ConvertCRtoNL( char *str ) { for ( char *ch = str; *ch != 0; ch++ ) if ( *ch == '\r' ) *ch = '\n'; return str; } static void StripEndNewlineFromString( char *str ) { int s = strlen( str ) - 1; if ( str[s] == '\n' || str[s] == '\r' ) str[s] = 0; } DECLARE_HUDELEMENT( CHudChat ); DECLARE_HUD_MESSAGE( CHudChat, SayText ); DECLARE_HUD_MESSAGE( CHudChat, TextMsg ); //===================== //CHudChat //===================== CHudChat::CHudChat( const char *pElementName ) : BaseClass( pElementName ) { } void CHudChat::Init( void ) { BaseClass::Init(); HOOK_HUD_MESSAGE( CHudChat, SayText ); HOOK_HUD_MESSAGE( CHudChat, TextMsg ); } //----------------------------------------------------------------------------- // Purpose: // Input : *pszName - // iSize - // *pbuf - //----------------------------------------------------------------------------- void CHudChat::MsgFunc_SayText( bf_read &msg ) { char szString[256]; msg.ReadByte(); // client ID msg.ReadString( szString, sizeof(szString) ); Printf( "%s", szString ); } // Message handler for text messages // displays a string, looking them up from the titles.txt file, which can be localised // parameters: // byte: message direction ( HUD_PRINTCONSOLE, HUD_PRINTNOTIFY, HUD_PRINTCENTER, HUD_PRINTTALK ) // string: message // optional parameters: // string: message parameter 1 // string: message parameter 2 // string: message parameter 3 // string: message parameter 4 // any string that starts with the character '#' is a message name, and is used to look up the real message in titles.txt // the next (optional) one to four strings are parameters for that string (which can also be message names if they begin with '#') void CHudChat::MsgFunc_TextMsg( bf_read &msg ) { char szString[2048]; int msg_dest = msg.ReadByte(); static char szBuf[6][128]; msg.ReadString( szString, sizeof(szString) ); char *msg_text = hudtextmessage->LookupString( szString, &msg_dest ); Q_strncpy( szBuf[0], msg_text, sizeof( szBuf[0] ) ); msg_text = szBuf[0]; // keep reading strings and using C format strings for subsituting the strings into the localised text string msg.ReadString( szString, sizeof(szString) ); char *sstr1 = hudtextmessage->LookupString( szString ); Q_strncpy( szBuf[1], sstr1, sizeof( szBuf[1] ) ); sstr1 = szBuf[1]; StripEndNewlineFromString( sstr1 ); // these strings are meant for subsitution into the main strings, so cull the automatic end newlines msg.ReadString( szString, sizeof(szString) ); char *sstr2 = hudtextmessage->LookupString( szString ); Q_strncpy( szBuf[2], sstr2, sizeof( szBuf[2] ) ); sstr2 = szBuf[2]; StripEndNewlineFromString( sstr2 ); msg.ReadString( szString, sizeof(szString) ); char *sstr3 = hudtextmessage->LookupString( szString ); Q_strncpy( szBuf[3], sstr3, sizeof( szBuf[3] ) ); sstr3 = szBuf[3]; StripEndNewlineFromString( sstr3 ); msg.ReadString( szString, sizeof(szString) ); char *sstr4 = hudtextmessage->LookupString( szString ); Q_strncpy( szBuf[4], sstr4, sizeof( szBuf[4] ) ); sstr4 = szBuf[4]; StripEndNewlineFromString( sstr4 ); char *psz = szBuf[5]; if ( !cl_showtextmsg.GetInt() ) return; switch ( msg_dest ) { case HUD_PRINTCENTER: Q_snprintf( psz, sizeof( szBuf[5] ), msg_text, sstr1, sstr2, sstr3, sstr4 ); internalCenterPrint->Print( ConvertCRtoNL( psz ) ); break; case HUD_PRINTNOTIFY: psz[0] = 1; // mark this message to go into the notify buffer Q_snprintf( psz+1, sizeof( szBuf[5] ) - 1, msg_text, sstr1, sstr2, sstr3, sstr4 ); Msg( "%s", ConvertCRtoNL( psz ) ); break; case HUD_PRINTTALK: Q_snprintf( psz, sizeof( szBuf[5] ), msg_text, sstr1, sstr2, sstr3, sstr4 ); Printf( "%s", ConvertCRtoNL( psz ) ); break; case HUD_PRINTCONSOLE: Q_snprintf( psz, sizeof( szBuf[5] ), msg_text, sstr1, sstr2, sstr3, sstr4 ); Msg( "%s", ConvertCRtoNL( psz ) ); break; } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 5821 | Knut Wikstrom |
Added Valve Source code. This is NOT to be commited to other than new code from Valve. |