summaryrefslogtreecommitdiff
path: root/network_udp.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2006-01-25 18:11:06 +0000
committerDarkvater <Darkvater@openttd.org>2006-01-25 18:11:06 +0000
commit082aa38f79930b31a5b9177e507a74cba0738e7a (patch)
tree2e2b02a496376c4fb097825d484c2c4a6f6f5492 /network_udp.c
parent063aa48b0bad3a8e8f046b9dc8e51f8a67b9678c (diff)
downloadopenttd-082aa38f79930b31a5b9177e507a74cba0738e7a.tar.xz
(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.
Diffstat (limited to 'network_udp.c')
-rw-r--r--network_udp.c64
1 files changed, 40 insertions, 24 deletions
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;