From 082aa38f79930b31a5b9177e507a74cba0738e7a Mon Sep 17 00:00:00 2001 From: Darkvater Date: Wed, 25 Jan 2006 18:11:06 +0000 Subject: (svn r3427) - Feature: Allow seeing and setting the maximum amount of companies and spectators for a server. This can be changed/viewed during runtime as well in the console. --- network_udp.c | 64 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 24 deletions(-) (limited to 'network_udp.c') diff --git a/network_udp.c b/network_udp.c index b4087c1e6..3248b98a1 100644 --- a/network_udp.c +++ b/network_udp.c @@ -61,6 +61,13 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER) _network_game_info.map_set = _opt.landscape; NetworkSend_uint8 (packet, NETWORK_GAME_INFO_VERSION); + + /* NETWORK_GAME_INFO_VERSION = 2 */ + NetworkSend_uint8 (packet, _network_game_info.companies_max); + NetworkSend_uint8 (packet, _network_game_info.companies_on); + NetworkSend_uint8 (packet, _network_game_info.spectators_max); + + /* NETWORK_GAME_INFO_VERSION = 1 */ NetworkSend_string(packet, _network_game_info.server_name); NetworkSend_string(packet, _network_game_info.server_revision); NetworkSend_uint8 (packet, _network_game_info.server_lang); @@ -103,30 +110,39 @@ DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_RESPONSE) // Find next item item = NetworkGameListAddItem(inet_addr(inet_ntoa(client_addr->sin_addr)), ntohs(client_addr->sin_port)); - if (game_info_version == 1) { - NetworkRecv_string(&_udp_cs, p, item->info.server_name, sizeof(item->info.server_name)); - NetworkRecv_string(&_udp_cs, p, item->info.server_revision, sizeof(item->info.server_revision)); - item->info.server_lang = NetworkRecv_uint8(&_udp_cs, p); - item->info.use_password = NetworkRecv_uint8(&_udp_cs, p); - item->info.clients_max = NetworkRecv_uint8(&_udp_cs, p); - item->info.clients_on = NetworkRecv_uint8(&_udp_cs, p); - item->info.spectators_on = NetworkRecv_uint8(&_udp_cs, p); - item->info.game_date = NetworkRecv_uint16(&_udp_cs, p); - item->info.start_date = NetworkRecv_uint16(&_udp_cs, p); - NetworkRecv_string(&_udp_cs, p, item->info.map_name, sizeof(item->info.map_name)); - item->info.map_width = NetworkRecv_uint16(&_udp_cs, p); - item->info.map_height = NetworkRecv_uint16(&_udp_cs, p); - item->info.map_set = NetworkRecv_uint8(&_udp_cs, p); - item->info.dedicated = NetworkRecv_uint8(&_udp_cs, p); - - str_validate(item->info.server_name); - str_validate(item->info.server_revision); - str_validate(item->info.map_name); - if (item->info.server_lang >= NETWORK_NUM_LANGUAGES) item->info.server_lang = 0; - if (item->info.map_set >= NUM_LANDSCAPE ) item->info.map_set = 0; - - if (item->info.hostname[0] == '\0') - snprintf(item->info.hostname, sizeof(item->info.hostname), "%s", inet_ntoa(client_addr->sin_addr)); + /* Please observe the order. In the order in which packets are sent + * they are to be received */ + switch (game_info_version) { + case 2: + item->info.companies_max = NetworkRecv_uint8(&_udp_cs, p); + item->info.companies_on = NetworkRecv_uint8(&_udp_cs, p); + item->info.spectators_max = NetworkRecv_uint8(&_udp_cs, p); + /* Fallthrough */ + case 1: + NetworkRecv_string(&_udp_cs, p, item->info.server_name, sizeof(item->info.server_name)); + NetworkRecv_string(&_udp_cs, p, item->info.server_revision, sizeof(item->info.server_revision)); + item->info.server_lang = NetworkRecv_uint8(&_udp_cs, p); + item->info.use_password = NetworkRecv_uint8(&_udp_cs, p); + item->info.clients_max = NetworkRecv_uint8(&_udp_cs, p); + item->info.clients_on = NetworkRecv_uint8(&_udp_cs, p); + item->info.spectators_on = NetworkRecv_uint8(&_udp_cs, p); + item->info.game_date = NetworkRecv_uint16(&_udp_cs, p); + item->info.start_date = NetworkRecv_uint16(&_udp_cs, p); + NetworkRecv_string(&_udp_cs, p, item->info.map_name, sizeof(item->info.map_name)); + item->info.map_width = NetworkRecv_uint16(&_udp_cs, p); + item->info.map_height = NetworkRecv_uint16(&_udp_cs, p); + item->info.map_set = NetworkRecv_uint8(&_udp_cs, p); + item->info.dedicated = NetworkRecv_uint8(&_udp_cs, p); + + str_validate(item->info.server_name); + str_validate(item->info.server_revision); + str_validate(item->info.map_name); + if (item->info.server_lang >= NETWORK_NUM_LANGUAGES) item->info.server_lang = 0; + if (item->info.map_set >= NUM_LANDSCAPE ) item->info.map_set = 0; + + if (item->info.hostname[0] == '\0') + snprintf(item->info.hostname, sizeof(item->info.hostname), "%s", inet_ntoa(client_addr->sin_addr)); + break; } item->online = true; -- cgit v1.2.3-54-g00ecf