summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--network.c3
-rw-r--r--network.h1
-rw-r--r--network_client.c27
-rw-r--r--network_server.c2
-rw-r--r--players.c4
5 files changed, 20 insertions, 17 deletions
diff --git a/network.c b/network.c
index af4b3b8ea..06ee8b9ac 100644
--- a/network.c
+++ b/network.c
@@ -404,7 +404,7 @@ static ClientState *AllocClient(SOCKET s)
cs->quited = false;
if (_network_server) {
- ci = &_network_client_info[client_no];
+ ci = DEREF_CLIENT_INFO(cs);
memset(ci, 0, sizeof(*ci));
cs->index = _network_client_index++;
@@ -700,6 +700,7 @@ void NetworkInitialize(void)
_local_command_queue = NULL;
// Clean all client-sockets
+ memset(_clients, 0, sizeof(_clients));
for (cs = _clients; cs != &_clients[MAX_CLIENTS]; cs++) {
cs->socket = INVALID_SOCKET;
cs->status = STATUS_INACTIVE;
diff --git a/network.h b/network.h
index d7092383d..8088e545e 100644
--- a/network.h
+++ b/network.h
@@ -27,7 +27,6 @@
// Do not change this next line. It should _ALWAYS_ be MAX_CLIENTS + 1
#define MAX_CLIENT_INFO (MAX_CLIENTS + 1)
-#define NETWORK_DISCOVER_PORT 3978
#define NETWORK_DEFAULT_PORT 3979
#define MAX_INTERFACES 9
diff --git a/network_client.c b/network_client.c
index 72342014b..ab87aae7d 100644
--- a/network_client.c
+++ b/network_client.c
@@ -65,7 +65,7 @@ DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_JOIN)
p = NetworkSend_Init(PACKET_CLIENT_JOIN);
NetworkSend_string(p, _openttd_revision);
NetworkSend_string(p, _network_player_name); // Player name
- NetworkSend_uint8(p, _network_playas); // Password
+ NetworkSend_uint8(p, _network_playas); // PlayAs
NetworkSend_uint8(p, NETLANG_ANY); // Language
NetworkSend_string(p, _network_unique_id);
NetworkSend_Packet(p, MY_CLIENT);
@@ -317,15 +317,19 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
{
NetworkClientInfo *ci;
uint16 index = NetworkRecv_uint16(p);
+ byte playas = NetworkRecv_uint8(p);
+ char name[NETWORK_NAME_LENGTH];
+ char unique_id[NETWORK_NAME_LENGTH];
- ci = NetworkFindClientInfoFromIndex(index);
- if (ci != NULL) {
- byte playas;
- char name[NETWORK_NAME_LENGTH];
+ NetworkRecv_string(p, name, sizeof(name));
+ NetworkRecv_string(p, unique_id, sizeof(unique_id));
- playas = NetworkRecv_uint8(p);
- NetworkRecv_string(p, name, sizeof(name));
+ /* Do we receive a change of data? Most likely we changed playas */
+ if (index == _network_own_client_index)
+ _network_playas = playas;
+ ci = NetworkFindClientInfoFromIndex(index);
+ 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);
@@ -336,6 +340,7 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
ci->client_playas = playas;
ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
+
return NETWORK_RECV_STATUS_OKAY;
}
@@ -343,9 +348,11 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
ci = NetworkFindClientInfoFromIndex(NETWORK_EMPTY_INDEX);
if (ci != NULL) {
ci->client_index = index;
- ci->client_playas = NetworkRecv_uint8(p);
- NetworkRecv_string(p, ci->client_name, sizeof(ci->client_name));
- NetworkRecv_string(p, ci->unique_id, sizeof(ci->unique_id));
+ ci->client_playas = playas;
+
+ ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
+ ttd_strlcpy(ci->unique_id, unique_id, sizeof(ci->unique_id));
+
return NETWORK_RECV_STATUS_OKAY;
}
diff --git a/network_server.c b/network_server.c
index c7f1cb16a..3dc001f5f 100644
--- a/network_server.c
+++ b/network_server.c
@@ -778,7 +778,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
return;
}
if (cp->cmd == CMD_PLAYER_CTRL) {
- // UGLY! p1 is mis-used to get the client-id in CmdPlayerCtrl
+ // UGLY! p2 is mis-used to get the client-id in CmdPlayerCtrl
cp->p2 = cs - _clients;
}
diff --git a/players.c b/players.c
index 9dcd727cd..039654df3 100644
--- a/players.c
+++ b/players.c
@@ -662,8 +662,6 @@ int32 CmdPlayerCtrl(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_docommand_recursive = 0;
DoCommandP(0, ci->client_playas-1, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
}
- } else {
- _network_playas = p->index + 1;
}
} else {
if (_network_server) {
@@ -672,8 +670,6 @@ int32 CmdPlayerCtrl(int x, int y, uint32 flags, uint32 p1, uint32 p2)
ci = &_network_client_info[p2];
ci->client_playas = OWNER_SPECTATOR;
NetworkUpdateClientInfo(ci->client_index);
- } else {
- _network_playas = OWNER_SPECTATOR;
}
#endif /* ENABLE_NETWORK */
}