diff options
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/g_cmds.c | 20 | ||||
-rw-r--r-- | src/game/g_local.h | 1 | ||||
-rw-r--r-- | src/game/g_svcmds.c | 44 |
3 files changed, 38 insertions, 27 deletions
diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index eb001457..deb45159 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -695,7 +695,7 @@ static void G_SayTo( gentity_t *ent, gentity_t *other, int mode, int color, cons // specs with ADMF_SPEC_ALLCHAT flag can see team chat } - if( BG_ClientListTest( &other->client->sess.ignoreList, ent-g_entities ) ) + if( ent && BG_ClientListTest( &other->client->sess.ignoreList, ent-g_entities ) ) ignore = qtrue; trap_SendServerCommand( other-g_entities, va( "%s \"%s%s%c%c%s%s\"", @@ -715,7 +715,7 @@ void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) char text[ MAX_SAY_TEXT ]; char location[ 64 ]; - if( g_chatTeamPrefix.integer ) + if( ent && g_chatTeamPrefix.integer ) { prefix = BG_TeamName( ent->client->pers.teamSelection ); prefix = va( "[%c] ", toupper( *prefix ) ); @@ -727,14 +727,20 @@ void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) { default: case SAY_ALL: - G_LogPrintf( "say: %s^7: %s\n", ent->client->pers.netname, chatText ); + G_LogPrintf( "say: %s%s^7: " S_COLOR_GREEN "%s\n", prefix, + ( ent ) ? ent->client->pers.netname : "console", chatText ); Com_sprintf( name, sizeof( name ), "%s%s" S_COLOR_WHITE ": ", prefix, - ent->client->pers.netname ); + ( ent ) ? ent->client->pers.netname : "console" ); color = COLOR_GREEN; break; case SAY_TEAM: - G_LogPrintf( "sayteam: %s^7: %s\n", ent->client->pers.netname, chatText ); + // console say_team is handled in g_svscmds, not here + if( !ent || !ent->client ) + Com_Error( ERR_FATAL, "SAY_TEAM by non-client entity\n" ); + + G_LogPrintf( "sayteam: %s%s^7: " S_COLOR_CYAN "%s\n", prefix, + ent->client->pers.netname, chatText ); if( Team_GetLocationMsg( ent, location, sizeof( location ) ) ) Com_sprintf( name, sizeof( name ), "(%s" S_COLOR_WHITE ") (%s): ", ent->client->pers.netname, location ); @@ -748,10 +754,10 @@ void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) if( target && OnSameTeam( target, ent ) && Team_GetLocationMsg( ent, location, sizeof( location ) ) ) Com_sprintf( name, sizeof( name ), "[%s" S_COLOR_WHITE "] (%s): ", - ent->client->pers.netname, location ); + ( ent ) ? ent->client->pers.netname : "console", location ); else Com_sprintf( name, sizeof( name ), "[%s" S_COLOR_WHITE "]: ", - ent->client->pers.netname ); + ( ent ) ? ent->client->pers.netname : "console" ); color = COLOR_MAGENTA; break; } diff --git a/src/game/g_local.h b/src/game/g_local.h index 389530a2..8aea02dc 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -680,6 +680,7 @@ void G_ToggleFollow( gentity_t *ent ); void G_MatchOnePlayer( int *plist, int num, char *err, int len ); int G_ClientNumberFromString( char *s ); int G_ClientNumbersFromString( char *s, int *plist, int max ); +void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ); int G_SayArgc( void ); qboolean G_SayArgv( int n, char *buffer, int bufferLength ); char *G_SayConcatArgs( int start ); diff --git a/src/game/g_svcmds.c b/src/game/g_svcmds.c index 7f63ddd2..d74fb147 100644 --- a/src/game/g_svcmds.c +++ b/src/game/g_svcmds.c @@ -313,9 +313,13 @@ static void Svcmd_TeamWin_f( void ) case TEAM_ALIENS: G_BaseSelfDestruct( TEAM_HUMANS ); break; + case TEAM_HUMANS: G_BaseSelfDestruct( TEAM_ALIENS ); break; + + default: + return; } } @@ -345,6 +349,7 @@ static void Svcmd_MapRotation_f( void ) static void Svcmd_TeamMessage_f( void ) { char teamNum[ 2 ]; + const char* prefix; team_t team; if( trap_Argc( ) < 3 ) @@ -362,21 +367,11 @@ static void Svcmd_TeamMessage_f( void ) return; } - G_TeamCommand( team, va( "tchat \"console: ^5%s\"", ConcatArgs( 2 ) ) ); -} + prefix = BG_TeamName( team ); + prefix = va( "[%c] ", toupper( *prefix ) ); -static void Svcmd_SendMessage( void ) -{ - char cmd[ 5 ]; - trap_Argv( 1, cmd, sizeof( cmd ) ); - - if( trap_Argc( ) < 2 ) - { - G_Printf( "usage: %s <message>\n", cmd ); - return; - } - - trap_SendServerCommand( -1, va( "chat \"console: ^2%s\"", ConcatArgs( 1 ) ) ); + G_TeamCommand( team, va( "tchat \"(console): " S_COLOR_CYAN "%s\"", ConcatArgs( 2 ) ) ); + G_LogPrintf( "sayteam: %sconsole: " S_COLOR_CYAN "%s\n", prefix, ConcatArgs( 2 ) ); } static void Svcmd_CenterPrint_f( void ) @@ -488,15 +483,24 @@ static void Svcmd_PrintQueue_f( void ) } } -// dumb wrapper for "a" and "m" +static void Svcmd_Chat_f( void ) +{ + trap_SendServerCommand( -1, va( "chat \"%s\"", ConcatArgs( 1 ) ) ); + G_LogPrintf("chat: %s\n", ConcatArgs( 1 ) ); +} + +// dumb wrapper for "a" and "m" and "say" static void Svcmd_MessageWrapper( void ) { - char cmd[ 2 ]; + char cmd[ 5 ]; trap_Argv( 0, cmd, sizeof( cmd ) ); + if( !Q_stricmp( cmd, "a" ) ) Cmd_AdminMessage_f( NULL ); - else + else if( !Q_stricmp( cmd, "m" ) ) Cmd_PrivateMessage_f( NULL ); + else if( !Q_stricmp( cmd, "say" ) ) + G_Say( NULL, NULL, SAY_ALL, ConcatArgs( 1 ) ); } struct @@ -521,10 +525,10 @@ struct { "evacuation", qfalse, Svcmd_Evacuation_f }, { "printqueue", qfalse, Svcmd_PrintQueue_f }, // don't handle communication commands unless dedicated - { "say_team", qtrue, Svcmd_TeamMessage_f }, - { "say", qtrue, Svcmd_SendMessage }, - { "chat", qtrue, Svcmd_SendMessage }, { "cp", qtrue, Svcmd_CenterPrint_f }, + { "say_team", qtrue, Svcmd_TeamMessage_f }, + { "say", qtrue, Svcmd_MessageWrapper }, + { "chat", qtrue, Svcmd_Chat_f }, { "m", qtrue, Svcmd_MessageWrapper }, { "a", qtrue, Svcmd_MessageWrapper } }; |