summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/game')
-rw-r--r--src/game/g_cmds.c20
-rw-r--r--src/game/g_local.h1
-rw-r--r--src/game/g_svcmds.c44
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 }
};