summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--console_cmds.c2
-rw-r--r--lang/english.txt22
-rw-r--r--main_gui.c3
-rw-r--r--network.c90
-rw-r--r--network_client.c59
-rw-r--r--network_data.h7
-rw-r--r--network_gui.c16
-rw-r--r--network_server.c65
8 files changed, 165 insertions, 99 deletions
diff --git a/console_cmds.c b/console_cmds.c
index a3118ada6..e412aa0fd 100644
--- a/console_cmds.c
+++ b/console_cmds.c
@@ -712,7 +712,7 @@ DEF_CONSOLE_CMD(ConSet) {
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);
}
diff --git a/lang/english.txt b/lang/english.txt
index 13f23056f..57306926d 100644
--- a/lang/english.txt
+++ b/lang/english.txt
@@ -1351,10 +1351,28 @@ STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :wrong player-id in DoCommand
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
diff --git a/main_gui.c b/main_gui.c
index 1f1b01712..6994767ed 100644
--- a/main_gui.c
+++ b/main_gui.c
@@ -91,8 +91,7 @@ void HandleOnEditText(WindowEvent *e) {
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);
diff --git a/network.c b/network.c
index 85ad4bdb2..7d77901b8 100644
--- a/network.c
+++ b/network.c
@@ -38,6 +38,7 @@ static uint16 _network_client_index = NETWORK_SERVER_INDEX + 1;
/* 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 @@ void NetworkGetClientName(char *client_name, size_t size, const NetworkClientSta
// 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 @@ void NetworkCloseClient(NetworkClientState *cs)
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) {
diff --git a/network_client.c b/network_client.c
index 524a7b018..4730aab5e 100644
--- a/network_client.c
+++ b/network_client.c
@@ -332,7 +332,7 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
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 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
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 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
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 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CHAT)
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_ERROR_QUIT)
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_QUIT)
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);
diff --git a/network_data.h b/network_data.h
index a29b1ac1f..6839cfecd 100644
--- a/network_data.h
+++ b/network_data.h
@@ -91,12 +91,11 @@ typedef enum {
// 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 @@ void NetworkAddCommandQueue(NetworkClientState *cs, CommandPacket *cp);
// 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();
diff --git a/network_gui.c b/network_gui.c
index 3b76bc067..2e92f5db1 100644
--- a/network_gui.c
+++ b/network_gui.c
@@ -983,22 +983,22 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
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 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
// 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 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
}
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 @@ static void ClientListWndProc(Window *w, WindowEvent *e)
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)
diff --git a/network_server.c b/network_server.c
index a57e5d938..dcbd733ba 100644
--- a/network_server.c
+++ b/network_server.c
@@ -131,7 +131,7 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_ERROR)(NetworkClientState *cs, Netwo
//
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 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_ERROR)(NetworkClientState *cs, Netwo
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 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_COMMAND)(NetworkClientState *cs, Com
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 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_CHAT)(NetworkClientState *cs, Networ
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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_MAP_OK)
// 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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_ERROR)
// 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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_ERROR)
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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_QUIT)
// 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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_QUIT)
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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
// 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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
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 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
/* 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 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_SET_NAME)
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);
}