bool CHudMessage::MessageRemove(const char *pName) { const char* theMessage = pName; bool theSuccess = false; bool theNeedsTranslation = (pName[0] == '#'); // Trim off a leading # if it's there if(theNeedsTranslation) { client_textmessage_t* tempMessage = TextMessageGet(pName + 1); if(tempMessage) { theMessage = tempMessage->pMessage; } } if(theMessage) { for (int j = 0; j < maxHUDMessages; j++ ) { if ( m_pMessages[j] ) { // is this message already in the list if (!strcmp(theMessage, m_pMessages[j]->pMessage)) { m_startTime[j] = -1; theSuccess = true; } } } } return theSuccess; }
// Simplified version of LocaliseTextString; assumes string is only one word char *CHudTextMessage::LookupString( const char *msg, int *msg_dest ) { if ( !msg ) return ""; // '#' character indicates this is a reference to a string in titles.txt, and not the string itself if ( msg[0] == '#' ) { // this is a message name, so look up the real message client_textmessage_t *clmsg = TextMessageGet( msg+1 ); if ( !clmsg || !(clmsg->pMessage) ) return (char*)msg; // lookup failed, so return the original string if ( msg_dest ) { // check to see if titles.txt info overrides msg destination // if clmsg->effect is less than 0, then clmsg->effect holds -1 * message_destination if ( clmsg->effect < 0 ) // *msg_dest = -clmsg->effect; } return (char*)clmsg->pMessage; } else { // nothing special about this message, so just return the same string return (char*)msg; } }
inline void InsertTextMsg( char *szDst, size_t sLen, const char *szMsgName) { client_textmessage_t *msg = TextMessageGet(szMsgName); if( msg ) { strncpy( szDst, msg->pMessage, sLen ); } else strncpy( szDst, szMsgName, sLen ); }
//----------------------------------------------------------------------------- // Purpose: Searches through the string for any msg names (indicated by a '#') // any found are looked up in titles.txt and the new message substituted // the new value is pushed into dst_buffer // Input : *msg - // *dst_buffer - // buffer_size - // Output : char //----------------------------------------------------------------------------- char *CHudTextMessage::LocaliseTextString( const char *msg, char *dst_buffer, int buffer_size ) { char *dst = dst_buffer; for ( char *src = (char*)msg; *src != 0 && buffer_size > 0; buffer_size-- ) { if ( *src == '#' ) { // cut msg name out of string static char word_buf[255]; char *wdst = word_buf, *word_start = src; for ( ++src ; *src >= 'A' && *src <= 'z'; wdst++, src++ ) { *wdst = *src; } *wdst = 0; // lookup msg name in titles.txt client_textmessage_t *clmsg = TextMessageGet( word_buf ); if ( !clmsg || !(clmsg->pMessage) ) { src = word_start; *dst = *src; dst++, src++; continue; } // Does titles.txt want to lookup into cstrike_<language>.txt? wchar_t *pLocalizedStr; if ( clmsg->pMessage[0] == '#' && ((pLocalizedStr = g_pVGuiLocalize->Find( clmsg->pMessage )) != NULL ) ) { g_pVGuiLocalize->ConvertUnicodeToANSI( pLocalizedStr, dst, buffer_size ); } else { // copy string into message over the msg name for ( char *wsrc = (char*)clmsg->pMessage; *wsrc != 0; wsrc++, dst++ ) { *dst = *wsrc; } *dst = 0; } } else { *dst = *src; dst++, src++; *dst = 0; } } // // ensure null termination dst_buffer[buffer_size-1] = 0; return dst_buffer; }
//----------------------------------------------------------------------------- // Purpose: // Input : bool - //----------------------------------------------------------------------------- void C_TETextMessage::PostDataUpdate( DataUpdateType_t updateType ) { int channel; client_textmessage_t *pNetMessage; // Position command $position x y // x & y are from 0 to 1 to be screen resolution independent // -1 means center in each dimension // Effect command $effect <effect number> // effect 0 is fade in/fade out // effect 1 is flickery credits // effect 2 is write out (training room) // Text color r g b command $color // Text color r g b command $color2 // fadein time fadeout time / hold time // $fadein (message fade in time - per character in effect 2) // $fadeout (message fade out time) // $holdtime (stay on the screen for this long) channel = m_nChannel % MAX_NETMESSAGE; // Pick the buffer pNetMessage = TextMessageGet( gNetworkMessageNames[ channel ] ); if ( !pNetMessage || !pNetMessage->pMessage ) return; pNetMessage->x = x; pNetMessage->y = y; pNetMessage->effect = m_nEffects; pNetMessage->r1 = r1; pNetMessage->g1 = g1; pNetMessage->b1 = b1; pNetMessage->a1 = a1; pNetMessage->r2 = r2; pNetMessage->g2 = g2; pNetMessage->b2 = b2; pNetMessage->a2 = a2; pNetMessage->fadein = m_fFadeInTime; pNetMessage->fadeout = m_fFadeOutTime; pNetMessage->holdtime = m_fHoldTime; if ( pNetMessage->effect == 2 ) pNetMessage->fxtime = m_fFxTime; pNetMessage->pName = gNetworkMessageNames[ channel ]; Q_strncpy( (char *)pNetMessage->pMessage, m_szMessage, sizeof( m_szMessage ) ); DispatchHudText( "HudText", Q_strlen( pNetMessage->pName ) + 1, (void *)pNetMessage->pName ); }
int CHudMessage::MsgFunc_GameTitle( const char *pszName, int iSize, void *pbuf ) { m_pGameTitle = TextMessageGet( "GAMETITLE" ); if ( m_pGameTitle != NULL ) { m_gameTitleTime = gHUD.m_flTime; // Turn on drawing if ( !(m_iFlags & HUD_ACTIVE) ) m_iFlags |= HUD_ACTIVE; } return 1; }
void CHudMessage::MessageAdd( const char *pName, float time ) { int i; for ( i = 0; i < maxHUDMessages; i++ ) { if ( !m_pMessages[i] ) { m_pMessages[i] = TextMessageGet( pName ); m_startTime[i] = time; return; } } }
//----------------------------------------------------------------------------- // Purpose: Searches through the string for any msg names (indicated by a '#') // any found are looked up in titles.txt and the new message substituted // the new value is pushed into dst_buffer // Input : *msg - // *dst_buffer - // buffer_size - // Output : char //----------------------------------------------------------------------------- char *CHudTextMessage::LocaliseTextString( const char *msg, char *dst_buffer, int buffer_size ) { char *dst = dst_buffer; for ( char *src = (char*)msg; *src != 0 && buffer_size > 0; buffer_size-- ) { if ( *src == '#' ) { // cut msg name out of string static char word_buf[255]; char *wdst = word_buf, *word_start = src; for ( ++src ; *src >= 'A' && *src <= 'z'; wdst++, src++ ) { *wdst = *src; } *wdst = 0; // lookup msg name in titles.txt client_textmessage_t *clmsg = TextMessageGet( word_buf ); if ( !clmsg || !(clmsg->pMessage) ) { src = word_start; *dst = *src; dst++, src++; continue; } // copy string into message over the msg name for ( char *wsrc = (char*)clmsg->pMessage; *wsrc != 0; wsrc++, dst++ ) { *dst = *wsrc; } *dst = 0; } else { *dst = *src; dst++, src++; *dst = 0; } } // // ensure null termination dst_buffer[buffer_size-1] = 0; return dst_buffer; }
void CHudMessage::MessageAdd( const char *pName, float time ) { int i,j; client_textmessage_t *tempMessage; for ( i = 0; i < maxHUDMessages; i++ ) { if ( !m_pMessages[i] ) { // Trim off a leading # if it's there if ( pName[0] == '#' ) tempMessage = TextMessageGet( pName+1 ); else tempMessage = TextMessageGet( pName ); // If we couldnt find it in the titles.txt, just create it if ( !tempMessage ) { g_pCustomMessage.effect = 2; g_pCustomMessage.r1 = g_pCustomMessage.g1 = g_pCustomMessage.b1 = g_pCustomMessage.a1 = 100; g_pCustomMessage.r2 = 240; g_pCustomMessage.g2 = 110; g_pCustomMessage.b2 = 0; g_pCustomMessage.a2 = 0; g_pCustomMessage.x = -1; // Centered g_pCustomMessage.y = 0.7; g_pCustomMessage.fadein = 0.01; g_pCustomMessage.fadeout = 1.5; g_pCustomMessage.fxtime = 0.25; g_pCustomMessage.holdtime = 5; g_pCustomMessage.pName = g_pCustomName; strcpy( g_pCustomText, pName ); g_pCustomMessage.pMessage = g_pCustomText; tempMessage = &g_pCustomMessage; } for ( j = 0; j < maxHUDMessages; j++ ) { if ( m_pMessages[j] ) { // is this message already in the list if ( !strcmp( tempMessage->pMessage, m_pMessages[j]->pMessage ) ) { return; } // get rid of any other messages in same location (only one displays at a time) if ( fabs( tempMessage->y - m_pMessages[j]->y ) < 0.0001 ) { if ( fabs( tempMessage->x - m_pMessages[j]->x ) < 0.0001 ) { m_pMessages[j] = NULL; } } } } m_pMessages[i] = tempMessage; m_startTime[i] = time; return; } } }
void CHudMessage::MessageAdd( const char *pName, float time ) { int i,j; client_textmessage_t *tempMessage; for ( i = 0; i < maxHUDMessages; i++ ) { if ( !m_pMessages[i] ) { // Trim off a leading # if it's there if ( pName[0] == '#' ) tempMessage = TextMessageGet( pName+1 ); else tempMessage = TextMessageGet( pName ); client_textmessage_t *message = new client_textmessage_t; if( tempMessage ) { *message = *tempMessage; // localize again, if it need if( message->pMessage[0] == '#' ) { char *szCustomName = new char[10]; char *szCustomText = new char[1024]; strcpy( szCustomName, "Custom" ); strcpy( szCustomText, pName ); message->pMessage = szCustomText; message->pName = szCustomName; } } else { char *szCustomName = new char[10]; char *szCustomText = new char[1024]; strcpy( szCustomName, "Custom" ); strcpy( szCustomText, pName ); // If we couldnt find it in the titles.txt, just create it message->effect = 2; message->r1 = message->g1 = message->b1 = message->a1 = 100; message->r2 = 240; message->g2 = 110; message->b2 = 0; message->a2 = 0; message->x = -1; // Centered message->y = 0.7; message->fadein = 0.01; message->fadeout = 1.5; message->fxtime = 0.25; message->holdtime = 5; message->pName = szCustomName; message->pMessage = szCustomText; } for ( j = 0; j < maxHUDMessages; j++ ) { if ( m_pMessages[j] ) { // is this message already in the list if ( !strcmp( message->pMessage, m_pMessages[j]->pMessage ) ) { return; } // get rid of any other messages in same location (only one displays at a time) if ( fabs( message->y - m_pMessages[j]->y ) < 0.0001 && fabs( message->x - m_pMessages[j]->x ) < 0.0001 ) { if( !strcmp( m_pMessages[j]->pName, "Custom" ) ) { delete[] m_pMessages[j]->pName; delete[] m_pMessages[j]->pMessage; } delete m_pMessages[j]; m_pMessages[j] = NULL; } } } m_pMessages[i] = message; m_startTime[i] = time; return; } } }
void CHudMessage::MessageAdd( const char *pName, float time ) { int i,j; client_textmessage_t *tempMessage; for ( i = 0; i < maxHUDMessages; i++ ) { if ( !m_pMessages[i] ) { // Trim off a leading # if it's there if ( pName[0] == '#' ) tempMessage = TextMessageGet( pName+1 ); else tempMessage = TextMessageGet( pName ); // If we couldnt find it in the titles.txt, just create it if ( !tempMessage ) { // g-cont. a circular message buffer m_index = (m_index + 1) & (MAX_CUSTOM_MESSAGES - 1); tempMessage = &g_pCustomMessage[m_index]; tempMessage->effect = 2; tempMessage->r1 = tempMessage->g1 = tempMessage->b1 = tempMessage->a1 = 192; tempMessage->r2 = 240; tempMessage->g2 = 110; tempMessage->b2 = 0; tempMessage->a2 = 0; tempMessage->x = -1; // Centered tempMessage->y = 0.7; tempMessage->fadein = 0.01; tempMessage->fadeout = 1.5; tempMessage->fxtime = 0.25; tempMessage->holdtime = 5; strcpy( (char *)tempMessage->pMessage, pName ); } for ( j = 0; j < maxHUDMessages; j++ ) { if ( m_pMessages[j] ) { // is this message already in the list if ( !strcmp( tempMessage->pMessage, m_pMessages[j]->pMessage ) ) { return; } // get rid of any other messages in same location (only one displays at a time) if ( fabs( tempMessage->y - m_pMessages[j]->y ) < 0.0001 ) { if ( fabs( tempMessage->x - m_pMessages[j]->x ) < 0.0001 ) { m_pMessages[j] = NULL; } } } } m_pMessages[i] = tempMessage; m_startTime[i] = time; return; } } }