You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
5.0 KiB
C++
108 lines
5.0 KiB
C++
/*
|
|
* This file is part of OpenTTD.
|
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* @file game_info.h Convert NetworkGameInfo to Packet and back.
|
|
*/
|
|
|
|
#ifndef NETWORK_CORE_GAME_INFO_H
|
|
#define NETWORK_CORE_GAME_INFO_H
|
|
|
|
#include "config.h"
|
|
#include "core.h"
|
|
#include "../../newgrf_config.h"
|
|
#include "../../date_type.h"
|
|
|
|
/*
|
|
* NetworkGameInfo has several revisions which we still need to support on the
|
|
* wire. The table below shows the version and size for each field of the
|
|
* serialized NetworkGameInfo.
|
|
*
|
|
* Version: Bytes: Description:
|
|
* all 1 the version of this packet's structure
|
|
*
|
|
* 4+ 1 number of GRFs attached (n)
|
|
* 4+ n * 20 unique identifier for GRF files. Consists of:
|
|
* - one 4 byte variable with the GRF ID
|
|
* - 16 bytes (sent sequentially) for the MD5 checksum
|
|
* of the GRF
|
|
*
|
|
* 3+ 4 current game date in days since 1-1-0 (DMY)
|
|
* 3+ 4 game introduction date in days since 1-1-0 (DMY)
|
|
*
|
|
* 2+ 1 maximum number of companies allowed on the server
|
|
* 2+ 1 number of companies on the server
|
|
* 2+ 1 maximum number of spectators allowed on the server
|
|
*
|
|
* 1+ var string with the name of the server
|
|
* 1+ var string with the revision of the server
|
|
* 1+ 1 the language run on the server
|
|
* (0 = any, 1 = English, 2 = German, 3 = French)
|
|
* 1+ 1 whether the server uses a password (0 = no, 1 = yes)
|
|
* 1+ 1 maximum number of clients allowed on the server
|
|
* 1+ 1 number of clients on the server
|
|
* 1+ 1 number of spectators on the server
|
|
* 1 & 2 2 current game date in days since 1-1-1920 (DMY)
|
|
* 1 & 2 2 game introduction date in days since 1-1-1920 (DMY)
|
|
* 1+ var string with the name of the map
|
|
* 1+ 2 width of the map in tiles
|
|
* 1+ 2 height of the map in tiles
|
|
* 1+ 1 type of map:
|
|
* (0 = temperate, 1 = arctic, 2 = desert, 3 = toyland)
|
|
* 1+ 1 whether the server is dedicated (0 = no, 1 = yes)
|
|
*/
|
|
|
|
/**
|
|
* The game information that is sent from the server to the client.
|
|
*/
|
|
struct NetworkServerGameInfo {
|
|
GRFConfig *grfconfig; ///< List of NewGRF files used
|
|
Date start_date; ///< When the game started
|
|
Date game_date; ///< Current date
|
|
uint32 map_width; ///< Map width
|
|
uint32 map_height; ///< Map height
|
|
std::string server_name; ///< Server name
|
|
std::string server_revision; ///< The version number the server is using (e.g.: 'r304' or 0.5.0)
|
|
bool dedicated; ///< Is this a dedicated server?
|
|
bool use_password; ///< Is this server passworded?
|
|
byte clients_on; ///< Current count of clients on server
|
|
byte clients_max; ///< Max clients allowed on server
|
|
byte companies_on; ///< How many started companies do we have
|
|
byte companies_max; ///< Max companies allowed on server
|
|
byte spectators_on; ///< How many spectators do we have?
|
|
byte spectators_max; ///< Max spectators allowed on server
|
|
byte landscape; ///< The used landscape
|
|
};
|
|
|
|
/**
|
|
* The game information that is sent from the server to the clients
|
|
* with extra information only required at the client side.
|
|
*/
|
|
struct NetworkGameInfo : NetworkServerGameInfo {
|
|
bool version_compatible; ///< Can we connect to this server or not? (based on server_revision)
|
|
bool compatible; ///< Can we connect to this server or not? (based on server_revision _and_ grf_match
|
|
};
|
|
|
|
extern NetworkServerGameInfo _network_game_info;
|
|
|
|
const char *GetNetworkRevisionString();
|
|
bool IsNetworkCompatibleVersion(const char *other, bool extended = false);
|
|
void CheckGameCompatibility(NetworkGameInfo &ngi, bool extended = false);
|
|
|
|
void FillStaticNetworkServerGameInfo();
|
|
const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo();
|
|
|
|
void DeserializeGRFIdentifier(Packet *p, GRFIdentifier *grf);
|
|
void SerializeGRFIdentifier(Packet *p, const GRFIdentifier *grf);
|
|
|
|
void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info);
|
|
void DeserializeNetworkGameInfoExtended(Packet *p, NetworkGameInfo *info);
|
|
void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info);
|
|
void SerializeNetworkGameInfoExtended(Packet *p, const NetworkServerGameInfo *info, uint16 flags, uint16 version);
|
|
|
|
#endif /* NETWORK_CORE_GAME_INFO_H */
|