mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-19 04:53:12 +01:00
fix #3025: Wrong localisation of server messages
This commit is contained in:
@@ -77,6 +77,7 @@ enum {
|
||||
NETWORK_COMMAND_GAMEINFO,
|
||||
NETWORK_COMMAND_SHOWERROR,
|
||||
NETWORK_COMMAND_GROUPLIST,
|
||||
NETWORK_COMMAND_EVENT,
|
||||
NETWORK_COMMAND_MAX,
|
||||
NETWORK_COMMAND_INVALID = -1
|
||||
};
|
||||
@@ -94,6 +95,11 @@ enum {
|
||||
MASTER_SERVER_STATUS_INTERNAL_ERROR = 500
|
||||
};
|
||||
|
||||
enum {
|
||||
SERVER_EVENT_PLAYER_JOINED,
|
||||
SERVER_EVENT_PLAYER_DISCONNECTED,
|
||||
};
|
||||
|
||||
constexpr int MASTER_SERVER_REGISTER_TIME = 120 * 1000; // 2 minutes
|
||||
constexpr int MASTER_SERVER_HEARTBEAT_TIME = 60 * 1000; // 1 minute
|
||||
|
||||
@@ -566,6 +572,7 @@ Network::Network()
|
||||
client_command_handlers[NETWORK_COMMAND_SETDISCONNECTMSG] = &Network::Client_Handle_SETDISCONNECTMSG;
|
||||
client_command_handlers[NETWORK_COMMAND_SHOWERROR] = &Network::Client_Handle_SHOWERROR;
|
||||
client_command_handlers[NETWORK_COMMAND_GROUPLIST] = &Network::Client_Handle_GROUPLIST;
|
||||
client_command_handlers[NETWORK_COMMAND_EVENT] = &Network::Client_Handle_EVENT;
|
||||
server_command_handlers.resize(NETWORK_COMMAND_MAX, 0);
|
||||
server_command_handlers[NETWORK_COMMAND_AUTH] = &Network::Server_Handle_AUTH;
|
||||
server_command_handlers[NETWORK_COMMAND_CHAT] = &Network::Server_Handle_CHAT;
|
||||
@@ -1501,6 +1508,25 @@ void Network::Server_Send_GROUPLIST(NetworkConnection& connection)
|
||||
connection.QueuePacket(std::move(packet));
|
||||
}
|
||||
|
||||
void Network::Server_Send_EVENT_PLAYER_JOINED(const char *playerName)
|
||||
{
|
||||
std::unique_ptr<NetworkPacket> packet = std::move(NetworkPacket::Allocate());
|
||||
*packet << (uint32)NETWORK_COMMAND_EVENT;
|
||||
*packet << (uint16)SERVER_EVENT_PLAYER_JOINED;
|
||||
packet->WriteString(playerName);
|
||||
SendPacketToClients(*packet);
|
||||
}
|
||||
|
||||
void Network::Server_Send_EVENT_PLAYER_DISCONNECTED(const char *playerName, const char *reason)
|
||||
{
|
||||
std::unique_ptr<NetworkPacket> packet = std::move(NetworkPacket::Allocate());
|
||||
*packet << (uint32)NETWORK_COMMAND_EVENT;
|
||||
*packet << (uint16)SERVER_EVENT_PLAYER_DISCONNECTED;
|
||||
packet->WriteString(playerName);
|
||||
packet->WriteString(reason);
|
||||
SendPacketToClients(*packet);
|
||||
}
|
||||
|
||||
bool Network::ProcessConnection(NetworkConnection& connection)
|
||||
{
|
||||
int packetStatus;
|
||||
@@ -1606,7 +1632,7 @@ void Network::RemoveClient(std::unique_ptr<NetworkConnection>& connection)
|
||||
}
|
||||
|
||||
chat_history_add(text);
|
||||
gNetwork.Server_Send_CHAT(text);
|
||||
gNetwork.Server_Send_EVENT_PLAYER_DISCONNECTED((char*)connection_player->name, connection->getLastDisconnectReason());
|
||||
}
|
||||
player_list.erase(std::remove_if(player_list.begin(), player_list.end(), [connection_player](std::unique_ptr<NetworkPlayer>& player){ return player.get() == connection_player; }), player_list.end());
|
||||
client_connection_list.remove(connection);
|
||||
@@ -1709,7 +1735,7 @@ void Network::Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p
|
||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name);
|
||||
chat_history_add(text);
|
||||
Server_Send_MAP(&connection);
|
||||
gNetwork.Server_Send_CHAT(text);
|
||||
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
||||
Server_Send_GROUPLIST(connection);
|
||||
Server_Send_PLAYERLIST();
|
||||
}
|
||||
@@ -1968,6 +1994,36 @@ void Network::Client_Handle_GROUPLIST(NetworkConnection& connection, NetworkPack
|
||||
}
|
||||
}
|
||||
|
||||
void Network::Client_Handle_EVENT(NetworkConnection& connection, NetworkPacket& packet)
|
||||
{
|
||||
uint16 eventType;
|
||||
packet >> eventType;
|
||||
switch (eventType) {
|
||||
case SERVER_EVENT_PLAYER_JOINED:
|
||||
{
|
||||
char text[256];
|
||||
const char *playerName = packet.ReadString();
|
||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &playerName);
|
||||
chat_history_add(text);
|
||||
break;
|
||||
}
|
||||
case SERVER_EVENT_PLAYER_DISCONNECTED:
|
||||
{
|
||||
char text[256];
|
||||
const char *playerName = packet.ReadString();
|
||||
const char *reason = packet.ReadString();
|
||||
const char *args[] = { playerName, reason };
|
||||
if (str_is_null_or_empty(reason)) {
|
||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_NO_REASON, args);
|
||||
} else {
|
||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_WITH_REASON, args);
|
||||
}
|
||||
chat_history_add(text);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int network_init()
|
||||
{
|
||||
return gNetwork.Init();
|
||||
|
||||
Reference in New Issue
Block a user