diff --git a/src/lang/english.txt b/src/lang/english.txt index 1fb5792f57..d833589e41 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2187,6 +2187,8 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {RAW_STRING STR_NETWORK_MESSAGE_NAME_CHANGE :*** {RAW_STRING} has changed his/her name to {RAW_STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {RAW_STRING} gave your company {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** You gave {1:RAW_STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_MONEY_GIVEN :*** {RAW_STRING} gave {1:RAW_STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_MONEY_GIVE_SRC_DESCRIPTION :{RAW_STRING} ({COMPANY}) STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}The server closed the session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}The server is restarting...{}Please wait... diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 0a3d55fdbd..1494d152b1 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -57,10 +57,16 @@ void CcGiveMoney(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2 SetDParam(0, p2); GetString(msg, STR_COMPANY_NAME, lastof(msg)); + /* + * bits 31-16: source company + * bits 15-0: target company + */ + uint64 auxdata = (p2 & 0xFFFF) | (((uint64) _local_company) << 16); + if (!_network_server) { - NetworkClientSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, p1); + NetworkClientSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_BROADCAST_SS, p2, msg, NetworkTextMessageData(p1, auxdata)); } else { - NetworkServerSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, CLIENT_ID_SERVER, p1); + NetworkServerSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_BROADCAST_SS, p2, msg, CLIENT_ID_SERVER, NetworkTextMessageData(p1, auxdata)); } #endif /* ENABLE_NETWORK */ } diff --git a/src/network/network.cpp b/src/network/network.cpp index 204c24ca07..6705153f46 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -232,6 +232,7 @@ bool NetworkCompanyIsPassworded(CompanyID company_id) * If 'self_send' is true, this is the client who is sending the message */ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str, NetworkTextMessageData data) { + char message_src[256]; StringID strid; switch (action) { case NETWORK_ACTION_SERVER_MESSAGE: @@ -257,7 +258,22 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, break; case NETWORK_ACTION_LEAVE: strid = STR_NETWORK_MESSAGE_CLIENT_LEFT; break; case NETWORK_ACTION_NAME_CHANGE: strid = STR_NETWORK_MESSAGE_NAME_CHANGE; break; - case NETWORK_ACTION_GIVE_MONEY: strid = self_send ? STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY : STR_NETWORK_MESSAGE_GIVE_MONEY; break; + + case NETWORK_ACTION_GIVE_MONEY: + SetDParamStr(0, name); + SetDParam(1, data.auxdata >> 16); + GetString(message_src, STR_NETWORK_MESSAGE_MONEY_GIVE_SRC_DESCRIPTION, lastof(message_src)); + name = message_src; + if (self_send) { + strid = STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY; + } else if ((CompanyID) (data.auxdata & 0xFFFF) == _local_company) { + strid = STR_NETWORK_MESSAGE_GIVE_MONEY; + } else { + strid = STR_NETWORK_MESSAGE_MONEY_GIVEN; + SetDParam(3, data.auxdata & 0xFFFF); + } + break; + case NETWORK_ACTION_CHAT_COMPANY: strid = self_send ? STR_NETWORK_CHAT_TO_COMPANY : STR_NETWORK_CHAT_COMPANY; break; case NETWORK_ACTION_CHAT_CLIENT: strid = self_send ? STR_NETWORK_CHAT_TO_CLIENT : STR_NETWORK_CHAT_CLIENT; break; default: strid = STR_NETWORK_CHAT_ALL; break;