|
|
//========= 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"
#include "hud_basechat.h"
#include <vgui/ILocalize.h>
// NOTE: This has to be the last file included!
#include "tier0/memdbgon.h"
DECLARE_HUDELEMENT_FLAGS( CHudChat, HUDELEMENT_SS_FULLSCREEN_ONLY );
DECLARE_HUD_MESSAGE( CHudChat, SayText ); DECLARE_HUD_MESSAGE( CHudChat, SayText2 ); 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, SayText2 ); HOOK_HUD_MESSAGE( CHudChat, TextMsg ); }
//-----------------------------------------------------------------------------
// Purpose: Reads in a player's Chat text from the server
//-----------------------------------------------------------------------------
void CHudChat::MsgFunc_SayText2( bf_read &msg ) { int client = msg.ReadByte(); bool bWantsToChat = msg.ReadByte() ? true : false;
wchar_t szBuf[6][256]; char untranslated_msg_text[256]; wchar_t *msg_text = ReadLocalizedString( msg, szBuf[0], sizeof( szBuf[0] ), false, untranslated_msg_text, sizeof( untranslated_msg_text ) );
// keep reading strings and using C format strings for subsituting the strings into the localised text string
ReadChatTextString ( msg, szBuf[1], sizeof( szBuf[1] ) ); // player name
ReadChatTextString ( msg, szBuf[2], sizeof( szBuf[2] ) ); // chat text
ReadLocalizedString( msg, szBuf[3], sizeof( szBuf[3] ), true ); ReadLocalizedString( msg, szBuf[4], sizeof( szBuf[4] ), true );
g_pVGuiLocalize->ConstructString( szBuf[5], sizeof( szBuf[5] ), msg_text, 4, szBuf[1], szBuf[2], szBuf[3], szBuf[4] );
char ansiString[512]; g_pVGuiLocalize->ConvertUnicodeToANSI( ConvertCRtoNL( szBuf[5] ), ansiString, sizeof( ansiString ) );
if ( bWantsToChat ) { // print raw chat text
ChatPrintf( client, CHAT_FILTER_NONE, "%s", ansiString );
Msg( "%s\n", RemoveColorMarkup(ansiString) ); } else { // print raw chat text
ChatPrintf( client, CHAT_FILTER_NONE, "%s", ansiString ); } }
//-----------------------------------------------------------------------------
// 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( CHAT_FILTER_NONE, "%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][256];
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 ); GetCenterPrint()->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( CHAT_FILTER_NONE, "%s", ConvertCRtoNL( psz ) ); break;
case HUD_PRINTCONSOLE: Q_snprintf( psz, sizeof( szBuf[5] ), msg_text, sstr1, sstr2, sstr3, sstr4 ); Msg( "%s", ConvertCRtoNL( psz ) ); break; } }
|