diff options
-rw-r--r-- | network.c | 3 | ||||
-rw-r--r-- | network.h | 1 | ||||
-rw-r--r-- | network_client.c | 27 | ||||
-rw-r--r-- | network_server.c | 2 | ||||
-rw-r--r-- | players.c | 4 |
5 files changed, 20 insertions, 17 deletions
@@ -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; @@ -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; } @@ -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 */ } |