From ce3ec3ceef5169d250ff2b3d8a3726edef8a5944 Mon Sep 17 00:00:00 2001
From: Zack Middleton <zturtleman@gmail.com>
Date: Thu, 5 Apr 2012 22:43:32 +0000
Subject: [PATCH] #5453 - Tell command for server.

---
 README                 |  2 ++
 code/server/sv_ccmds.c | 40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/README b/README
index e8d4c936..0a2f360e 100644
--- a/README
+++ b/README
@@ -298,6 +298,8 @@ New commands
 
   which <filename/path>   - print out the path on disk to a loaded item
 
+  tell <client num> <msg> - send message to a single client (new to server)
+
 
 --------------------------------------------------------- README for Users -----
 
diff --git a/code/server/sv_ccmds.c b/code/server/sv_ccmds.c
index 8ddb94dc..5f5400b6 100644
--- a/code/server/sv_ccmds.c
+++ b/code/server/sv_ccmds.c
@@ -1164,6 +1164,45 @@ static void SV_ConSay_f(void) {
 	SV_SendServerCommand(NULL, "chat \"%s\"", text);
 }
 
+/*
+==================
+SV_ConTell_f
+==================
+*/
+static void SV_ConTell_f(void) {
+	char	*p;
+	char	text[1024];
+	client_t	*cl;
+
+	// make sure server is running
+	if ( !com_sv_running->integer ) {
+		Com_Printf( "Server is not running.\n" );
+		return;
+	}
+
+	if ( Cmd_Argc() < 3 ) {
+		Com_Printf ("Usage: tell <client number> <text>\n");
+		return;
+	}
+
+	cl = SV_GetPlayerByNum();
+	if ( !cl ) {
+		return;
+	}
+
+	strcpy (text, "console_tell: ");
+	p = Cmd_ArgsFrom(2);
+
+	if ( *p == '"' ) {
+		p++;
+		p[strlen(p)-1] = 0;
+	}
+
+	strcat(text, p);
+
+	SV_SendServerCommand(cl, "chat \"%s\"", text);
+}
+
 
 /*
 ==================
@@ -1299,6 +1338,7 @@ void SV_AddOperatorCommands( void ) {
 	Cmd_AddCommand ("killserver", SV_KillServer_f);
 	if( com_dedicated->integer ) {
 		Cmd_AddCommand ("say", SV_ConSay_f);
+		Cmd_AddCommand ("tell", SV_ConTell_f);
 	}
 	
 	Cmd_AddCommand("rehashbans", SV_RehashBans_f);