summaryrefslogtreecommitdiff
path: root/network.c
diff options
context:
space:
mode:
Diffstat (limited to 'network.c')
-rw-r--r--network.c90
1 files changed, 64 insertions, 26 deletions
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) {