/* ================= CG_AdminChat_f ================= */ static void CG_AdminChat_f( void ) { char name[ MAX_NAME_LENGTH ]; char mode[ 3 ]; trap_Argv( 1, name, sizeof( name ) ); trap_Argv( 2, mode, sizeof( mode ) ); CG_Say( name, -1, atoi( mode ), CG_Argv( 3 ) ); }
/* ================= CG_Chat_f ================= */ static void CG_Chat_f( void ) { char id[ 3 ]; char mode[ 3 ]; trap_Argv( 1, id, sizeof( id ) ); trap_Argv( 2, mode, sizeof( mode ) ); CG_Say( NULL, atoi( id ), atoi( mode ), CG_Argv( 3 ) ); }
/* ================= CG_Chat_f ================= */ static void CG_Chat_f() { char id[ 3 ]; char mode[ 3 ]; trap_Argv( 1, id, sizeof( id ) ); trap_Argv( 2, mode, sizeof( mode ) ); CG_Say( nullptr, atoi( id ), (saymode_t) atoi( mode ), CG_Argv( 3 ) ); }
/* ================= CG_ParseVoice voice clientNum vChan cmdNum trackNum [sayText] ================= */ static void CG_ParseVoice( void ) { int clientNum; voiceChannel_t vChan; char sayText[ MAX_SAY_TEXT ] = { "" }; voiceTrack_t *track; clientInfo_t *ci; if ( trap_Argc() < 5 || trap_Argc() > 6 ) { return; } if ( trap_Argc() == 6 ) { Q_strncpyz( sayText, CG_Argv( 5 ), sizeof( sayText ) ); } clientNum = atoi( CG_Argv( 1 ) ); if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) { return; } vChan = atoi( CG_Argv( 2 ) ); if ( ( unsigned ) vChan >= VOICE_CHAN_NUM_CHANS ) { return; } if ( cg_teamChatsOnly.integer && vChan != VOICE_CHAN_TEAM ) { return; } ci = &cgs.clientinfo[ clientNum ]; // this joker is still talking if ( ci->voiceTime > cg.time ) { return; } track = CG_VoiceTrack( ci->voice, atoi( CG_Argv( 3 ) ), atoi( CG_Argv( 4 ) ) ); // keep track of how long the player will be speaking // assume it takes 3s to say "*unintelligible gibberish*" if ( track ) { ci->voiceTime = cg.time + track->duration; } else { ci->voiceTime = cg.time + 3000; } if ( !sayText[ 0 ] ) { if ( track ) { Q_strncpyz( sayText, track->text, sizeof( sayText ) ); } else { Q_strncpyz( sayText, "*unintelligible gibberish*", sizeof( sayText ) ); } } if ( !cg_noVoiceText.integer ) { switch ( vChan ) { case VOICE_CHAN_ALL: CG_Say( NULL, clientNum, SAY_ALL, sayText ); break; case VOICE_CHAN_TEAM: CG_Say( NULL, clientNum, SAY_TEAM, sayText ); break; case VOICE_CHAN_LOCAL: CG_Say( NULL, clientNum, SAY_AREA_TEAM, sayText ); break; default: break; } } // playing voice audio tracks disabled if ( cg_noVoiceChats.integer ) { return; } // no audio track to play if ( !track ) { return; } // don't play audio track for lamers if ( Com_ClientListContains( &cgs.ignoreList, clientNum ) ) { return; } switch ( vChan ) { case VOICE_CHAN_ALL: trap_S_StartLocalSound( track->track, CHAN_VOICE ); break; case VOICE_CHAN_TEAM: trap_S_StartLocalSound( track->track, CHAN_VOICE ); break; case VOICE_CHAN_LOCAL: trap_S_StartSound( NULL, clientNum, CHAN_VOICE, track->track ); break; default: break; } }