(svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
authortruelight
Sun, 19 Dec 2004 15:14:55 +0000
changeset 722 d0b031be5232
parent 721 20591395836b
child 723 11e778cac61c
(svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
console_cmds.c
lang/english.txt
main_gui.c
network.c
network_client.c
network_data.h
network_gui.c
network_server.c
--- a/console_cmds.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/console_cmds.c	Sun Dec 19 15:14:55 2004 +0000
@@ -712,7 +712,7 @@
 				SEND_COMMAND(PACKET_CLIENT_SET_NAME)(argv[2]);
 			else {
 				if (NetworkFindName(argv[2])) {
-					NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, ci->client_name, argv[2]);
+					NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, argv[2]);
 					ttd_strlcpy(ci->client_name, argv[2], sizeof(ci->client_name));
 					NetworkUpdateClientInfo(NETWORK_SERVER_INDEX);
 				}
--- a/lang/english.txt	Sun Dec 19 14:42:17 2004 +0000
+++ b/lang/english.txt	Sun Dec 19 15:14:55 2004 +0000
@@ -1351,10 +1351,28 @@
 STR_NETWORK_ERR_CLIENT_KICKED					:kicked by server
 ############ End of leave-in-this-order
 STR_NETWORK_CLIENT_JOINED					:has joined the game
-STR_NETWORK_GIVE_MONEY						:gave you some money ({CURRENCY})
-STR_NETWORK_SERVER_SHUTDOWN					:{WHITE} The server closed the session
+STR_NETWORK_GIVE_MONEY						:gave your company some money ({CURRENCY})
+STR_NETWORK_GAVE_MONEY_AWAY				:you gave {STRING} some money ({CURRENCY})
+STR_NETWORK_CHAT_COMPANY					:[Team] {STRING}:
+STR_NETWORK_CHAT_TO_COMPANY				:[Team] To {STRING}:
+STR_NETWORK_CHAT_CLIENT						:[Private] {STRING}:
+STR_NETWORK_CHAT_TO_CLIENT				:[Private] To {STRING}:
+STR_NETWORK_CHAT_ALL							:[All] {STRING}:
+STR_NETWORK_NAME_CHANGE						:has changed his name to
+STR_NETWORK_SERVER_SHUTDOWN				:{WHITE} The server closed the session
 STR_NETWORK_SERVER_REBOOT					:{WHITE} The server is restarting...{}Please wait...
 
+STR_NETWORK_SERVER								:Server
+STR_NETWORK_CLIENT								:Client
+
+STR_NETWORK_CLIENTLIST_NONE							:(none)
+STR_NETWORK_CLIENTLIST_KICK							:Kick
+STR_NETWORK_CLIENTLIST_GIVE_MONEY				:Give money
+STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL			:Speak to all
+STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY	:Speak to company
+STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT	:Private message
+
+
 STR_NETWORK_SEND						:{BLACK}Send
 
 ############ end network gui strings
--- a/main_gui.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/main_gui.c	Sun Dec 19 15:14:55 2004 +0000
@@ -91,8 +91,7 @@
 		if (!DoCommandP(0, money, id, NULL, CMD_GIVE_MONEY)) break;
 
 		// Inform the player of this action
-		SetDParam(0, money);
-		GetString(msg, STR_NETWORK_GIVE_MONEY);
+		snprintf(msg, 100, "%d", money);
 
 		if (!_network_server)
 			SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_PLAYER, id + 1, msg);
--- a/network.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/network.c	Sun Dec 19 15:14:55 2004 +0000
@@ -38,6 +38,7 @@
 /* Some externs / forwards */
 extern void ShowJoinStatusWindow();
 extern void StateGameLoop();
+extern uint GetCurrentCurrencyRate();
 
 // Function that looks up the CI for a given client-index
 NetworkClientInfo *NetworkFindClientInfoFromIndex(uint16 client_index)
@@ -76,50 +77,88 @@
 
 // This puts a text-message to the console, or in the future, the chat-box,
 //  (to keep it all a bit more general)
-void CDECL NetworkTextMessage(NetworkAction action, uint16 color, const char *name, const char *str, ...)
+// If 'self_send' is true, this is the client who is sending the message
+void CDECL NetworkTextMessage(NetworkAction action, uint16 color, bool self_send, const char *name, const char *str, ...)
 {
 	char buf[1024];
 	va_list va;
 	const int duration = 10; // Game days the messages stay visible
+	char message[1024];
+	char temp[1024];
+	StringID TempStr = STR_NULL;
 
 	va_start(va, str);
 	vsprintf(buf, str, va);
 	va_end(va);
 
 	switch (action) {
-		case NETWORK_ACTION_JOIN_LEAVE:
-			IConsolePrintF(color, "*** %s %s", name, buf);
-			AddTextMessage(color, duration, "*** %s %s", name, buf);
+		case NETWORK_ACTION_JOIN:
+			GetString(temp, STR_NETWORK_CLIENT_JOINED);
+			snprintf(message, sizeof(message), "*** %s %s", name, temp);
+			break;
+		case NETWORK_ACTION_LEAVE:
+			GetString(temp, STR_NETWORK_ERR_LEFT);
+			snprintf(message, sizeof(message), "*** %s %s (%s)", name, temp, buf);
 			break;
 		case NETWORK_ACTION_GIVE_MONEY:
-			IConsolePrintF(color, "*** %s %s", name, buf);
-			AddTextMessage(color, duration, "*** %s %s", name, buf);
+			if (self_send) {
+				TempStr = AllocateName(name, 0);
+				SetDParam(0, TempStr);
+				SetDParam(1, atoi(buf));
+				GetString(temp, STR_NETWORK_GAVE_MONEY_AWAY);
+				DeleteName(TempStr);
+				snprintf(message, sizeof(message), "*** %s", temp);
+			} else {
+				SetDParam(0, atoi(buf));
+				GetString(temp, STR_NETWORK_GIVE_MONEY);
+				snprintf(message, sizeof(message), "*** %s %s", name, temp);
+			}
 			break;
 		case NETWORK_ACTION_CHAT_PLAYER:
-			IConsolePrintF(color, "[Team] %s: %s", name, buf);
-			AddTextMessage(color, duration, "[Team] %s: %s", name, buf);
+			if (self_send) {
+				TempStr = AllocateName(name, 0);
+				SetDParam(0, TempStr);
+				GetString(temp, STR_NETWORK_CHAT_TO_COMPANY);
+				DeleteName(TempStr);
+				snprintf(message, sizeof(message), "%s %s", temp, buf);
+			} else {
+				TempStr = AllocateName(name, 0);
+				SetDParam(0, TempStr);
+				GetString(temp, STR_NETWORK_CHAT_COMPANY);
+				DeleteName(TempStr);
+				snprintf(message, sizeof(message), "%s %s", temp, buf);
+			}
 			break;
 		case NETWORK_ACTION_CHAT_CLIENT:
-			IConsolePrintF(color, "[Private] %s: %s", name, buf);
-			AddTextMessage(color, duration, "[Private] %s: %s", name, buf);
-			break;
-		case NETWORK_ACTION_CHAT_TO_CLIENT:
-			IConsolePrintF(color, "[Private] To %s: %s", name, buf);
-			AddTextMessage(color, duration, "[Private] To %s: %s", name, buf);
-			break;
-		case NETWORK_ACTION_CHAT_TO_PLAYER:
-			IConsolePrintF(color, "[Team] To %s: %s", name, buf);
-			AddTextMessage(color, duration, "[Team] To %s: %s", name, buf);
+			if (self_send) {
+				TempStr = AllocateName(name, 0);
+				SetDParam(0, TempStr);
+				GetString(temp, STR_NETWORK_CHAT_TO_CLIENT);
+				DeleteName(TempStr);
+				snprintf(message, sizeof(message), "%s %s", temp, buf);
+			} else {
+				TempStr = AllocateName(name, 0);
+				SetDParam(0, TempStr);
+				GetString(temp, STR_NETWORK_CHAT_CLIENT);
+				DeleteName(TempStr);
+				snprintf(message, sizeof(message), "%s %s", temp, buf);
+			}
 			break;
 		case NETWORK_ACTION_NAME_CHANGE:
-			IConsolePrintF(color, "*** %s changed his name to %s", name, buf);
-			AddTextMessage(color, duration, "*** %s changed his name to %s", name, buf);
+			GetString(temp, STR_NETWORK_NAME_CHANGE);
+			snprintf(message, sizeof(message), "*** %s %s %s", name, temp, buf);
 			break;
 		default:
-			IConsolePrintF(color, "[All] %s: %s", name, buf);
-			AddTextMessage(color, duration, "[All] %s: %s", name, buf);
+			TempStr = AllocateName(name, 0);
+			SetDParam(0, TempStr);
+			GetString(temp, STR_NETWORK_CHAT_ALL);
+			DeleteName(TempStr);
+			snprintf(message, sizeof(message), "%s %s", temp, buf);
 			break;
 	}
+
+	IConsolePrintF(color, message);
+	AddTextMessage(color, duration, message);
 }
 
 // Calculate the frame-lag of a client
@@ -444,16 +483,15 @@
 	if (!cs->quited && _network_server && cs->status > STATUS_INACTIVE) {
 		// We did not receive a leave message from this client...
 		NetworkErrorCode errorno = NETWORK_ERROR_CONNECTION_LOST;
-		char str1[100], str2[100];
+		char str[100];
 		char client_name[NETWORK_NAME_LENGTH];
 		NetworkClientState *new_cs;
 
 		NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-		GetString(str1, STR_NETWORK_ERR_LEFT);
-		GetString(str2, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
+		GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
 
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, client_name, "%s (%s)", str1, str2);
+		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, client_name, str);
 
 		// Inform other clients of this... strange leaving ;)
 		FOR_ALL_CLIENTS(new_cs) {
--- a/network_client.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/network_client.c	Sun Dec 19 15:14:55 2004 +0000
@@ -332,7 +332,7 @@
 	if (ci != NULL) {
 		if (playas == ci->client_playas && strcmp(name, ci->client_name) != 0) {
 			// Client name changed, display the change
-			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, ci->client_name, name);
+			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, name);
 		} else if (playas != ci->client_playas) {
 			// The player changed from client-player..
 			// Do not display that for now
@@ -341,6 +341,8 @@
 		ci->client_playas = playas;
 		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
 
+		InvalidateWindow(WC_CLIENT_LIST, 0);
+
 		return NETWORK_RECV_STATUS_OKAY;
 	}
 
@@ -353,6 +355,8 @@
 		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
 		ttd_strlcpy(ci->unique_id, unique_id, sizeof(ci->unique_id));
 
+		InvalidateWindow(WC_CLIENT_LIST, 0);
+
 		return NETWORK_RECV_STATUS_OKAY;
 	}
 
@@ -596,45 +600,60 @@
 	NetworkClientInfo *ci, *ci_to;
 	uint16 index;
 	char name[NETWORK_NAME_LENGTH];
+	bool self_send;
 
 	index = NetworkRecv_uint16(p);
+	self_send = NetworkRecv_uint8(p);
 	NetworkRecv_string(p, msg, MAX_TEXT_MSG_LEN);
 
 	ci_to = NetworkFindClientInfoFromIndex(index);
 	if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY;
 
-	if (action == NETWORK_ACTION_CHAT_TO_CLIENT) {
-		snprintf(name, sizeof(name), "%s", ci_to->client_name);
-		ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
-	} else if (action == NETWORK_ACTION_CHAT_TO_PLAYER) {
-		GetString(name, DEREF_PLAYER(ci_to->client_playas-1)->name_1);
-		ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
+	/* Do we display the action locally? */
+	if (self_send) {
+		switch (action) {
+			case NETWORK_ACTION_CHAT_CLIENT:
+				/* For speak to client we need the client-name */
+				snprintf(name, sizeof(name), "%s", ci_to->client_name);
+				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
+				break;
+			case NETWORK_ACTION_CHAT_PLAYER:
+			case NETWORK_ACTION_GIVE_MONEY:
+				/* For speak to player or give money, we need the player-name */
+				GetString(name, DEREF_PLAYER(ci_to->client_playas-1)->name_1);
+				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
+				break;
+			default:
+				/* This should never happen */
+				NOT_REACHED();
+				break;
+		}
 	} else {
+		/* Display message from somebody else */
 		snprintf(name, sizeof(name), "%s", ci_to->client_name);
 		ci = ci_to;
 	}
 
 	if (ci != NULL)
-		NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), name, "%s", msg);
+		NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), self_send, name, "%s", msg);
 	return NETWORK_RECV_STATUS_OKAY;
 }
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT)
 {
 	int errorno;
-	char str1[100], str2[100];
+	char str[100];
 	uint16 index;
 	NetworkClientInfo *ci;
 
 	index = NetworkRecv_uint16(p);
 	errorno = NetworkRecv_uint8(p);
 
-	GetString(str1, STR_NETWORK_ERR_LEFT);
-	GetString(str2, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
+	GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
 
 	ci = NetworkFindClientInfoFromIndex(index);
 	if (ci != NULL) {
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, ci->client_name, "%s (%s)", str1, str2);
+		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, str);
 
 		// The client is gone, give the NetworkClientInfo free
 		ci->client_index = NETWORK_EMPTY_INDEX;
@@ -647,18 +666,16 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_QUIT)
 {
-	char str1[100], str2[100];
+	char str[100];
 	uint16 index;
 	NetworkClientInfo *ci;
 
 	index = NetworkRecv_uint16(p);
-	NetworkRecv_string(p, str2, 100);
-
-	GetString(str1, STR_NETWORK_ERR_LEFT);
+	NetworkRecv_string(p, str, 100);
 
 	ci = NetworkFindClientInfoFromIndex(index);
 	if (ci != NULL) {
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, ci->client_name, "%s (%s)", str1, str2);
+		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, str);
 
 		// The client is gone, give the NetworkClientInfo free
 		ci->client_index = NETWORK_EMPTY_INDEX;
@@ -674,18 +691,14 @@
 
 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_JOIN)
 {
-	char str1[100];
 	uint16 index;
 	NetworkClientInfo *ci;
 
 	index = NetworkRecv_uint16(p);
 
-	GetString(str1, STR_NETWORK_CLIENT_JOINED);
-
 	ci = NetworkFindClientInfoFromIndex(index);
-	if (ci != NULL) {
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, ci->client_name, "%s", str1);
-	}
+	if (ci != NULL)
+		NetworkTextMessage(NETWORK_ACTION_JOIN, 1, false, ci->client_name, "");
 
 	InvalidateWindow(WC_CLIENT_LIST, 0);
 
--- a/network_data.h	Sun Dec 19 14:42:17 2004 +0000
+++ b/network_data.h	Sun Dec 19 15:14:55 2004 +0000
@@ -91,12 +91,11 @@
 
 // Actions that can be used for NetworkTextMessage
 typedef enum {
-	NETWORK_ACTION_JOIN_LEAVE,
+	NETWORK_ACTION_JOIN,
+	NETWORK_ACTION_LEAVE,
 	NETWORK_ACTION_CHAT,
 	NETWORK_ACTION_CHAT_PLAYER,
 	NETWORK_ACTION_CHAT_CLIENT,
-	NETWORK_ACTION_CHAT_TO_CLIENT,
-	NETWORK_ACTION_CHAT_TO_PLAYER,
 	NETWORK_ACTION_GIVE_MONEY,
 	NETWORK_ACTION_NAME_CHANGE,
 } NetworkAction;
@@ -212,7 +211,7 @@
 
 // from network.c
 void NetworkCloseClient(NetworkClientState *cs);
-void CDECL NetworkTextMessage(NetworkAction action, uint16 color, const char *name, const char *str, ...);
+void CDECL NetworkTextMessage(NetworkAction action, uint16 color, bool self_send, const char *name, const char *str, ...);
 void NetworkGetClientName(char *clientname, size_t size, const NetworkClientState *cs);
 uint NetworkCalculateLag(const NetworkClientState *cs);
 byte NetworkGetCurrentLanguageIndex();
--- a/network_gui.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/network_gui.c	Sun Dec 19 15:14:55 2004 +0000
@@ -983,22 +983,22 @@
 
 	i = 0;
 	if (_network_own_client_index != ci->client_index) {
-		sprintf(_clientlist_action[i],"Private message");
+		GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT);
 		_clientlist_proc[i++] = &ClientList_SpeakToClient;
 	}
 
 	if (ci->client_playas >= 1 && ci->client_playas <= MAX_PLAYERS) {
-		sprintf(_clientlist_action[i],"Speak to company");
+		GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY);
 		_clientlist_proc[i++] = &ClientList_SpeakToPlayer;
 	}
-	sprintf(_clientlist_action[i],"Speak to all");
+	GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL);
 	_clientlist_proc[i++] = &ClientList_SpeakToAll;
 
 	if (_network_own_client_index != ci->client_index) {
 		if (_network_playas >= 1 && _network_playas <= MAX_PLAYERS) {
 			// We are no spectator
 			if (ci->client_playas >= 1 && ci->client_playas <= MAX_PLAYERS) {
-				sprintf(_clientlist_action[i],"Give money");
+				GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_GIVE_MONEY);
 				_clientlist_proc[i++] = &ClientList_GiveMoney;
 			}
 		}
@@ -1006,7 +1006,7 @@
 
 	// A server can kick clients (but not hisself)
 	if (_network_server && _network_own_client_index != ci->client_index) {
-		sprintf(_clientlist_action[i],"Kick");
+		GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK);
 		_clientlist_proc[i++] = &ClientList_Kick;
 
 /*		sprintf(clientlist_action[i],"Ban");
@@ -1014,7 +1014,7 @@
 	}
 
 	if (i == 0) {
-		sprintf(_clientlist_action[i],"(none)");
+		GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_NONE);
 		_clientlist_proc[i++] = &ClientList_None;
 	}
 
@@ -1116,9 +1116,9 @@
 				colour = 0x10;
 
 			if (ci->client_index == NETWORK_SERVER_INDEX) {
-				DoDrawString("Server", 4, y, colour);
+				DrawString(4, y, STR_NETWORK_SERVER, colour);
 			} else
-				DoDrawString("Client", 4, y, colour);
+				DrawString(4, y, STR_NETWORK_CLIENT, colour);
 
 			// Filter out spectators
 			if (ci->client_playas > 0 && ci->client_playas <= MAX_PLAYERS)
--- a/network_server.c	Sun Dec 19 14:42:17 2004 +0000
+++ b/network_server.c	Sun Dec 19 15:14:55 2004 +0000
@@ -131,7 +131,7 @@
 	//
 
 	NetworkClientState *new_cs;
-	char str1[100], str2[100];
+	char str[100];
 	char client_name[NETWORK_NAME_LENGTH];
 
 	Packet *p = NetworkSend_Init(PACKET_SERVER_ERROR);
@@ -142,12 +142,11 @@
 	if (cs->status > STATUS_AUTH) {
 		NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-		GetString(str1, STR_NETWORK_ERR_LEFT);
-		GetString(str2, STR_NETWORK_ERR_CLIENT_GENERAL + error);
+		GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + error);
 
-		DEBUG(net, 2)("[NET] %s made an error (%s) and his connection is closed", client_name, str2);
+		DEBUG(net, 2)("[NET] %s made an error (%s) and his connection is closed", client_name, str);
 
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, client_name, "%s (%s)", str1, str2);
+		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, client_name, str);
 
 		FOR_ALL_CLIENTS(new_cs) {
 			if (new_cs->status > STATUS_AUTH && new_cs != cs) {
@@ -472,7 +471,7 @@
 	NetworkSend_Packet(p, cs);
 }
 
-DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_CHAT)(NetworkClientState *cs, NetworkAction action, uint16 client_index, const char *msg)
+DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_CHAT)(NetworkClientState *cs, NetworkAction action, uint16 client_index, bool self_send, const char *msg)
 {
 	//
 	// Packet: SERVER_CHAT
@@ -487,6 +486,7 @@
 
 	NetworkSend_uint8(p, action);
 	NetworkSend_uint16(p, client_index);
+	NetworkSend_uint8(p, self_send);
 	NetworkSend_string(p, msg);
 
 	NetworkSend_Packet(p, cs);
@@ -710,13 +710,11 @@
 	// Client has the map, now start syncing
 	if (cs->status == STATUS_DONE_MAP && !cs->quited) {
 		char client_name[NETWORK_NAME_LENGTH];
-		char str[100];
 		NetworkClientState *new_cs;
-		GetString(str, STR_NETWORK_CLIENT_JOINED);
 
 		NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-		NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, client_name, str);
+		NetworkTextMessage(NETWORK_ACTION_JOIN, 1, false, client_name, "");
 
 		// Mark the client as pre-active, and wait for an ACK
 		//  so we know he is done loading and in sync with us
@@ -834,7 +832,7 @@
 	//  to us. Display the error and report it to the other clients
 	NetworkClientState *new_cs;
 	byte errorno = NetworkRecv_uint8(p);
-	char str1[100], str2[100];
+	char str[100];
 	char client_name[NETWORK_NAME_LENGTH];
 
 	// The client was never joined.. thank the client for the packet, but ignore it
@@ -845,12 +843,11 @@
 
 	NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-	GetString(str1, STR_NETWORK_ERR_LEFT);
-	GetString(str2, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
+	GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
 
-	DEBUG(net, 2)("[NET] %s reported an error and is closing his connection (%s)", client_name, str2);
+	DEBUG(net, 2)("[NET] %s reported an error and is closing his connection (%s)", client_name, str);
 
-	NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, client_name, "%s (%s)", str1, str2);
+	NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, client_name, str);
 
 	FOR_ALL_CLIENTS(new_cs) {
 		if (new_cs->status > STATUS_AUTH) {
@@ -866,7 +863,7 @@
 	// The client wants to leave. Display this and report it to the other
 	//  clients.
 	NetworkClientState *new_cs;
-	char str1[100], str2[100];
+	char str[100];
 	char client_name[NETWORK_NAME_LENGTH];
 
 	// The client was never joined.. thank the client for the packet, but ignore it
@@ -875,17 +872,15 @@
 		return;
 	}
 
-	NetworkRecv_string(p, str2, 100);
+	NetworkRecv_string(p, str, 100);
 
 	NetworkGetClientName(client_name, sizeof(client_name), cs);
 
-	GetString(str1, STR_NETWORK_ERR_LEFT);
-
-	NetworkTextMessage(NETWORK_ACTION_JOIN_LEAVE, 1, client_name, "%s (%s)", str1, str2);
+	NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, client_name, str);
 
 	FOR_ALL_CLIENTS(new_cs) {
 		if (new_cs->status > STATUS_AUTH) {
-			SEND_COMMAND(PACKET_SERVER_QUIT)(new_cs, cs->index, str2);
+			SEND_COMMAND(PACKET_SERVER_QUIT)(new_cs, cs->index, str);
 		}
 	}
 
@@ -913,14 +908,17 @@
 
 	switch (desttype) {
 	case DESTTYPE_CLIENT:
-		if (dest == 1) {
+		/* Are we sending to the server? */
+		if (dest == NETWORK_SERVER_INDEX) {
 			ci = NetworkFindClientInfoFromIndex(from_index);
+			/* Display the text locally, and that is it */
 			if (ci != NULL)
-				NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), ci->client_name, "%s", msg);
+				NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), false, ci->client_name, "%s", msg);
 		} else {
+			/* Else find the client to send the message to */
 			FOR_ALL_CLIENTS(cs) {
 				if (cs->index == dest) {
-					SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, msg);
+					SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, false, msg);
 					break;
 				}
 			}
@@ -928,15 +926,15 @@
 
 		// Display the message locally (so you know you have sent it)
 		if (from_index != dest) {
-			if (from_index == 1) {
+			if (from_index == NETWORK_SERVER_INDEX) {
 				ci = NetworkFindClientInfoFromIndex(from_index);
 				ci_to = NetworkFindClientInfoFromIndex(dest);
 				if (ci != NULL && ci_to != NULL)
-					NetworkTextMessage(NETWORK_ACTION_CHAT_TO_CLIENT, GetDrawStringPlayerColor(ci->client_playas-1), ci_to->client_name, "%s", msg);
+					NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), true, ci_to->client_name, "%s", msg);
 			} else {
 				FOR_ALL_CLIENTS(cs) {
 					if (cs->index == from_index) {
-						SEND_COMMAND(PACKET_SERVER_CHAT)(cs, NETWORK_ACTION_CHAT_TO_CLIENT, dest, msg);
+						SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, dest, true, msg);
 						break;
 					}
 				}
@@ -946,10 +944,11 @@
 	case DESTTYPE_PLAYER: {
 		bool show_local = true; // If this is false, the message is already displayed
 														// on the client who did sent it.
+		/* Find all clients that belong to this player */
 		FOR_ALL_CLIENTS(cs) {
 			ci = DEREF_CLIENT_INFO(cs);
 			if (ci->client_playas == dest) {
-				SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, msg);
+				SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, false, msg);
 				if (cs->index == from_index)
 					show_local = false;
 			}
@@ -957,7 +956,7 @@
 		ci = NetworkFindClientInfoFromIndex(from_index);
 		ci_own = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
 		if (ci != NULL && ci_own != NULL && ci_own->client_playas == dest) {
-			NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), ci->client_name, "%s", msg);
+			NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), false, ci->client_name, "%s", msg);
 			if (from_index == NETWORK_SERVER_INDEX)
 				show_local = false;
 		}
@@ -967,11 +966,11 @@
 			if (from_index == NETWORK_SERVER_INDEX) {
 				char name[NETWORK_NAME_LENGTH];
 				GetString(name, DEREF_PLAYER(ci->client_playas-1)->name_1);
-				NetworkTextMessage(NETWORK_ACTION_CHAT_TO_PLAYER, GetDrawStringPlayerColor(ci->client_playas-1), name, "%s", msg);
+				NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), true, name, "%s", msg);
 			} else {
 				FOR_ALL_CLIENTS(cs) {
 					if (cs->index == from_index) {
-						SEND_COMMAND(PACKET_SERVER_CHAT)(cs, NETWORK_ACTION_CHAT_TO_PLAYER, from_index, msg);
+						SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, true, msg);
 					}
 				}
 			}
@@ -983,11 +982,11 @@
 		/* fall-through to next case */
 	case DESTTYPE_BROADCAST:
 		FOR_ALL_CLIENTS(cs) {
-			SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, msg);
+			SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_index, false, msg);
 		}
 		ci = NetworkFindClientInfoFromIndex(from_index);
 		if (ci != NULL)
-			NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), ci->client_name, "%s", msg);
+			NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), false, ci->client_name, "%s", msg);
 		break;
 	}
 }
@@ -1028,7 +1027,7 @@
 	if (ci != NULL) {
 		// Display change
 		if (NetworkFindName(name)) {
-			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, ci->client_name, name);
+			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, name);
 			ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
 			NetworkUpdateClientInfo(ci->client_index);
 		}